Erweiterung bestehender Funktionen

1. Einführung

In der täglichen Arbeit tritt häufig die Situation auf, dass eine bestehende Bibliothek die bisherigen Anforderungen erfüllt hat, der aktuell zu lösende Spezialfall jedoch nicht. Viele Entwickler neigen in der geschilderten Situation dazu, die Funktion für den aktuellen Anwendungsfall neu zu implementieren. Andere wiederum versuchen krampfhaft eine Bibliothek zu suchen, die diesen Spezialfall abdeckt. Diese Möglichkeiten führt zwar sicher zum Ziel, verringern jedoch entweder die Wartbarkeit, da weitere externe Bibliotheken eingebunden oder gar beliebig kombiniert werden, und erhöhen dabei gleichzeit die Fehleranfälligkeit. Darüber hinaus sollte sich jeder bewusst sein, dass eine API-Änderung automatisch bedeutet, sich vom Update-Pfad der eingesetzten Bibliothek zu entfernen, da in einer Version eingefügte Quick-Hacks womöglich in einer neueren Version nicht mehr funktionieren.

Dieses Tutorial möchte daher eine Methode aufzeigen, wie bestehende Funktionen ohne Anpassung an der verwendeten Biblothek für den eigenen Bedarf "angepasst" und genutzt werden können. Das Tutorial geht dabei davon aus, dass die behandelten Bibliotheken bzw. Module kein eigener Code ist, da diese Methode sonst keinen Sinn macht.

Mancher Leser wird zurecht anmerken, dass eine Anpassung einer Bibliothek bedeutet, dass die Signatur - die API der Bibliothek, oder des Moduls - nicht allgemeingültig genug ausgelegt ist. In vielen Fällen muss ich dem Leser Recht geben, es gibt jedoch erfahrungsgemäß relativ viele API-Definitionen, die nicht für exakt jeden Anwendungsfall mit genau einer Methode verwendbar sind.

2. Beispiel einer TagLib

Das folgende Beispiel soll an Hand des im Release des Frameworks enthaltenen Moduls socialbookmark zeigen, wie eine vorhandene Bibliothek für den eigenen Gebrauch erweitert werden kann.

2.1. Aufgabenstellung

Die im apf-codepack-* enthaltenen Bibliotheken des Moduls, sehen die Möglichkeit vor, dieses per XML-Tag in den Inhaltsbereich einzubinden. Dazu enthält das Modul eine TagLib, deren Eigenschaften unter Socialbookmarking, Kapitel 5, beschrieben werden. Die Tagdefinition sieht dabei vor, dass ein Titel der aktuellen Seiten, der beim Bookmarkservice als Linktitel verwendet wird, als Tag-Attribut übergeben werden kann. Da die Definition jedoch statisch ist, ist es zunächst nicht möglich einen dynamischen Titel an die TagLib zu übergeben. Gerade in einer CMS-Seite, in der der Titel abhängig der anzuzeigenden Seite dynamisch variiert, ist das problematisch!

2.2. Analyse der bestehenden API

Um die aktuell mögliche Funktion zu analysieren, muss sich der Entwickler die Frage stellen: Was ist schon möglich und was fehlt wirklich? Im Fall des Socialbookmarking-Moduls ist die Antwort denkbar einfach: statisches Anzeigen der Bookmark-Icons ist möglich, dynamische Titel nicht!

2.3. Erweiterung der API durch Wrapping

Ein sehr beliebtes Mittel ist Wrapping. Wrapping in der Programmierung bedeutet, eine weitere Schicht um eine Bibliothek - oder hier eine Taglib - zu legen und dadurch die Funktionalität ohne Veränderung der eingesetzten Komponente zu erweitern.

Betrachten wir zunächst die Funktionalität der bisherigen TagLib-Klasse. Diese implementiert eine transform()-Methode, die die Tag-Eigenschaften an den socialbookmarkManager übergibt und diesen für die Ausgabe der Bookmarking-Elemente verwendet. Der Quellcode der Klasse (im apf-codepack-* zu finden unter apps/modules/socialbookmark/pres/taglib) wird im folgenden Kasten dargestellt (Kommentare wurden gekürzt):

PHP-Code
namespace APF\modules\socialbookmark\pres\taglib; use APF\core\pagecontroller\Document; use APF\modules\socialbookmark\biz\SocialBookmarkBarManager; class SocialBookmarkBarTag extends Document { public function __construct() { $this->setAttribute('width', '20'); $this->setAttribute('height', '20'); $this->setAttribute('title', null); $this->setAttribute('url', null); } public function transform() { $bm = & $this->getServiceObject('APF\modules\socialbookmark\biz\SocialBookmarkBarManager'); /* @var $bm SocialBookmarkBarManager */ $bm->setImageWidth($this->getAttributes('width')); $bm->setImageHeight($this->getAttributes('height')); $bm->setUrl($this->getAttribute('url')); $bm->setTitle($this->getAttribute('title')); return $bm->getBookmarkCode(); } }

Um den Titel der aktuell angezeigten Seite dynamisch zu gestalten, ist es nun ratsam, eine weitere TagLib zu definieren, die ausschließlich die neue Funktionalität beinhaltet, jedoch Gebrauch der bereits bestehenden Funktion macht. Um ein konkretes Beispiel aufzeigen zu können, soll der neu zu erstellende Tag my:bookmark genannt werden. Diese beinhaltet dann folgenden Quellcode:

PHP-Code
namespace VENDOR\socialbookmark\pres\tags; use APF\modules\socialbookmark\pres\taglib\SocialBookmarkBarTag; class MyBookmarkTag extends SocialBookmarkBarTag { public function transform() { // Beziehen des aktuellen Titels $title = ...; // Title in Tag-Attribut einsetzen $this->setAttributes('title', $title); // Ausgabe mit Hilfe der Eltern-Methode transform() erzeugen return parent::transform(); } }

In der Methode transform() wird dabei lediglich der Titel der Seite je nach Anwendungsfall erzeugt und dem dafür vorgesehenen Attribut übergeben. Die eigentliche Erzeugung der Ausgabe wird der bisherigen TagLib-Methode überlassen. Durch diese Änderung bleibt es weiterhin möglich, dem Tag die Attribute

  • width
  • height
  • target

mitzugeben, ohne das Verhalten nochmals in der neuen Klasse implementieren zu müssen. Das Einbinden der erweiterten TagLib funktioniert dann wie gewohnt mit

APF-Template
<core:addtaglib class="VENDOR\socialbookmark\pres\tags\MyBookmarkTag" prefix="my" name="bookmark" /> <my:bookmark width="16" height="16" />

Details zur Implementierung von Tags können unter Implementierung von Tags nachgelesen werden.

2.4. Umgang mit Updates

Sollte die verwendete Bibliothek zukünftig eine andere API unterstützen, beschränkt sich die Anpassung lediglich auf das Füllen des Attributes title, da der interne Ablauf der Methode transform() unberührt bleibt. Weiterer Vorteil ist, dass die API der Wrapper-Klasse konstant bleibt und keine Anpassung im Gesamtsystem zur Einbindung des Moduls vorgenommen werden muss. Das in diesem Tutorial aufgezeigte Beispiel hat sich zwar "nur" auf die Erweiterung einer TagLib beschränkt, das Prinzip ist jedoch auf andere Bereiche anwendbar.

Kommentare

Möchten Sie den Artikel eine Anmerkung hinzufügen, oder haben Sie ergänzende Hinweise? Dann können Sie diese hier einfügen. Die bereits verfassten Anmerkungen und Kommentare finden Sie in der untenstehenden Liste.
« 1   2   3   4   » »»  
Einträge/Seite: | 5 | 10 | 15 | 20 |
1
myy myy 23.06.2017, 09:23:38

MYY


 

true religion outlet store womens clothing ralph lauren valentino longchamp outlet nfl jerseys true religion jeans nike free mcm handbags air jordans lacoste outlet michael kors australia beats by dre nike shoes outlet hilfiger online shop swarovski christian louboutin outlet hogan lions nfl jersey pacers jersey rolex watches raptors jersey nba jersey grizzlies jersey mbt shoes barbour jackets michael kors uk houston rockets jersey timberland atlanta hawks jersey michael kors outlet online trail blazers jersey hogan shoes nike air max oakley sungalsses outlet polo outlet online michael kors outlet nike soccer shoes tommy hilfiger converse coach outlet usa pandora uk ray ban michael kors iphone case nike air burberry outlet online chargers nfl jersey oklahoma city thunder jerseys softball bats michael kors bags oakley sunglasses cheap new balance occhiali ray ban michael kors bags true religion jeans outlet converse adidas yeezy shoes oakley vault nike free run ralph lauren outlet titans nfl jersey true religion outlet salvatore ferragamo oakley outlet online nike store cheap oakley sunglasses coach outlet basketball shoes nike air max longchamp black friday flat iron saints nfl jersey wizards jersey nike air coach factory outlet online burberry uk air huarache nike shoes outlet michael kors handbags tory burch sandals coach outlet cheap jerseys nike huarache timberland boots los angeles clippers jerseys cheap true religion oakley sunglasses outlet ralph lauren north face backpacks burberry outlet kate spade outlet steelers nfl jersey pandora charms jaguars nfl jersey designer handbags hermes birkin cheap jerseys cleveland cavaliers jersey chicago bulls jerseys detroit pistons jerseys redskins nfl jersey hermes outlet instyler polo ralph ray ban sunglasses outlet eyeglass frames polo ralph lauren outlet online oakley sunglasses denver nuggets jersey burberry nike free run ravens nfl jersey dallas mavericks jersey cheap jerseys the north face outlet azcardinals nfl jersey buccaneers nfl jersey patriots nfl jersey hollister air max hollister clothing mcm handbags pandora jewellery north face outlet tommy hilfiger outlet jimmy choo shoes cheap michael kors bills nfl jersey oakley sungalsses outlet air max shoes new balance outlet jordan michael kors usa burberry juicy couture outlet colts nfl jersey horloges air force bcbg max hollister clothing store michael kors philipp plein oakley sunglasses outlet ray ban outlet oakley vans shoes replica watches red bottoms hoodies outlet nike free 5.0 long champ salvatore ferragamo omega watches ralph lauren nike factory scarpe hogan oakley sunglasses outlet puma ray bans ray ban wayfarer timberland outlet coachfactory.com/shop ray ban michael kors air max nike roshe michael kors black friday giuseppe shoes relojes beats by dre headphones 49ers nfl jersey retro jordans huarache mcm backpack dsquared2 outlet adidas celine handbags michael kors outlet nets jerseys nike roshe adidas shoes burberry handbags outlet seahawks nfl jersey tn pas cher michael kors outlet ralph lauren polo bottega veneta chi flat iron katespade jimmy choo burberry handbags cheap nike shoes michael kors outlet orlando magic jersey michael kors outlet michael kors oakley sunglasses outlet pelicans jersey louboutin iphone cases michael kors purses chrome hearts outlet mlb jerseys roshe run nike roshe run michael kors handbags nike shoes outlet ray ban christian louboutin vans adidas burberry outlet air max 2015 handbags outlet ralph lauren nike soccer shoes outlet prada handbags raiders nfl jersey christian louboutin prada shoes bottega coach factory outlet warriors jersey adidas schuhe michael kors outlet online michael kors outlet coach outlet nba shoes adidas burberry uk new york knicks jerseys nike air max 2015 cheap nhl jerseys longchamp handbags outlet coach outlet store ralph lauren outlet nike air max swarovski nike store ray ban mcm bags true religion ray ban the north face hollisterco asics outlet nike mercurial jets nfl jersey rolex watches for sale new balance the north face burberry outlet cheap shoes air max 90 vikings nfl jersey pandora oakley sungalsses outlet burberry canada nike store coach outlet online polo ralph lauren cheap ray ban northface charlotte hornets jersey adidas hollister clothing store burberry outlet online fidget spinner nike ferragamo hollister new balance cheap nfl jerseys thomas sabo adidas bengals nfl jersey woolrich outlet ralph lauren outlet online juicy couture ray ban sunglasses miami heat jerseys ralph lauren factory store cowboys nfl jersey longchamp prada oakley sungalsses outlet coach black friday converse sneakers coach factory outlet cheap oakley eagles nfl jersey pandora jewelry longchamp handbags soccer outlet michael kors hollister lunette oakley hilfiger pandora hugo boss online christian louboutin shoes polo ralph lauren cheap ray ban christian louboutin shoes nfl jerseys jordan release dates roshe run prada sunglasses rolex watches supra shoes levi's jeans north face marc jacobs nhl jerseys coach black friday panthers nfl jersey supra shoes ralph lauren black friday ralph lauren uk babyliss barbour jackets outlet polo outlet oakley vault thomas sabo watches longchamp bucks jersey asics ray ban texans nfl jersey hilfiger outlet michael kors givenchy antigona beats by dr dre philipp plein outlet versace outlet ray ban sunglasses outlet nike free air max nike cheap jordans tommy hilfiger nike air max nike canada celine black friday beats headphones timberland shoes browns nfl jersey suns jersey christian louboutin philadelphia 76ers jersey salomon oakley black friday omega watches coach purses outlet timberwolves jersey reebok coach outlet marc jacobs longchamp outlet tommy hilfiger los angeles lakers jerseys chiefs nfl jersey polo ralph lauren outlet boston celtics jerseys wedding dresses sale air max mcm backpack outlet rams nfl jersey vans spurs jersey puma shoes fendi outlet ferragamo shoes barbour ray-ban sunglasses packers nfl jersey air max oakley sungalsses outlet oakley outlet adidas shoes rolex watches swarovski replica handbags cheap mlb jerseys handbags outlet burberry michael kors ralph lauren ralph lauren online shop swarovski crystal eyeglasses online swarovski jewelry adidas tracksuits kings jersey hermes kate spade baseball bats the north face jackets uhren michael kors outlet online sale jordan shoes mizuno running converse shoes coach outlet ecco shoes dolphins nfl jersey falcons nfl jersey coach outlet kate spade outlet barbour jackets giants nfl jersey north face jackets roshe runs ray ban black friday under armour coach black friday jazz jersey barbour jacket outlet new balance shoes bcbg dresses michaelkors.com cheap michael kors calvin klein ed hardy ray ban bears nfl jersey prada outlet rolex montre mk outlet online coach outlet online broncos nfl jersey giuseppe zanotti burberry outlet armani exchange five finger shoes nike ralph lauren polos dsquared2 jordan retro ray ban sunglasses swarovski canada north face mont blanc pens ray ban
2
polo polo 15.06.2017, 04:05:38
bills nfl jersey, salomon, swarovski canada, timberland shoes, kate spade outlet, new balance outlet, jordan, valentino, ralph lauren, coach outlet, nfl jerseys, north face outlet, mont blanc pens, rolex watches, tommy hilfiger outlet, ray ban sunglasses, michael kors handbags, mcm backpack, relojes, mcm bags, burberry uk, mcm handbags, mbt shoes, ecco shoes, coach black friday, longchamp, michael kors handbags, kate spade outlet, nike, converse, michaelkors.com, coach purses outlet, michael kors outlet, polo outlet, redskins nfl jersey, salvatore ferragamo, steelers nfl jersey, christian louboutin, oakley sungalsses outlet, juicy couture outlet, giants nfl jersey, nike air max, ray ban sunglasses outlet, katespade, babyliss, adidas, hollister, oakley, nba jersey, toms shoes, beats headphones, texans nfl jersey, oakley vault, womens clothing, coach outlet, air jordans, softball bats, reebok, ed hardy, the north face, roshe run, cheap ray ban, bcbg max, timberwolves jersey, tory burch sandals, rolex montre, nike, nike canada, burberry outlet online, polo ralph lauren outlet online, michael kors uk, polo ralph lauren outlet, nike shoes outlet, ray ban, ray ban, nike air, puma, marc jacobs, nike shoes outlet, nike free run, pandora uk, true religion outlet store, hollisterco, jaguars nfl jersey, nike free, ray ban outlet, 49ers nfl jersey, barbour jackets outlet, nike roshe, christian louboutin, jordan release dates, kate spade, adidas tracksuits, new balance, cheap jerseys, oakley vault, philipp plein outlet, supra shoes, adidas, cheap nhl jerseys, oakley sungalsses outlet, jordan retro, pandora jewellery, vans shoes, christian louboutin shoes, michael kors, iphone case, woolrich outlet, chrome hearts outlet, coach outlet, hermes outlet, vikings nfl jersey, hilfiger online shop, nike mercurial, longchamp handbags, the north face outlet, burberry outlet, fendi outlet, swarovski crystal, ralph lauren black friday, hugo boss online, versace outlet, bengals nfl jersey, ray ban, swarovski jewelry, colts nfl jersey, rolex watches for sale, burberry outlet online, cheap mlb jerseys, nba shoes, celine handbags, longchamp, michael kors australia, oakley outlet, hollister, ray ban, burberry, handbags outlet, burberry outlet, adidas shoes, adidas shoes, northface, jordan shoes, air max shoes, ralph lauren outlet, michael kors outlet online, adidas, timberland outlet, ray bans, long champ, ray-ban sunglasses, michael kors bags, orlando magic jersey, prada outlet, soccer outlet, tn pas cher, cheap shoes, soccer shoes outlet, hermes, tommy hilfiger, swarovski, houston rockets jersey, cheap jerseys, cheap jordans, atlanta hawks jersey, michael kors, coach factory outlet online, cheap oakley, burberry handbags, air max 2015, celine black friday, jazz jersey, barbour jackets, ray ban, asics outlet, nike store, cowboys nfl jersey, burberry outlet, bucks jersey, levi's jeans, barbour jacket outlet, jimmy choo, ralph lauren polo, patriots nfl jersey, buccaneers nfl jersey, mizuno running, ralph lauren uk, azcardinals nfl jersey, miami heat jerseys, toms outlet, swarovski, cheap oakley sunglasses, kings jersey, ralph lauren, michael kors, mcm backpack outlet, air max, pelicans jersey, hogan, nike roshe, tory burch sale, ralph lauren outlet, puma shoes, timberland boots, nike free, eyeglasses online, oklahoma city thunder jerseys, saints nfl jersey, packers nfl jersey, coach outlet usa, oakley sungalsses outlet, the north face jackets, converse, lions nfl jersey, grizzlies jersey, coach factory outlet, roshe run, michael kors usa, armani exchange, nhl jerseys, oakley sunglasses outlet, hoodies outlet, browns nfl jersey, roshe runs, chiefs nfl jersey, dolphins nfl jersey, michael kors outlet, omega watches, longchamp outlet, oakley sungalsses outlet, burberry handbags outlet, watches, coachfactory.com/shop, hilfiger outlet, nike air, wedding dresses sale, converse sneakers, prada shoes, hollister clothing store, bottega veneta, retro jordans, hollister, the north face, los angeles clippers jerseys, north face, dsquared2, detroit pistons jerseys, p90x workout, handbags outlet, adidas schuhe, barbour, prada handbags, cheap michael kors, polo ralph lauren, christian louboutin shoes, michael kors outlet, seahawks nfl jersey, nike, boston celtics jerseys, nike huarache, longchamp handbags outlet, raptors jersey, hilfiger, beats by dre headphones, michael kors, rams nfl jersey, ray ban black friday, nike free run, ray ban, michael kors, charlotte hornets jersey, burberry uk, beats by dre, ralph lauren polos, mlb jerseys, new balance, ralph lauren, wizards jersey, chi flat iron, jimmy choo shoes, falcons nfl jersey, cheap ray ban, salvatore ferragamo, mk outlet online, cheap nike shoes, baseball bats, nike free 5.0, nike shoes outlet, denver nuggets jersey, air max, air huarache, new york knicks jerseys, iphone cases, north face jackets, michael kors purses, oakley sunglasses outlet, suns jersey, toms shoes, toms.com, nfl jerseys, air max, north face, true religion jeans outlet, coach outlet, spurs jersey, burberry outlet, hermes birkin, longchamp black friday, coach outlet, michael kors, nike air max, ray ban wayfarer, pandora jewelry, warriors jersey, panthers nfl jersey, giuseppe shoes, horloges, hogan shoes, oakley outlet online, hollister clothing, oakley sunglasses outlet, christian louboutin outlet, nike air max, nike, cleveland cavaliers jersey, pandora, cheap michael kors, dallas mavericks jersey, burberry, ralph lauren online shop, air max 90, cheap jerseys, oakley sunglasses outlet, michael kors black friday, ray ban sunglasses outlet, hollister clothing store, toms shoes, oakley sunglasses cheap, rolex watches, givenchy antigona, michael kors, nike, rolex watches, designer handbags, pandora, nets jerseys, coach factory outlet, air max 2015, christian louboutin, adidas, coach outlet, oakley sungalsses outlet, air max, instyler, ray ban, calvin klein, coach outlet store, converse shoes, polo ralph lauren, mcm handbags, ralph lauren, air force, michael kors outlet, north face backpacks, michael kors bags, toms outlet, oakley sunglasses, tory burch outlet, philipp plein, michael kors outlet online, michael kors outlet online sale, tommy hilfiger, polo outlet online, uhren, flat iron, prada sunglasses, thomas sabo, cheap true religion, eagles nfl jersey, tory burch outlet, asics, toms shoes outlet, omega watches, nike air max, raiders nfl jersey, nike store, bears nfl jersey, ferragamo shoes, cheap nfl jerseys, ferragamo, coach outlet online, bcbg dresses, ralph lauren, scarpe hogan, ray ban, adidas yeezy shoes, burberry canada, replica handbags, trail blazers jersey, beats by dr dre, tommy hilfiger, true religion, jets nfl jersey, swarovski, timberland, pandora charms, ralph lauren factory store, nike factory, lacoste outlet, vans, under armour, nike store, burberry, louboutin, basketball shoes, new balance, chicago bulls jerseys, dsquared2 outlet, red bottoms, chargers nfl jersey, ralph lauren outlet online, broncos nfl jersey, juicy couture, michael kors outlet, adidas, polo ralph, prada, eyeglass frames, occhiali ray ban, philadelphia 76ers jersey, bottega, air max, true religion outlet, vans, barbour jackets, marc jacobs, true religion jeans, soccer shoes, nike roshe run, coach outlet online, oakley black friday, huarache, coach black friday, titans nfl jersey, supra shoes, giuseppe zanotti, ravens nfl jersey, thomas sabo, lunette oakley, five finger shoes, coach black friday, longchamp outlet, los angeles lakers jerseys, nike, new balance shoes, toms outlet, replica watches, pacers jersey, ray ban sunglasses, michael kors outlet
3
Kolyaged 07.06.2017, 00:33:12
generic viagra bestellen

viagra generic

buy viagra online

viagra jelly brand positioning
4
Vickged 06.06.2017, 03:52:21
lowest apr loan bad credit

loans for bad credit

personal loans

payday loans laveen az
5
Vladimirged 02.06.2017, 20:54:30
is viagra taken fron shilajit

viagra online

cheap viagra

bull 100 viagra
6
Dredged 02.06.2017, 20:40:39
cialis 10mg tablet buy

cialis cheap

buy cialis

safe purchase of cialis
7
Vasilged 02.06.2017, 08:53:23
click here usa viagra

generic viagra

buy viagra

viagra vasodilatatore
8
Irisged 02.06.2017, 04:18:22
viagra online at sydney

viagra professional

viagra professional

viagra ricetta bianca
9
Irisged 01.06.2017, 06:27:29
less side has cialis viagra

viagra professional

buy viagra online

viagra canada samples
10
Demidged 30.05.2017, 07:22:17
cialis dosage reviews

cilais price

order cialis

cialis zurich