Softwaredesign #2 - DRY. Hör auf mich nachzueffen, don't repeat yourself!

  • Wieso denn immer das gleiche, ist das dry oder ist der Witz zu trocken? Wieso das Rad neu erfinden?

    Hallo Leute,


    nach dem Küssen und dem KISS Prinzip geht es mit dem DRY Prinzip weiter. Zuerst denkt man hier an Wasser. Ein bisschen. Zuerst. Bis einem jemand sagt, dass es sich hier ganz eindeutig um ein weiteres Element von Softwaredesign handelt. Nach diesem Teaser, auf in den Kampf.[ref][/ref]


    Das DRY Prinzip

    Auch wenn ich die Abkürzung bereits erwähnt habe, hier nochmal die lange Version:

    Zitat

    Dont't repeat yourself.


    Wenn wir das wie immer übersetzen erhalten wir: » Wiederhole dich nicht «. Im ersten Augenblick fragen sich bestimmt Viele, wie es dazu kommen kann. Wer wiederholt sich schon gerne? Doch tatsächlich wird dieses Prinzip sehr oft verletzt, in vielen Fällen auch vollkommen unbewusst. Betrachten wir zuerst, wozu uns redundanter Code führt:

    1. Der Code an sich wird geschrieben - Schon die Zeit ist der Preis.
    2. Der Code muss nicht nur geschrieben, sondern auch getestet werden, der Code vervielfältigt sich erneut.
    3. Der Code vergrößert das Endprodukt, was im ersten Moment nur ein paar Bytes sind kann sich bei großen Projekten addieren.
    4. Der Code kann geringfügig vom "Original" abweichen, wer immer nun etwas nachvollziehen hat es teilweise mit mehr Komplexität zutun.
    5. Der Code existiert bereits in verbreiteter Fassung und wird vermutlich bald wieder verworfen.


    Jedem fällt sofort auf, dass redundanter Code in vielen Fällen zu Zeit und somit Ressourcenverschwendung führt. Lassen wir das auf uns sitzen? Wollen wir wirklich unseren Code unnötig aufblähen und plötzlich vor zwei statt einem Problem stehen, nur weil wir einen Algorithmus verändern? Doch was kann man gegen redundante Code tun? Nach Matthias Geirhos, helfen folgende Maßnahmen:

    1. Redundaten Code in eigene Methoden und Klassen kapseln.
    2. Redundaten Code in externe Services / Bibliotheken auslagern.


    Doch wo fange ich an? Ich kann doch nicht einfach quer durch meinen Code lesen und hoffen, dass ich etwas finde. Nein, muss man nicht. Auch wenn dir vernünftige IDEs (IntelliJ) dir unter die Arme greifen und redundanten Code selbstständig erkennen, sollten wir schon an der Quelle ansetzen und verhindern, dass solcher Code überhaupt entstehen kann. Viel redundanter Code kann schon ganz trivial entstehen:

    Zitat von einer Konversation zwischen Kevin und Chantal

    Kevin: Wetten du kannst dieses Programm nicht in einer Minute fertigstellen.

    Chantal: Challenge accepted, hold my beer. * Command C + Command V *

    Gut und gerne führt das alte "Copy n Paste " bereits zu redundantem Code. Hier ist es trivial, doch worauf kann ich noch achten, um redundanten Code zu vermeiden:

    1. Gut dokumentierte Codebasis / Library, in denen Entwickler schnell eine Lösung finden, bevor sie selbst eine entwickeln müssen.
    2. Häufige Code Reviews und Refactoring.
    3. Absprachen im Team treffen um abzustimmen, wer welche Algorithmen umsetzt.
    4. Interne Standards setzen und "die Leute bei der Stange halten". Niemals sollten zwei Leute im gleichen Team verschiedene Libraries nutzen, die eigentlich das gleiche tun.
    5. Kompromisse bei der Auswahl von Libraries eingehen, wenn sie nicht 100% der eigenen Vorstellung entspricht. Häufig zeigt sich erst im Gebrauch, was wirklich drin steckt.


    Ein Tipp von mir, insbesondere bei der Spigot Entwicklung: Benutzt so wenig Code wie möglich den ihr nicht versteht und passt keinen Code einfach an, nur damit er euren Vorstellung genügt, häufig macht ihr mehr kaputt als ihr denkt. Fragt nach. Es gibt Leute mit mehr Erfahrung als ihr, mit mehr Überblick, die euch Ratschläge geben können und werden.



    Ich hoffe, dass ich euch ein weiteres Prinzip sinnvoll erklären konnte. Versucht es zu beherzigen, nicht nur für euch selbst.


    Mit freundlichen Grüßen

    Nathalie

    Einzelnachweise
    1. Matthias Geirhos - Entwurfsmuster, das umfassende Handbuch

Teilen