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
Antwort
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.
Vielen Dank @Andrii –
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.
Danke, schau dir den Link an! –
- 1. Verantwortlichkeit in einer Website über 1200px
- 2. Verantwortlichkeit in Orakel ebs
- 3. Anfügen einer Zelle an eine fokussierte Zelle
- 4. Erhöhen TextInputLayout fokussierte Textgröße
- 5. AspxGridView standardmäßig fokussierte Zeile
- 6. Zurück fokussierte Steuerung in WinForms
- 7. Emoji in fokussierte Texteingabe einfügen
- 8. Designmuster Kette der Verantwortlichkeit Vs Dekorateur
- 9. Helfen Sie, das Prinzip der einfachen Verantwortlichkeit zu verstehen
- 10. Gute WPF fokussierte Blogs und/oder Podcasts?
- 11. AppleTV fokussierte Bild Grenze skaliert nicht
- 12. Prinzip der einfachen Verantwortlichkeit: Granularität des Grundes für die Änderung
- 13. Was bedeutet das Prinzip der einheitlichen Verantwortlichkeit für die Validierung
- 14. JavaFx: Holen Sie sich die letzte fokussierte Tabelle
- 15. Xcode UI Testing Remote-Taste Fehler: Fehler fokussierte Element finden
- 16. Infragistics Ultragrid: Nicht imstande, den Bearbeitungsmodus für fokussierte Spalte
- 17. Wie bekomme ich das fokussierte Element mit jQuery?
- 18. Android Studio IDE - wie fokussierte Registerkarte Farbe ändern
- 19. Get fokussierte Listenelement in einem Listview mit Selection = Keine
- 20. Wie kann ich das fokussierte Element programmgesteuert auswählen?
- 21. Animiere/zoome eine fokussierte benutzerdefinierte Ansicht in tvOS
- 22. Cordova/Phonegap 3.1 Tastatur (noch) überlagert fokussierte Formularfelder - iOS 7
- 23. Wie wird das fokussierte Element innerhalb einer caph-Liste immer an erster Stelle stehen?
- 24. Wie kann ich das aktuell fokussierte Element in einer System.Windows.Controls.ListView festlegen?
- 25. Methode innerhalb einer Methode java
- 26. Statische Fabrik auf Geschäftsobjekt eine Verletzung des Grundsatzes der einfachen Verantwortlichkeit?
- 27. Aufruf einer Methode auf einer Karte von einer anderen Methode
- 28. Wie bekomme ich einen Verweis auf das aktuell fokussierte Formularfeld in JavaScript?
- 29. Überladen einer Methode einer Superklasse
- 30. Übergeben einer Methode Parameter, zu einer anderen Methode - C#
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. –
Dank @AndriiAbramov –
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