Clean Code #3: DRY — Don't Repeat Yourself
Michael Nikolaus
Vorstand & Softwarearchitekt, Minicon eG
Jede Wissenseinheit sollte genau eine, eindeutige Repräsentation im System haben. Das DRY-Prinzip ist eines der fundamentalsten Konzepte in der Softwareentwicklung — und wird trotzdem ständig verletzt.
Was bedeutet DRY wirklich?
DRY wird oft missverstanden als "kopiere keinen Code". Tatsächlich geht es um mehr: Jede Wissenseinheit — jede Geschäftsregel, jede Berechnung, jede Konfiguration — sollte an genau einer Stelle definiert sein.
Das betrifft nicht nur Code-Duplikate, sondern auch Wissen, das in Kommentaren, Dokumentation, Datenbank-Schemas und Code gleichzeitig existiert.
Die wahren Kosten von Duplikation
Wenn die gleiche Logik an drei Stellen steht:
- Wird bei einer Änderung garantiert mindestens eine Stelle vergessen
- Entstehen subtile Inkonsistenzen, die zu Bugs führen
- Wird der Code schwieriger zu verstehen, weil man nie weiß, welche Version "die richtige" ist
- Steigt der Wartungsaufwand linear mit jeder Kopie
Arten von Duplikation
1. Offensichtliche Duplikation
// ❌ Copy-Paste-Code
decimal CalculateInvoiceTotal(Invoice inv) {
var subtotal = inv.Items.Sum(i => i.Price * i.Quantity);
var tax = subtotal * 0.19m;
return subtotal + tax;
}
decimal CalculateQuoteTotal(Quote quote) {
var subtotal = quote.Items.Sum(i => i.Price * i.Quantity);
var tax = subtotal * 0.19m;
return subtotal + tax; // identische Logik!
}// ✅ Extrahiert
decimal CalculateTotal(IEnumerable<LineItem> items) {
var subtotal = items.Sum(i => i.Price * i.Quantity);
var tax = subtotal * 0.19m;
return subtotal + tax;
}2. Subtile Duplikation
Manchmal sieht Code unterschiedlich aus, drückt aber das gleiche Wissen aus. Zwei Validierungen, die dieselbe Geschäftsregel prüfen, aber mit verschiedener Syntax — das ist auch Duplikation.
3. Wissens-Duplikation
Ein Kommentar, der beschreibt was der Code tut, ist eine Form von Duplikation: Dasselbe Wissen existiert im Code und im Kommentar. Ändert sich der Code, muss der Kommentar manuell nachgezogen werden.
Wann DRY zu weit geht
Achtung: Nicht jede Ähnlichkeit ist Duplikation. Wenn zwei Code-Stücke zufällig gleich aussehen, aber verschiedene Konzepte repräsentieren, sollten sie nicht zusammengeführt werden. Das wäre falsche Abstraktion — schlimmer als die Duplikation selbst.
Die Frage ist immer: Wenn sich eine Stelle ändert, muss sich die andere auch ändern? Wenn ja → DRY anwenden. Wenn nein → unabhängig lassen.
Rule of Three
Ein pragmatischer Ansatz: Beim ersten Mal schreiben Sie den Code. Beim zweiten Mal kopieren Sie ihn (mit leichtem Unbehagen). Beim dritten Mal refaktorisieren Sie — denn jetzt haben Sie genug Kontext, um die richtige Abstraktion zu finden.
Fazit
DRY ist kein Dogma, sondern ein Werkzeug. Richtig angewandt reduziert es Fehler, vereinfacht Änderungen und macht Code verständlicher. Falsch angewandt führt es zu überengineerten Abstraktionen. Der Schlüssel liegt im Verständnis, welches Wissen dupliziert wird.
Nächster Artikel: Clean Code #4: SOLID — Die fünf Prinzipien guter Architektur
Lassen Sie uns über Ihr Projekt sprechen
Das erste Gespräch ist kostenlos. Wir hören Ihnen zu und finden die beste Lösung für Sie.