28. Feb. 2012 (10:51)

Noch eine Abstraktionsschicht

"Es gibt kein Problem, dass sich nicht durch die Einführung einer weiteren Abstraktionsschicht lösen lässt!" [Zitat von unbekannt]

sitemap-1 Ich gebe offen und ehrlich zu, dass auch mein Programmcode zuweilen schneller wächst, als es die Architektur vor sieht. Manchmal ist es eben viel pragmatischer eine neue Funktionalität einfach einzubauen anstatt über Code-Ästhetik nachzudenken. Wie immer klappt das für eine paar Funktionen ganz gut, aber irgendwann wird es dann unschön und es wird Zeit für Refactoring. Wichtig ist dabei nur den richtigen Zeitpunkt zu erwischen - aber das ist ein anderes Thema.

sitemap-2 sitemap-3 Die neueste Refaktorierung im Wombat Framework betrifft Sitemaps und zwar diejenigen die Suchmaschinen wie Google zum Fraß vorgeworfen werden. Hier galt es die Herausforderung zu meistern die URL-Listen aus den unterschiedlichsten Quellen zu befüllen. Hier wurde zum einen eine spezielles SEO_Sitemap Modul geschaffen, einfach um die Abgrenzung zu SEO_Robots (die sich um die Generierung der robots.txt kümmert) zu unterstreichen. Wichtiger ist aber die Trennung von Datenquelle und Rendering. Hier wurde eine weitere Akstraktionsschicht eingefügt, die es erlaubt beliebig viele Datenquellen zur Generierung der Sitemaps heranzuziehen. Selbstverständlich während der Laufzeit und frei konfigurierbar. Bisher gibt es vier Datenquellen die URL-Listen für Blog-Artikel, Menü-Einträge, Unterseiten und Multimediadateien. Eine weitere Custom-Datenquelle listed die URLs aller Artikel im Shop auf.

In Code-Zeilen ausgedrückt stellt sich die Refaktorierung wie folgt da: Die alte Klasse generiert die sitemap.xml und die robots.txt und ist 512 Zeilen lang (inklusive Kommentare). Die neuen Implementierung ist aufgeteilt in eine Klasse für die robots.txt (47 Zeilen) und in weitere für die sitemap.xml

  • Frontend Klasse: 280 Zeilen (neu: Erzeugung des Sitemap-Index )
  • Abstraktionsebene: 164 Zeilen (Subject-Observer-Pattern)
  • Datenquellen:
    • Blog: 61 Zeilen
    • Gallery: 73 Zeilen
    • Menu: 144 Zeilen (neu)
    • Page: 132 Zeilen
    • VFS (Mediendateien): 158 Zeilen
Unterm Strich sind es also deutlich mehr Zeilen Code, allerdings ist die Struktur deutlich übersichtlicher das System durch einfaches Hinzufügen weiterer Klassen erweiterbar (offen für Erweiterung, geschlossen für Änderungen) - wie die Custom Datenquelle: ShopArtikel (52 Zeilen)

Nebenbei bemerkt erzeugt das neue SEO_Sitemap Modul auch lokalisierten Varianten für mehrsprachige Webseiten. Wie gesagt, es gibt kein Problem, dass sich nicht durch eine weitere Abstraktionsschicht lösen lässt.

gERD Schaufelberger

zur Liste


Aktuelle Artikel