DRY Code ist ein Prinzip der Softwareentwicklung, das darauf abzielt, redundanten Code zu vermeiden. Der Grundgedanke ist, das jede Information innerhalb eines Systems nur einmal existieren sollte. So können Wartungsarbeiten und Erweiterungen am Code einfacher von statten gehen.
- Wartbarkeit: Es müssen nur an einer Stelle Änderungen vorgenommen werden.
- Strukturiert: Der Code bleibt übersichtlich und leicht verständlich.
- Weniger Fehleranfälligkeit: Code-Duplikate erhöhen das Risiko inkonsistente Änderungen.
Beispiel Non DRY Code (schlecht umgesetzt)
Beispiel einer einfachen Steuerberechnung mit einem festen Steuersatz von 19 %, ohne Berücksichtigung weiterer Steuerstufen (wie 7 %, 0 % oder 10,7 % ab 2025 liegt der Steuersatz für land- und forstwirtschaftliche Betriebe gemäß der Durchschnittsbesteuerung nach § 24 UStG bei 7,8 %, da er schrittweise gesenkt wurde).
public class Rechnung {
/// <summary>
/// Volle USt aus dem Nettobetrag berechnen
/// </summary>
/// <param name="Betrag">Nettobetrag</param>
/// <returns>USt Betrag</returns>
public double BerechneSteuer(double Betrag) {
return Betrag * 0.19;
}
/// <summary>
/// Bruttobetrag der Rechnung
/// </summary>
/// <param name="Betrag">Nettobetrag</param>
/// <returns>Bruttobetrag</returns>
public double Bruttobetrag(double Betrag) {
return Betrag * BerechneSteuer(84.03);
}
}
public class Bon
{
/// <summary>
/// Volle USt aus dem Nettobetrag berechnen
/// </summary>
/// <param name="Betrag">Nettobetrag</param>
/// <returns>USt Betrag</returns>
public double BerechneSteuer(double Betrag)
{
return Betrag * 0.19;
}
/// <summary>
/// Bruttobetrag des Bons
/// </summary>
/// <param name="Betrag">Nettobetrag</param>
/// <returns>Bruttobetrag</returns>
public double Bruttobetrag(double Betrag)
{
return Betrag * BerechneSteuer(84.03);
}
}
public class Einkauf
{
/// <summary>
/// Volle USt aus dem Nettobetrag berechnen
/// </summary>
/// <param name="Betrag">Nettobetrag</param>
/// <returns>USt Betrag</returns>
public double BerechneSteuer(double Betrag)
{
return Betrag * 0.19;
}
/// <summary>
/// Bruttobetrag des Einkaufs
/// </summary>
/// <param name="Betrag">Nettobetrag</param>
/// <returns>Bruttobetrag</returns>
public double Bruttobetrag(double Betrag)
{
return Betrag * BerechneSteuer(84.03);
}
}
Beispiel DRY Prinzip
public class Berechnungen
{
/// <summary>
/// Volle USt aus dem Nettobetrag berechnen
/// </summary>
/// <param name="Betrag">Nettobetrag</param>
/// <returns>USt Betrag</returns>
public static double BerechneSteuer(double Betrag)
{
return Betrag * (double)0.19;
}
}
public class Rechnung
{
/// <summary>
/// Bruttobetrag der Rechnung
/// </summary>
/// <param name="Betrag">Nettobetrag</param>
/// <returns>Bruttobetrag</returns>
public double Bruttobetrag(double Betrag)
{
return Betrag * Berechnungen.BerechneSteuer(84.03);
}
}
public class Bon
{
/// <summary>
/// Bruttobetrag des Bons
/// </summary>
/// <param name="Betrag">Nettobetrag</param>
/// <returns>Bruttobetrag</returns>
public double Bruttobetrag(double Betrag)
{
return Betrag * Berechnungen.BerechneSteuer(84.03);
}
}
public class Einkauf
{
/// <summary>
/// Bruttobetrag des Einkaufs
/// </summary>
/// <param name="Betrag">Nettobetrag</param>
/// <returns>Bruttobetrag</returns>
public double Bruttobetrag(double Betrag)
{
return Betrag * Berechnungen.BerechneSteuer(84.03);
}
}
Unterschiede zwischen beiden Listenings
Non DRY Code:
Im Non-DRY-Ansatz wird der reguläre Steuerbetrag (19 %) sowohl in den Klassen für Rechnungen, Einkauf und Bons separat berechnet. Ändert sich der Steuersatz, muss die Anpassung an mehreren Stellen vorgenommen werden – für Rechnung, Einkauf und Bon. Falls zusätzlich eine Angebotsberechnung hinzugefügt wird, müsste die Steuerlogik ein weiteres Mal programmiert oder kopiert werden, was die Wartung erschwert.
DRY Code:
Im DRY-Code wird die Berechnungsfunktion zentral definiert. Diese Funktion wird in den Klassen Einkauf, Rechnung und Bon verwendet. Ändert sich der Steuersatz, muss die Funktion nur an einer Stelle angepasst werden, wodurch der Code wartungsfreundlicher bleibt.
Info:
Im Normalfall werden Steuersätze nicht fest im Code hinterlegt, da sie sich mit der Zeit ändern und für verschiedene Artikel unterschiedlich gelten können. Ein Beispiel dafür ist die Besteuerung in einem Schnellrestaurant: Speisen, die im Restaurant verzehrt werden, unterliegen dem regulären Steuersatz von 19 %, während außer Haus verkaufte Speisen mit dem ermäßigten Steuersatz von 7 % besteuert werden.