Thursday, July 20. 2006Refaktoring des Serendipity-Plugins Staticpages Teil 1
Angeregt durch eine Artikelserie im PHP-Magazin über Refactoring wollte ich es selbst mal ausprobieren. Da ich gerade wieder an Staticpages arbeite und dort einige Veränderungen vornehmen möchte, lag es also nahe dieses Plugin zu nehmen. Aber erst einmal ist die Frage zu klären: Was ist Refactoring?
Refactoring ist das englische Wort für Refakturieren und heißt nichts anderes, als vorhandenen Quelltext zu optimieren, ohne neue Funktionen hinzuzufügen oder das Verhalten des Programmes zu ändern. Dadurch soll die Struktur und die Erweiterbarkeit erleichtert werden.
Das Plugin Staticpages bietet sich besonders an, da es einige Funktionen wiederholt. Als Beispiel sei hier der Aufbau der Eingabeformulare genannt. Noch ein kleiner Hinweis: Dieser Artikel wird sehr techniklastig. Wer also nicht versteht was ich hier schreibe, sollte den Kopf nicht hängen lassen. Zum Schluss, wenn alles gut geht, sollte weiterhin ein Staticpages-Plugin mit der alten Funktionsweise, aber mit optimiertem Code herauskommen. Das ist letztendlich das Ziel. Nun zu meinen Werkzeugen. Ich arbeite mit Linux, Kubuntu Linux 6.06. Und dort nutze ich die Entwicklungsumgebung KDevelop und den Editor Kate. Um zwei Quelltexte miteinander zu vergleichen leistet mir das Tool Kompare gute dienste, was ich über Krusader aufrufe, einem Dateimanager im Zwei-Fenster-Stiel. Natürlich kann jeder die Programme nutzen, die er möchte. Ich werde auch die Dateien zur Verfügung stellen, damit das Refakturieren nachvollzogen werden kann. Folgt mir nun auf meiner Reise, Sourcecode zu verbessern. Es kann nichts schief gehen ... hoffe ich. Sehen wir uns nun also den Quelltext der Datei serendipity_event_staticpages.php an. Mir fällt dort als erstes in der Methode selectAuthor() auf, dass dort alle Autoren mit der Funktion serendipity_fetchUsers() ausgelesen und anschließend nach dem einzelnen gesucht wird. Ein Blick auf die Funktion serendipity_fetchUsers() aber sagt, dass ich als ersten Parameter die ID mitgeben kann. Also ändern wir als erstes diese Methode. Mit diesem Schritt haben wir nun das Programm etwas schneller gemacht, weil eine foreach-Schleife entfallen ist, die nicht durchlaufen werden muss. Ich gehe nun die Methoden weiter und mir fällt auf, das die Methoden get_static() und get_type() im Prinzip das Selbe machen, aber mit unterschiedlichen Variablen. Sie suchen in einer Klassenvariablen ob ein Wert gesetzt ist und geben diesen zurück. Aus diesen beiden Funktionen können wir nun eine machen, indem wir als Parameter den Variablennamen mitgeben. Als nächstes fallen mir die Methoden getTemplate() und getImage() ins Auge. Beide holen aus der Tabelle staticpages_types Daten, die eine Methoden einen Templatenamen, die andere ein Bildnamen. Auch hier können wir wieder zwei Methoden zu einer zusammenfassen. Schauen wir uns als nächstes die Methoden getStaticPage() und fetchStaticPage() an. Was fällt uns auf? Beide Funktionen machen im Prinzip das Gleiche, nur mit dem Unterschied, dass erstere das Ergebnis zurück gibt und zweitere dieses der Klassenvariablen staticpage zuweißt und anschließend checkpage() aufruft. Das können wir auch. Wir suchen nun also alle Stellen an denen fetchStaticPage() aufgerufen wird und tauschen diese gegen getStaticPage() aus und rufen anschließend noch checkpage() auf. Mit diesen kleinen Schritten haben wir bereits die Datei nicht nur kleiner, sondern auch etwas übersichtlicher gestalltet. An dieser Stelle unterbreche ich vorerst meine Refakturierung. Beim nächsten Mal werde ich mich um den Aufbau der Formulare kümmern und auch erste Überlegungen anstellen, ob es sinnvoll ist, die Methoden für die statischen Seiten aus dem Plugin auszulagern. Warum und weshalb, wird beim nächsten mal geklärt. Dateien zum ersten teil: staticpages_refactoring_teil1.tar.gz Trackbacks
Trackback specific URI for this entry
No Trackbacks
Comments
Display comments as
(Linear | Threaded)
meine kommentare zum refactoring:
------------- a) anstatt überall die funktion zu ersetzen hätte ich die einzelnen funktionen auf die zentrale funktion getFromVar gemappt, beispielsweise: function &get_static($key, $default = null) { &getFromVar($this->staticpage, $key, $default = null) } ----------------- b) getFromTypesTable(&$id, $row) $row hätte ich in $column benannt oder auch $type die funktion hätte ich benannt: getType oder getStaticPageType ------------------- c) anstatt die funktion &fetchStaticPage aufzulösen wäre es besser sie umzuschreiben: function &fetchStaticPage($id) { global $serendipity; $page = getStaticPage(&$id); if (is_array($page)) { $this->staticpage =& $page; $this->checkPage(); } } bei deiner auflösung von &fetchStaticPage weiter unten im quelltext fehlt dann die sicherheitskontrolle bei if (is_array($page)) { falls also keine seite zurückkommt könnte es dann mit checkPage() ein problem geben. aber nach kontrolle der funtion checkPage() scheint das kein problem zu sein, da leere fehler mit defaultwerten mit checkPage() gefüllt werden.
Danke für deine Anmerkungen. Doch ein richtiger Name wäre nicht schlecht gewesen. Ich wüsste immer gerne, wer mit mir kommuniziert
|
KategorienBlog abonnierenBlog Administration |