Redundanzfreies Programmieren
Redundanz ist das mehrfache Vorhandensein ein und derselben Information. Beim Programmieren ist das meines Erachtens aus folgenden Gründen nachteilhaft:
- fehleranfällig bei Änderungen
- größerer Aufwand bei Änderungen
Beispiele
- konstante Zahlen, Texte etc. an mehreren Stellen im Programmcode ("Hard coding") – Besser: für alles, was überall gleich sein soll, eine benannte Konstante an einer Stelle im Code
- denselben Ausdruck mehrfach verwenden – Besser: Zwischenergebnisse an eine Variable zuweisen oder eine Funktion definieren
- mehrmals die gleiche Information vom gleichen Objekt abfragen (z. B. Datenbankfeld)
- Abbruchbedingung einer Schleife sowohl im Schleifenkopf als auch in einer
If
-Bedingung – Besser: eine Boolean- Variable oder die Schleife bei Eintreten der Bedingung gleich direkt verlassen (obwohl es den Lehrsätzen der strukturierten Programmierung widerspricht)
- Funktionsaufrufe, die geändert werden müssen, wenn die Übergabe weiterer Parameter erforderlich wird – Besser: objektorientierte Programmierung
- Code mit Copy & Paste vervielfältigen und dann an verschiedene Fälle leicht anpassen – Besser: Fallunterscheidungen einbauen oder gemeinsame Befehle in gemeinsam benutzte Funktion auslagern
- fix einprogrammierte Pfade – Besser: Umgebungsvariablen wie
%windir%
oder den DOS-Befehl start
verwenden - Rechtevergabe an einzelne Benutzer – Besser: Gruppen verwenden
- alles, was auf HTML-
Dateien einer Website gleich aussehen soll, die gleichen Eigenschaften zuweisen – Besser: ein CSS verwenden und mehrfach verwendete Bilder, Texte etc. serverseitig an einer Stelle speichern und einbinden
Grenzen
Redundanzfreie Programme passen sich an Änderungen, die an einer Stelle vorgenommen wurden, im Idealfall von selbst an. Allerdings sind in den gängigen Programmiersprachen nicht immer alle Redundanzen vermeidbar bzw. wäre der Programmieraufwand dafür zu groß.
Beispiele:
- Eine Datenbank-
Eingabemaske sollte sich automatisch anpassen, wenn neue Felder in der Datenbank hinzukommen. - Idealerweise würde die Eingabemaske auch gleich die in der Datenbank definierten Gültigkeitsbedingungen für die Felder sicherstellen.
- Wenn mittels Javascript oder Java Berechnungen im Browser gemacht werden, sollte das Ergebnis dasselbe wie am Server sein.
- Wenn eine Variable denselben Typ wie ein Feld in der Datenbank haben soll, dann wäre es besser, wenn ihr Typ nicht fix codiert ist. Das ist in PL/SQL möglich.
- Wenn ich mittels SQL alle Spalten haben will, kann ich
select *
schreiben. Will ich aber alle außer einigen bestimmten, muss ich alle Gewünschten einzeln aufzählen.
Was ich für besonders bedauerlich und bemerkenswert halte: In manchen Fällen hat man umso mehr Redundanz, je sauberer man programmiert! Z. B. kann das Hinzufügen eines einzigen Datenbankfelds nur deswegen einen Aufwand in Personentagen verursachen, weil alle sauber getrennten Module von den Datenbankabfragen bis zur Darstellung auf der Benutzeroberfläche händisch nachgezogen werden müssen.
Mein Fazit
Ich lege auf möglichst redundanzfreie Programmierung großen Wert. Meines Erachtens ist das ein Erfolg versprechender Ansatz, um die Softwareentwicklung effizienter zu machen. Interessanterweise habe ich aber kaum jemals etwas in dieser Richtung gehört oder gelesen. Nur beim Design von Datenbanken ist es eine allgemein bekannte Lehrbuchweisheit, dass man alle Redundanzen möglichst vermeiden soll – letzlich aus denselben Gründen, wie ich sie beim Programmieren sehe.
Weiter
Weblinks
- Wikipedia: Don't repeat yourself – Hier habe ich meine Idee erstmals wiedergefunden.