Zusammenfassung
Wie JacquesB schreibt, sind nicht alle mit Robert C. Martins "Clean Code" einverstanden.
Die Open-Source-Projekte, bei denen Sie festgestellt haben, dass sie die erwarteten Prinzipien "verletzen", haben wahrscheinlich einfach andere Prinzipien.
Meine Perspektive
Ich beaufsichtige zufällig mehrere Codebasen, die sich sehr stark an die Prinzipien von Robert C. Martin halten. Ich behaupte jedoch nicht wirklich, dass sie richtig sind , ich kann nur sagen, dass sie gut für uns funktionieren - und dass "wir" in der Tat eine Kombination von zumindest ist
- Umfang und Architektur unserer Produkte,
- die Zielgruppe / Kundenerwartungen,
- wie lange die Produkte aufbewahrt werden,
- die von uns verwendete Entwicklungsmethodik,
- die Organisationsstruktur unseres Unternehmens und
- Gewohnheiten, Meinungen und Erfahrungen unserer Entwickler.
Im Grunde läuft dies auf Folgendes hinaus: Jedes Team (sei es ein Unternehmen, eine Abteilung oder ein Open Source-Projekt) ist einzigartig. Sie werden unterschiedliche Prioritäten und unterschiedliche Standpunkte haben und natürlich unterschiedliche Kompromisse eingehen. Diese Kompromisse und der daraus resultierende Codestil sind größtenteils Geschmackssache und können nicht als "falsch" oder "richtig" nachgewiesen werden. Die Teams können nur sagen "Wir machen das, weil es für uns funktioniert" oder "Wir sollten das ändern, weil es für uns nicht funktioniert".
Um jedoch große Codebasen über Jahre hinweg erfolgreich verwalten zu können, sollte sich jedes Team auf eine Reihe von Codekonventionen einigen, die seiner Meinung nach für die oben genannten Aspekte geeignet sind. Das kann bedeuten, Praktiken von Robert C. Martin oder einem anderen Autor zu übernehmen oder eigene zu erfinden. es kann bedeuten, sie formell aufzuschreiben oder "anhand eines Beispiels" zu dokumentieren. Aber sie sollten existieren.
Beispiel
Betrachten Sie die Praxis des "Aufteilens von Code von einer langen Methode in mehrere private Methoden".
Robert C. Martin sagt , dass dieser Stil zur Begrenzung des Inhalts jeden Verfahren auf eine Abstraktionsebene ermöglicht - als vereinfachtes Beispiel eine öffentliche Methode wäre wahrscheinlich nur Anrufe zu privaten Methoden bestehen wie verifyInput(...)
, loadDataFromHardDisk(...)
, transformDataToJson(...)
und schließlich sendJsonToClient(...)
, und diese Methoden müßten die Implementierungsdetails.
- Manche Leute mögen das, weil die Leser sich einen schnellen Überblick über die wichtigsten Schritte verschaffen und auswählen können, über welche Details sie lesen möchten.
- Manche Leute mögen es nicht, weil man, wenn man alle Details wissen will, in der Klasse herumspringen muss, um dem Ausführungsfluss zu folgen (worauf JacquesB wahrscheinlich Bezug nimmt, wenn er über das Hinzufügen von Komplexität schreibt).
Die Lehre ist: Alle haben Recht, weil sie das Recht haben, eine Meinung zu haben.