OO-Designprinzipien (Serie) – DRY

Bei DRY dreht sich alles um Codefaktorisierung

Dieser Artikel ist der erste in einer Reihe, die sich guten Designpraktiken widmet. Es spricht das DRY-Prinzip an, was übersetzt “Don’t Repeat Yourself” bedeutet. Auch wenn die hier bereitgestellten Beispiele in Java geschrieben sind, ist das DRY-Prinzip allen Programmiersprachen gemeinsam.

Schnelle Definition

Wie aus dem Buch „Der pragmatische Programmierer“:

Jedes Wissen muss innerhalb eines Systems eine einzige, eindeutige und maßgebliche Repräsentation haben.

Mit anderen Worten, jede Geschäftslogik oder jeder Algorithmus muss innerhalb einer Anwendung eindeutig existieren.

Verstöße gegen DRY

Lassen Sie uns nun einige Fälle von Verletzungen dieses Prinzips in der Java-Sprache untersuchen.

Duplizierung der Geschäftslogik

Im folgenden Code-Snippet wird die Geschäftslogik zum Anzeigen eines Arrays von Elementen dupliziert.

Don’ts

  

  public void someMethodWithoutDRY1(String[] arr) {
    

    
    for (String stringValue : arr) {
      System.out.println(stringValue + " ");
    }
    
  }

  public void someMethodWithoutDRY2(Integer[] arr) {
    

    
    for (Integer intValue : arr) {
      System.out.println(intValue + " ");
    }
    
  }

DOS

Hier ist der Code nach richtiger Anwendung des DRY-Prinzips

  
  public void displayWithDRY(Object[] arr) {
    
    for (Object objectValue : arr) {
      System.out.println(objectValue + " ");
    }
  }

  public void someMethodWithDRY1(String[] arr) {
    

    
    displayWithDRY(arr);
    
  }

  public void someMethodWithDRY2(Integer[] arr) {
    

    
    displayWithDRY(arr);
    
  }

Vervielfältigung von Algorithmen

Schauen wir uns nun eine Situation an, in der ein Algorithmus dupliziert wird.

Don’ts

class Rectangle {
  double width;
  double length;

  Rectangle(double width, double length) {
    this.length = length;
    this.width = width;
  }

  public double calculateArea() {
    return width * length;
  }
}

class Square {
  double side;

  Square(double side) {
    this.side = side;
  }

  public double calculateArea() {
    return side * side;
  }
}


public static void main(String[] args) {
    Rectangle r = new Rectangle(2, 3);
    Square s = new Square(2);
    System.out.println(r.calculateArea()); 
    System.out.println(s.calculateArea()); 

}

Im obigen Code-Snippet wird der Algorithmus, der zum Berechnen der Fläche eines Rechtecks ​​verwendet wird, sowohl in der Rectangle- als auch in der Square-Klasse dupliziert.

Mal sehen, wie man es repariert.

DOS

Wir ändern die Square-Klasse wie folgt:

class SquareDRY extends Rectangle {
  double side;

  SquareDRY(double side) {
    super(side, side);
  }
    
    

}


public static void main(String[] args) {
    Rectangle r = new Rectangle(2, 3);
    Rectangle s = new SquareDRY(2);
    System.out.println(r.calculateArea()); 
    System.out.println(s.calculateArea()); 

}

Das war es für diese kurze Tour des DRY-Prinzips.

Folgen Sie für mehr! 😎

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *