2016-09-23 3 views
2

Ich habe mehrere OOP-Bücher gelesen, in denen es eine Betonung auf Regeln für die Definition von Klassen gibt, die sich auf bestimmte Verantwortlichkeiten konzentriert haben. Bei einer Reihe von Anwendungen, an denen ich gearbeitet habe, wird dies meistens eingehalten. Ich sehe jedoch viele Fälle, in denen viel Logik in eine einzige Methode gesteckt wird, die es schwierig macht, den Unit-Test zu verstehen. Welche Best Practices müssen beim Definieren von Methoden beachtet werden?Fokussierte Verantwortlichkeit einer Methode

+1

Nachdem ich "Clean Code, Autor - Robert Martin" gelesen habe, habe ich meinen Code komplett überprüft. Das Lesen ist einfach und schnell. Ein großer Schwerpunkt liegt auf Refactoring, Code sauber halten, Struktur organisieren und wiederholen. –

+0

Dank @AndriiAbramov –

+0

Auch bekannt als das Single Responsibility-Prinzip, das S von SOLID: Eine Klasse sollte nur einen Grund haben, sich zu ändern (Robert C. Martin). – sp00m

Antwort

1

Als Beispiel betrachten wir die folgenden Verfahren aus:

public static void printDetails() { 
    System.out.println("Current time: " + LocalTime.now()); 
    System.out.println("Current date: " + LocalDate.now()); 

    System.out.println("Available processors: " + Runtime.getRuntime().availableProcessors()); 
    System.out.println("Max memory: " + Runtime.getRuntime().maxMemory()); 
    System.out.println("Free memory: " + Runtime.getRuntime().freeMemory()); 
} 

Nach einiger Refactoring haben wir mehr lesbar und wartbar Version:

public static void printDetails() { 
    printDateTimeDetails(); 
    printProcessorDetails(); 
    printMemoryDetails(); 
} 

Es ist einfacher zu lesen. Und was ist wichtiger - es ist einfacher zu testen. Wenn Sie den Körper dieser Methode lesen, verstehen Sie klar seinen Zweck. Wenn Sie mehr Details benötigen, können Sie einfach tiefer in den Code schauen und sehen, was jede Methode tut.

public static void printProcessorDetails() { 
    System.out.println("Available processors: " + getAvailableProcessors()); 
} 

public static int getAvailableProcessors() { 
    return Runtime.getRuntime().availableProcessors(); 
} 

public static void printMemoryDetails() { 
    System.out.println("Max memory: " + getMaxMemory()); 
    System.out.println("Free memory: " + getFreeMemory()); 
} 

public static long getFreeMemory() { 
    return Runtime.getRuntime().freeMemory(); 
} 

public static long getMaxMemory() { 
    return Runtime.getRuntime().maxMemory(); 
} 

private static void printDateTimeDetails() { 
    System.out.println("Current time: " + LocalTime.now()); 
    System.out.println("Current date: " + LocalDate.now()); 
} 

Und auch solcher Code ist wiederverwendbar.

Die Pfadfinder haben eine Regel: "Lassen Sie den Campingplatz immer sauberer, als Sie ihn gefunden haben." Eigentlich war die ursprüngliche Form dieser Regel, geschrieben von Robert Stephenson Smyth Baden-Powell, dem Vater des Scouting, "Versuche, diese Welt ein wenig besser zu verlassen, als du sie gefunden hast."

Natürlich alles das meiner Meinung nach.

+0

Vielen Dank @Andrii –

2

Der allgemeine Konsens ist, dass der beste Ansatz zu entscheiden, was eine Methode tun sollte, ist die Do One Thing Philosophie zu folgen.

Jede Methode sollte nur eine Sache und eine Sache tun.

+0

Danke, schau dir den Link an! –

Verwandte Themen