Refactoring

Wie Sie das Design bestehender Software verbessern

Martin Fowler

Cite this publication as

Martin Fowler, Refactoring (2020), mitp-Verlag, Frechen, ISBN: 9783958459427

6620
accesses
141
quotes

Description / Abstract

Description

Martin Fowler ist Chief Scientist bei sowie Autor, Speaker und Consultant auf dem Gebiet der Softwareentwicklung. Er konzentriert sich auf die Entwicklung von Unternehmenssoftware und beschäftigt sich damit, was ein gutes Design auszeichnet und mit welchen Verfahren es umgesetzt werden kann.

Table of content

  • Cover
  • Titel
  • Impressum
  • Inhaltsverzeichnis
  • Vorwort zur ersten Auflage
  • Über den Fachkorrektor der deutschen Ausgabe
  • Einleitung
  • Was ist Refactoring?
  • Worum geht es in diesem Buch?
  • Wer sollte dieses Buch lesen?
  • Von anderen geschaffene Grundlagen
  • Danksagungen
  • Kapitel 1: Refactoring: Ein erstes Beispiel
  • 1.1 Der Ausgangspunkt
  • 1.2 Anmerkungen zum ersten Programm
  • 1.3 Der erste Schritt des Refactorings
  • 1.4 Aufteilung der statement-Funktion
  • 1.5 Status: Eine Menge verschachtelter Funktionen
  • 1.6 Die Phasen Berechnung und Formatierung voneinander trennen
  • 1.7 Status: Aufgeteilt in zwei Dateien (und Phasen)
  • 1.8 Neuorganisation der Berechnungen nach Art
  • 1.9 Status: Erzeugen der Daten mit der polymorphen Klasse PerformanceCalculator
  • 1.10 Abschließende Überlegungen
  • Kapitel 2: Prinzipien des Refactorings
  • 2.1 Refactoring: Definition
  • 2.2 Die beiden Hüte
  • 2.3 Gründe für ein Refactoring
  • 2.4 Der richtige Zeitpunkt für ein Refactoring
  • 2.5 Probleme beim Refactoring
  • 2.6 Refactoring, Architektur und Yagni
  • 2.7 Refactoring und der Softwareentwicklungsprozess
  • 2.8 Refactoring und Performance
  • 2.9 Ursprünge des Refactorings
  • 2.10 Automatisiertes Refactoring
  • 2.11 Weiterführende Literatur
  • Kapitel 3: Code-Smells: Schlechte Gerüche im Code
  • 3.1 Rätselhafte Bezeichnung
  • 3.2 Redundanter Code
  • 3.3 Lange Funktion
  • 3.4 Lange Parameterliste
  • 3.5 Globale Daten
  • 3.6 Veränderliche Daten
  • 3.7 Divergierende Änderungen
  • 3.8 Chirurgie mit der Schrotflinte
  • 3.9 Feature-Neid
  • 3.10 Datenklumpen
  • 3.11 Obsession für elementare Datentypen
  • 3.12 Wiederholte switch-Anweisungen
  • 3.13 Schleifen
  • 3.14 Träges Element
  • 3.15 Spekulative Generalisierung
  • 3.16 Temporäres Feld
  • 3.17 Mitteilungsketten
  • 3.18 Vermittler
  • 3.19 Insiderhandel
  • 3.20 Umfangreiche Klasse
  • 3.21 Alternative Klassen mit unterschiedlichen Schnittstellen
  • 3.22 Datenklasse
  • 3.23 Ausgeschlagenes Erbe
  • 3.24 Kommentare
  • Kapitel 4: Tests erstellen
  • 4.1 Der Nutzen selbsttestenden Codes
  • 4.2 Beispielcode zum Testen
  • 4.3 Ein erster Test
  • 4.4 Hinzufügen eines weiteren Tests
  • 4.5 Ändern des Test-Fixtures
  • 4.6 Austesten der Grenzen
  • 4.7 Und noch viel mehr
  • Kapitel 5: Der Katalog
  • 5.1 Format der Refactorings
  • 5.2 Die Auswahl der Refactorings
  • Kapitel 6: Eine erste Zusammenstellung von Refactorings
  • 6.1 Funktion extrahieren (Extract Function)
  • 6.2 Funktion inline platzieren (Inline Function)
  • 6.3 Variable extrahieren (Extract Variable)
  • 6.4 Variable inline platzieren (Inline Variable)
  • 6.5 Funktionsdeklaration ändern (Change Function Declaration)
  • 6.6 Variable kapseln (Encapsulate Variable)
  • 6.7 Variable umbenennen (Rename Variable)
  • 6.8 Parameterobjekt einführen (Introduce Parameter Object)
  • 6.9 Funktionen zu einer Klasse vereinen (Combine Functions into Class)
  • 6.10 Funktionen zu einer Transformation vereinen (Combine Functions into Transform)
  • 6.11 Phase aufteilen (Split Phase)
  • Kapitel 7: Kapselung
  • 7.1 Datensatz kapseln (Encapsulate Record)
  • 7.2 Collection kapseln (Encapsulate Collection)
  • 7.3 Elementaren Wert durch Objekt ersetzen (Replace Primitive with Object)
  • 7.4 Temporäre Variable durch Abfrage ersetzen (Replace Temp with Query)
  • 7.5 Klasse extrahieren (Extract Class)
  • 7.6 Klasse inline platzieren (Inline Class)
  • 7.7 Delegation verbergen (Hide Delegate)
  • 7.8 Vermittler entfernen (Remove Middle Man)
  • 7.9 Algorithmus ersetzen (Substitute Algorithm)
  • Kapitel 8: Verschiebungen
  • 8.1 Funktion verschieben (Move Function)
  • 8.2 Feld verschieben (Move Field)
  • 8.3 Anweisungen in Funktion verschieben (Move Statements into Function)
  • 8.4 Anweisungen in Aufrufer verschieben (Move Statements to Caller)
  • 8.5 Inline-Code durch Funktionsaufruf ersetzen (Replace Inline Code with Function Call)
  • 8.6 Anweisungen verschieben (Slide Statements)
  • 8.7 Schleife aufteilen (Split Loop)
  • 8.8 Schleife durch Pipeline ersetzen (Replace Loop with Pipeline)
  • 8.9 Toten Code entfernen (Remove Dead Code)
  • Kapitel 9: Daten organisieren
  • 9.1 Variable aufteilen (Split Variable)
  • 9.2 Feld umbenennen (Rename Field)
  • 9.3 Abgeleitete Variable durch Abfrage ersetzen (Replace Derived Variable with Query)
  • 9.4 Referenz durch Wert ersetzen (Change Reference to Value)
  • 9.5 Wert durch Referenz ersetzen (Change Value to Reference)
  • Kapitel 10: Bedingungen vereinfachen
  • 10.1 Bedingung zerlegen (Decompose Conditional)
  • 10.2 Bedingten Ausdruck zusammenfassen (Consolidate Conditional Expression)
  • 10.3 Verschachtelte Bedingung durch Wächterbedingung ersetzen (Replace Nested Conditional with Guard Clauses)
  • 10.4 Bedingung durch Polymorphie ersetzen (Replace Conditional with Polymorphism)
  • 10.5 Sonderfall einführen (Introduce Special Case)
  • 10.6 Assertion einführen (Introduce Assertion)
  • Kapitel 11: Refactoring von APIs
  • 11.1 Abfrage von Veränderung trennen (Separate Query from Modifier)
  • 11.2 Funktion parametrisieren (Parameterize Function)
  • 11.3 Steuerungs-Flag entfernen (Remove Flag Argument)
  • 11.4 Vollständiges Objekt erhalten (Preserve Whole Object)
  • 11.5 Parameter durch Abfrage ersetzen (Replace Parameter with Query)
  • 11.6 Abfrage durch Parameter ersetzen (Replace Query with Parameter)
  • 11.7 Setter entfernen (Remove Setting Method)
  • 11.8 Konstruktor durch Fabrikfunktion ersetzen (Replace Constructor with Factory Function)
  • 11.9 Funktion durch Befehl ersetzen (Replace Function with Command)
  • 11.10 Befehl durch Funktion ersetzen (Replace Command with Function)
  • Kapitel 12: Der Umgang mit Vererbung
  • 12.1 Methode nach oben verschieben (Pull Up Method)
  • 12.2 Feld nach oben verschieben (Pull Up Field)
  • 12.3 Konstruktorrumpf nach oben verschieben (Pull Up Constructor Body)
  • 12.4 Methode nach unten verschieben (Push Down Method)
  • 12.5 Feld nach unten verschieben (Push Down Field)
  • 12.6 Typenschlüssel durch Unterklassen ersetzen (Replace Type Code with Subclasses)
  • 12.7 Unterklasse entfernen (Remove Subclass)
  • 12.8 Basisklasse extrahieren (Extract Superclass)
  • 12.9 Hierarchie abbauen (Collapse Hierarchy)
  • 12.10 Unterklasse durch Delegation ersetzen (Replace Subclass with Delegate)
  • 12.11 Basisklasse durch Delegation ersetzen (Replace Superclass with Delegate)
  • Anhang A: Bibliografie
  • Anhang B: Liste der Refactorings
  • Anhang C: Code-Smells
  • Stichwortverzeichnis

More of this series

    Related titles

      More of this author(s)