Facebook
Twitter
Google+
Kommentare
3

Refactoring im Zend Studio

Da wir jeden Tag mit einer Menge Legacy Code hantieren, gehört Refactoring zu den Werkzeugen die uns die alltäglichen Aufgaben erleichtern. Natürlich nimmt man in so einer Situation jede Hilfe entgegen, die einem das Leben leichter macht. Jeder der bereits ein wenig in Java und Eclipse rumhantiert hat kennt die hervorragende Refactor-Unterstützung dieser IDE. Das neue Zend Studio, das ja bekanntlich auf Eclipse aufsetzt, hat diese Funktionalität jetzt auch zu bieten. Das war auch einer der Hauptgründe, warum unser Team auf das Studio migriert ist. Nur leider will das Plugin nicht immer so wie wir wollen. Prinzipiell ist es für das Umbenennen von Methoden und Variablen geeignet. Die IDE sucht sich dann alle Vorkommnisse im Code, die diese Methoden oder Variablen verwenden und benennt sie um. Das das ganze nicht so einfach ist kann man sich vorstellen, jede Zeile Code muss untersucht und analysiert werden. Um es performant hinzubekommen muss man also diverse Vorberechnungen ausführen und nötige Graphen aufbauen. Meinen Respekt verdient haben sich die Jungs und Mädchen von Zend also schon.

Wer mich aber kennt, der weiß, dass es natürlich auch ein aber gibt. Nehmen wir ein einfaches Beispiel. Wir gehen davon aus, dass die folgende Klasse Teil eines großen Projektes ist.

<?PHP
class MyClass
{
  public function doSomethingPublic( )
  {
  }

  private function doSomesthingPrivate( )
  {
  }
}
?>

Ich sehe ein, dass es eine ganze Weile dauern kann, wenn man die doSomethingPublic Methode umbenennen will. Wie gesagt, der komplette Code muss durchsucht werden oder zumindest die relevanten Teilbäume der Graphen. Hier habe ich auch kein Problem. Das Zend Studio schafft es aber auch richtig viel zeit zu „verschwenden“, wenn es darum geht die private Methode doSomesthingPrivate umzubenennen. Wie tief kann denn ein Baum sein, der nur eine Klasse representiert? Und der Baum kann nicht tiefer sein, da eine private Methode nur in der Klasse selbst aufgerufen werden kann.

Ich tippe einfach mal drauf, dass das Studio an dieser Stelle einfach nicht intelligent genug handelt und trotzdem den gesamten Baum durchsucht. Klingt eingentlich ganz einfach. Wie gesagt, ich habe eigentlich keine Ahnung wie kompliziert es ist ein solches Plugin zu schreiben, vielleicht würde ich es auch gar nicht hinbekommen. Ich weiß nur, dass es mich tierisch aufregt, wenn ich nur mal kurz eine Methode umbenennen will und das Studio ein paar Minuten dafür brauche. In den meisten Fällen mache ich es dann einfach von Hand.

Über den Autor

Nils Langner

Nils Langner ist der Gründer von "the web hates me" und auch der Hauptautor. Im wahren Leben leitet er das Qualitätsmanagementteam im Gruner+Jahr-Digitalbereich und ist somit für Seiten wie stern.de, eltern.de und gala.de aus Qualitätssicht verantwortlich. Nils schreibt seit den Anfängen von phphatesme, welches er ebenfalls gegründet hat, nicht nur für diverse Blogs, sondern auch für Fachmagazine, wie das PHP Magazin, die t3n, die c't oder die iX. Nebenbei ist er noch ein gern gesehener Sprecher auf Konferenzen. Herr Langner schreibt die Texte über sich gerne in der dritten Form.
Kommentare

3 Comments

  1. Ich bin gerade auf der Suche nach einer Lösung auf diesen Beitrag gestoßen. Und zwar geht es darum, dass ich mit dem Zend Studio und Refactoring Klassennamen umbenennen will, welche nach dem PEAR-Namensschema in entsprechenden Ordnern vorliegen. Es existieren also keine „includes“, denn die Klassen-Dateinen werden ja dynamisch von einem Autoloader eingebunden. Wenn ich den Klassennamen im Refactoring-Bereich umbenenne wird jetzt überhaupt nicht nach anderen Vorkommen des Klassennamens im Projekt gesucht. So bringt mir das Refactoring natürlich überhaupt nichts. Da du aber geschrieben hast „Die IDE sucht sich dann alle Vorkommnisse im Code“ habe ich noch Hoffnung, dass ich einfach ein Feature der IDE übersehen habe. Kann das sein?

    Reply
  2. Danke, aber ich habs inzwischen schon selbst rausgefunden. Über das „Search“-Menü kann man projektweit, oder in bestimmten Verzeichnissen o.ä. nach Strings suchen und diese ersetzen. Aber im Grunde ist das ja was viel simpleres als das Refactoring, bei dem nicht stupide ein String gesucht wird, sondern wirklich (scheinbar durch die „include“-Statements) Geltungsbereiche ermittelt werden.

    Reply

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen