• Refactoring im Zend Studio

    von am 21. September 2008

    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.

    Nils Langner

    Auch wenn Ihr es mir nicht glauben werdet, aber ich habe nichts gegen PHP. Ich rege mich einfach nur gerne auf. Ok so schlimm ist es auch nicht. Eigentlich wollte ich schon immer einen Blog haben und da ...

    Zum Profil von Nils Langner

    3 Kommentare »


    • Micha
      am 8. Dezember 2008 um 15:30 Uhr

      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?


    • admin
      am 8. Dezember 2008 um 18:44 Uhr

      Mein Zend Studio kann das. Aber ich schaue morgen noch einmal genauer nach.


    • Micha
      am 9. Dezember 2008 um 01:47 Uhr

      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.

    RSS Feed für Kommentare zu diesem Artikel. TrackBack URL

    Hinterlasse einen Kommentar

    Werbung
    PHP Magazin
    Ausgabe 02/2010

    Dieses Mal mit Artikeln zu den Themen OpenSocial und Apache Shindig, Graphentheorie, Smarty3

    t3n
    Ausgabe 19

    Social Media (R)evolution. Weitere Themen sind noSQL, Crowdsourcing ...

    PHP Journal
    Ausgabe 2/2010

    PHP & Windows optimal nutzen, die besten PHP-CMS im Überblick, Google-API mit Zend Framework nutzen.

    Wir wurden schon öfters gefragt, ob man uns nicht irgendwie unterstützen kann. Die Antwort war immer einfach: Klar! Am einfachsten ist es eure nächsten Einkäufe bei Amazon über unsere Link abzuwickeln. Damit würdet ihr uns schon sehr helfen. Über Co-Autoren freuen wir uns aber noch mehr.