Suchen und Finden
Mehr zum Inhalt
Clean Code - Refactoring, Patterns, Testen und Techniken für sauberen Code - Deutsche Ausgabe
Cover
1
Titel
3
Impressum
4
Inhaltsverzeichnis
5
Vorwort
15
Einführung
21
Kapitel 1: Sauberer Code
25
1.1 Code, Code und nochmals Code
26
1.2 Schlechter Code
27
1.3 Die Lebenszykluskosten eines Chaos
28
1.4 Denkschulen
40
1.5 Wir sind Autoren
41
1.6 Die Pfadfinder-Regel
43
1.7 Vorläufer und Prinzipien
43
1.8 Zusammenfassung
43
Kapitel 2: Aussagekräftige Namen
45
2.1 Einführung
45
2.2 Zweckbeschreibende Namen wählen
45
2.3 Fehlinformationen vermeiden
47
2.4 Unterschiede deutlich machen
49
2.5 Aussprechbare Namen verwenden
50
2.6 Suchbare Namen verwenden
51
2.7 Codierungen vermeiden
52
2.8 Mentale Mappings vermeiden
54
2.9 Klassennamen
55
2.10 Methodennamen
55
2.11 Vermeiden Sie humorige Namen
55
2.12 Wählen Sie ein Wort pro Konzept
56
2.13 Keine Wortspiele
56
2.14 Namen der Lösungsdomäne verwenden
57
2.15 Namen der Problemdomäne verwenden
57
2.16 Bedeutungsvollen Kontext hinzufügen
57
2.17 Keinen überflüssigen Kontext hinzufügen
60
2.18 Abschließende Worte
60
Kapitel 3: Funktionen
61
3.1 Klein!
64
3.2 Eine Aufgabe erfüllen
65
3.3 Eine Abstraktionsebene pro Funktion
67
3.4 Switch-Anweisungen
68
3.5 Beschreibende Namen verwenden
70
3.6 Funktionsargumente
71
3.7 Nebeneffekte vermeiden
75
3.8 Anweisung und Abfrage trennen
77
3.9 Ausnahmen sind besser als Fehler-Codes
77
3.10 Don’t Repeat Yourself
80
3.11 Strukturierte Programmierung
80
3.12 Wie schreibt man solche Funktionen?
81
3.13 Zusammenfassung
81
3.14 SetupTeardownIncluder
82
Kapitel 4: Kommentare
85
4.1 Kommentare sind kein Ersatz für schlechten Code
86
4.2 Erklären Sie im und durch den Code
87
4.3 Gute Kommentare
87
4.4 Schlechte Kommentare
92
Kapitel 5: Formatierung
109
5.1 Der Zweck der Formatierung
109
5.2 Vertikale Formatierung
110
5.3 Horizontale Formatierung
119
5.4 Team-Regeln
125
5.5 Uncle Bobs Formatierungsregeln
125
Kapitel 6: Objekte und Datenstrukturen
129
6.1 Datenabstraktion
129
6.2 Daten/Objekt-Anti-Symmetrie
131
6.3 Das Law of Demeter
133
6.4 Datentransfer-Objekte
136
6.5 Zusammenfassung
138
Kapitel 7: Fehler-Handling
139
7.1 Ausnahmen statt Rückgabe-Codes
139
7.2 Try-Catch-Finally-Anweisungen zuerst schreiben
141
7.3 Unchecked Exceptions
143
7.4 Ausnahmen mit Kontext auslösen
144
7.5 Definieren Sie Exception-Klassen mit Blick auf die Anforderungen des Aufrufers
144
7.6 Den normalen Ablauf definieren
146
7.7 Keine Null zurückgeben
147
7.8 Keine Null übergeben
148
7.9 Zusammenfassung
150
Kapitel 8: Grenzen
151
8.1 Mit Drittanbieter-Code arbeiten
151
8.2 Grenzen erforschen und kennen lernen
154
8.3 log4j kennen lernen
154
8.4 Lern-Tests sind besser als kostenlos
156
8.5 Code verwenden, der noch nicht existiert
157
8.6 Saubere Grenzen
158
Kapitel 9: Unit-Tests
159
9.1 Die drei Gesetze der TDD
160
9.2 Tests sauber halten
161
9.3 Saubere Tests
163
9.4 Ein assert pro Test
168
9.5 F.I.R.S.T.
171
9.6 Zusammenfassung
172
Kapitel 10: Klassen
173
10.1 Klassenaufbau
173
10.2 Klassen sollten klein sein!
174
10.3 Änderungen einplanen
185
Kapitel 11: Systeme
191
11.1 Wie baut man eine Stadt?
191
11.2 Konstruktion und Anwendung eines Systems trennen
192
11.3 Aufwärtsskalierung
196
11.4 Java-Proxies
200
11.5 Reine Java-AOP-Frameworks
202
11.6 AspectJ-Aspekte
205
11.7 Die Systemarchitektur testen
205
11.8 Die Entscheidungsfindung optimieren
207
11.9 Standards weise anwenden, wenn sie nachweisbar einen Mehrwert bieten
207
11.10 Systeme brauchen domänenspezifische Sprachen
208
11.11 Zusammenfassung
208
Kapitel 12: Emergenz
209
12.1 Saubere Software durch emergentes Design
209
12.2 Einfache Design-Regel 1: Alle Tests bestehen
210
12.3 Einfache Design-Regeln 2-4: Refactoring
211
12.4 Keine Duplizierung
211
12.5 Ausdrucksstärke
214
12.6 Minimale Klassen und Methoden
215
12.7 Zusammenfassung
215
Kapitel 13: Nebenläufigkeit
217
13.1 Warum Nebenläufigkeit?
218
13.2 Herausforderungen
220
13.3 Prinzipien einer defensiven Nebenläufigkeitsprogrammierung
221
13.4 Lernen Sie Ihre Library kennen
223
13.5 Lernen Sie Ihre Ausführungsmodelle kennen
224
13.6 Achten Sie auf Abhängigkeiten zwischen synchronisierten Methoden
226
13.7 Halten Sie synchronisierte Abschnitte klein
226
13.8 Korrekten Shutdown-Code zu schreiben, ist schwer
227
13.9 Threaded-Code testen
227
13.10 Zusammenfassung
232
Kapitel 14: Schrittweise Verfeinerung
235
14.1 Args-Implementierung
236
14.2 Args: der Rohentwurf
243
14.3 String-Argumente
258
14.4 Zusammenfassung
300
Kapitel 15: JUnit im Detail
301
15.1 Das JUnit-Framework
301
15.2 Zusammenfassung
316
Kapitel 16: Refactoring von SerialDate
317
16.1 Zunächst bring es zum Laufen!
318
16.2 Dann mach es richtig!
320
16.3 Zusammenfassung
336
Kapitel 17: Smells und Heuristiken
337
17.1 Kommentare
337
17.2 Umgebung
339
17.3 Funktionen
340
17.4 Allgemein
340
17.5 Java
362
17.6 Namen
366
17.7 Tests
370
17.8 Zusammenfassung
372
Anhang A: Nebenläufigkeit II
373
A.1 Client/Server-Beispiel
373
A.2 Mögliche Ausführungspfade
377
A.3 Lernen Sie Ihre Library kennen
383
A.4 Abhängigkeiten zwischen Methoden können nebenläufigen Code beschädigen
387
A.5 Den Durchsatz verbessern
391
A.6 Deadlock
394
A.7 Multithreaded-Code testen
398
A.8 Threadbasierten Code mit Tools testen
401
A.9 Zusammenfassung
402
A.10 Tutorial: kompletter Beispielcode
402
Anhang B: org.jfree.date.SerialDate
407
Anhang C: Literaturverweise
463
Epilog
465
Stichwortverzeichnis
467
Alle Preise verstehen sich inklusive der gesetzlichen MwSt.