Refactoring und Migration, oder: Wohin mit dem alten Code?

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Group & 1 Event

    Refactoring und Migration, oder: Wohin mit dem alten Code? - Presentation Transcript

    1. Refactoring und Migration Stefan Priebsch, thePHP.cc IPC Spring 2009, Berlin
    2. Wohin mit dem alten Code? Stefan Priebsch, thePHP.cc IPC Spring 2009, Berlin
    3. Stefan Priebsch Co-Founder and Principal Consultant
    4. Warum wird Software alt?
    5. Wann wird Software alt?
    6. Diese Software ist nur ein Prototyp
    7. Wir schreiben die Dokumentation später
    8. Wir schaffen erst mal eine Zwischenlösung
    9. Excel hat nicht skaliert, und Access mochte ich nicht
    10. Software-Altlasten
    11. „Es ist mir egal, wozu etwas konstruiert wurde. Ich will wissen, was es kann!“ --Gene Kranz, Apollo 13
    12. Der Teufelskreis
    13. Migration
    14. Migration ● Umstellung auf neue Technologie ● Ändern von Daten-Formaten ● Wechsel grundlegender Software ● Umzug auf einen anderen Server
    15. Die Konfiguration normieren
    16. Die Konfiguration normieren ● zend.ze1_compatibility_mode = Off ● Nicht mehr vorhanden in PHP 5.3
    17. Die Konfiguration normieren ● register_globals = Off ● import_request_data() verwenden
    18. Sehr böse!
    19. Die Konfiguration normieren ● register_long_arrays = Off ● Superglobale Variablen verwenden
    20. Die Konfiguration normieren ● enable_dl = Off ● Extensions in der php.ini laden
    21. Die Konfiguration normieren ● short_open_tags = Off ● Immer <?php verwenden
    22. Die Konfiguration normieren ● magic_quotes_* = Off ● magic_quotes_gpc ● magic_quotes_runtime ● magic_quotes_sybase ● Mit nicht maskierten Daten arbeiten ● Bereits maskierte Daten de-maskieren
    23. Die Konfiguration normieren ● allow_call_time_pass_reference = Off ● & in die Funktionsdeklaration verschieben
    24. Refactoring
    25. Refactoring ● Kleine Änderungen am Code ● Schrittweise Design-Verbesserung ● Keine Änderung des sichtbaren Verhaltens ● Laufend testen ● Keine neuen Features hinzufügen!
    26. Redundanten #1 Code eliminieren
    27. Lange Code- #2 blöcke kürzen
    28. Unterschiedliche #3 Belange trennen
    29. Globale Abhängigkeiten vermeiden
    30. Globale Abhängigkeiten ● Globale Variablen ● Superglobale Variablen ● $_GET, $_POST, $_FILES ● $_SERVER, $_ENV ● $_SESSION ● Statische Methodenaufrufe ● Singletons
    31. class BlogPosting { protected $id; ... public function getComments() { return MysqlDatabaseHandler::getComments($this->id); } }
    32. Nur in PHP 5.3
    33. class BlogPosting { protected $id; protected $dbHandlerClassName; ... public function getComments() { return $this->dbHandlerClassName::getComments($this->id); } public function setDbHandler($className) { $this->dbHandlerClassName = $className; } }
    34. Objekte einführen
    35. Request
    36. Session
    37. Response
    38. Configuration Registry
    39. class BlogPostManager { protected $db; public function findPosts($author) { … return MySqlDatabase::getPosts(...); } }
    40. class Registry { protected $dbHandler; protected $dbHandlerClassName = 'MySqlDatabase'; public function getInstance() … public function getDatabaseHandler() { if (is_null($this->dbHandler)) { $this->dbHandler = new $this->dbHandlerClassName; } return $this->dbHandler; } public function setDatabaseHandler($className) ... }
    41. class BlogPostManager { protected $db; public function __construct() { $this->db = Registry::getInstance()->getDatabase(); } public function findPosts($author) ... }
    42. Dependency Injection
    43. class BlogPostManager { protected $db; public function __construct(DatabaseHandler $db) { $this->db = $db; } public function findPosts($author) ... }
    44. class BlogPostManager { protected $db; public function __construct(DatabaseHandler $db = null) { if (is_null($db)) { $this->db = $db; } else { $this->db = new MySqlDatabase(); } } public function findPosts($author) ... }
    45. Refactoring und Testen
    46. Fehler frühzeitig vermeiden
    47. Fehler frühzeitig vermeiden ● Alle PHP-Fehler anzeigen ● E_ALL | E_STRICT ● php -l ● HTML Tidy ● xmllint ● jsl / JSLint ● CSS-Validation
    48. Ausgaben vergleichen
    49. Ausgaben vergleichen ● Alt und Neu vergleichen ● HTML ● XML ● JSON ● Binärdaten ● Probleme ● Line Endings ● Uhrzeit, Zufallszahlen ● persistenter Status
    50. Trace Logs vergleichen
    51. Trace Logs vergleichen ● xdebug (http://www.xdebug.org) (http://www.xdebug.org) ● Trace Log erzeugen ● Funktionsaufrufe ● Parameter ● Rückgabewerte ● Zwei Trace Logs vergleichen
    52. Systemtests
    53. Systemtests ● Anwendung im Webserver testen ● Selenium (http://seleniumhq.org) (http://seleniumhq.org) ● Zusicherungen auf DOM-Ebene ● Test-Setup aufwändig ● Tests langsam
    54. Unit-Tests
    55. Unit-Tests ● Klassen und Teile der Anwendung testen ● PHPUnit (http://www.phpunit.de) (http://www.phpunit.de) ● Zahlreiche Zusicherungen ● Probleme ● stark gekoppelter Code ● prozeduraler Code
    56. Die API, nicht die Implementierung testen
    57. Agile Migration
    58. Agile Migration ● in kleinen Schritten vorgehen ● neue PHP-Versionen „sofort“ auf Entwicklungssystemen einsetzen ● laufendes Refactoring
    59. http://thephp.cc Twitter: thephpcc stefan@thephp.cc http://www.priebsch.de Twitter: spriebsch Xing, LinkedIn, Facebook

    + Stefan PriebschStefan Priebsch, 6 months ago

    custom

    572 views, 0 favs, 0 embeds more stats

    Wir reden alle gerne und viel über Patterns, Frame more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 572
      • 572 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 7
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories