290 likes | 490 Views
Refactoring von Legacy Code. Michael Kokonowskyj Thomas Schissler artiso AG. Ziele ?. Was soll durch Refactoring verbessert werden. Probleme in Legacy Code. Risiko durch Veränderung. Aufwand für neue Features. Nutzung neuer Technologien & Methoden. Ziele moderner Architektur. Wartbar.
E N D
Refactoring von Legacy Code Michael Kokonowskyj Thomas Schissler artiso AG
Ziele ? Was soll durch Refactoring verbessert werden
Probleme in Legacy Code Risiko durch Veränderung Aufwand für neue Features Nutzung neuer Technologien & Methoden
Ziele moderner Architektur Wartbar Testbar Erweiterbar
Wie ? Ansätze zur Verbesserung des Codes
Architektur Anti-Patterns und wie es sein sollte
Anti-Patterns • Redundanzen • UI-Componenten (z.B. Message-Boxen) im Code verwenden • Zugriffe auf Ressourcen (z.B. Files) nicht isolierbar • Zu viel Funktionalität in einer Methode • Starke Bindung zwischen Klassen
Oberstes Ziel: Entkopplung Single Responsibility MVVM / MVC POCOs Sackgassen-methoden Trennung -Daten-Orchestrierung -Logik Komponenten-orientierung IoC Interfaces
Single Responsibility • Methoden sollten nur ein Funktionalität implementieren • Es sollte genau einen Grund geben, eine Methode zu ändern • Tests können diese atomare Logik gut abprüfen
Abhängigkeiten zu Ressourcen • Problem: Wie kontrollieren wir die Abhängigkeiten von Methoden • Warum ist das überhaupt problematisch? • Infrastrukturabhängigkeiten • Destruktive Tests • Hoher Initialisierungsaufwand • Simulation von Testfällen oft schwierig Recognize 1.) Aus File laden 2.) Split 3.) Recognize Unit-Test File
KomponentenorientierteArchitektur A B Data Contract Operation Contract
Contracts • Data Contract • OperationContract
Implementierung • Komponente
Klassische Struktur Recognize Integrations-Test SplitLine Integrations-Test ReadData Integrations-Test DB SplitDigit Integrations-Test Recognize Digit Unit-Test
Entkoppelte Struktur durch Orchestrierung Integrations-Test Recognize ReadData SplitLine Recognize Digit SplitDigit Unit-Test Integrations-Test Unit-Test Unit-Test DB
Inversion of Control (IoC) • ConstructorInjection
Strategien Refactoring in der Praxis
Refactoring Best Practices • Kleine Schritte • Häufig lauffähige Stände anstreben • Mit einfachen und schnellen Ergebnissen beginnen (Pfadfinder-Regel) • Aus kleinen Bereichen lernen statt alles auf ein Mal umstellen • Testautomatisierung sofort mit umsetzen • Überprüfung der Refaktoring-Ziele • Sicherheit • Patterns extrahieren • Für neue Funktionen lernen und im gesamten Team kommunizieren • Einheitliche Strukturen
Visualisierung • Kandidaten zu identifizieren • Komplexität abzuschätzen • Fortschritt transparent machen • Notwendige Anpassungen erkennen • Code Maps / Dependency Graph / Layer Diagramm / Code Metrics
Tipps & Tricks So funktionierts mit dem Refactoring
Die Mikado-Methode Start Refactoring implementieren Nächste Anpassung identifizieren Refactoring-Ziel definieren Fehler? Anpassungen übernehmen Nein Ja Ziel erreicht? Nein Fehler dokumentieren Ja Änderungen rückgängig machen Fertig
Die Mikado-Methode Grid ersetzen Export Neu berechnen Speichern-Methode Validierung
Fazit Was sollten sie mitnehmen?
Zusammenfassung • Unit-Testing ist essentiell • Refactoring muss gewollt werden, von allen Beteiligten • Refactoring ist eine kontinuierliche Aufgabe • Refactoring ist eine Investition, lohnt sich aber • Dem Greenfield-Impuls wiederstehen, Refactoring heute starten!
Noch Fragen?
Kontakt Vielen Dank fürihreAufmerksam-keit • Thomas Schissler • artiso solutions GmbHOberer Wiesenweg 25D - 89134 Blaustein • +49 7304 / 803-180 TSchissler@artiso.com • http://www.artiso.com • www.artiso.com/problog