Die Antwort darauf ist einfach.
Konsistenz ist von größter Bedeutung.
aber es kommt mit einer Einschränkung ...
Sie und Ihre Mitarbeiter sind wahrscheinlich besessen von der falschen Art von Konsistenz
Implementierungen sind verfügbar. Sie können je nach Qualität und Umfang der Testsuite mit unterschiedlichem Aufwand komplett überarbeitet werden. Machen Sie sich Gedanken über Dinge wie "Sollte dies eine Eigenschaft sein?", "Sollte Code nicht LINQ anstelle eines Konstrukts einer niedrigeren Ebene verwenden?" ist von zweifelhaftem Wert. Es ist sehr unterschiedlich, Messungen an den Wert der Konsistenz auf Implementierungsebene zu binden. Eine viel bessere Frage auf dieser Ebene ist "Funktioniert dieser Code wie angekündigt?". TL; DR-Implementierungskonsistenz ist der Punkt, an dem "kleine Geister" ihre Hobgoblins reizen.
Warum ist Konsistenz hier nicht so wichtig? Implementierungen haben in der Regel eine geringe Anzahl von Mitwirkenden. Die meisten Methoden werden geschrieben und nie wieder angerührt. Vom restlichen Code hat die Anzahl der Methoden, die zwei Mitwirkende haben, mit ziemlicher Sicherheit die Mehrheit. Dieses Muster setzt sich unendlich fort . In diesem Zusammenhang ist Konsistenz einfach nicht so wichtig. Wenn die Haltbarkeit des Codes ziemlich gering ist ( einige Jahre ), spielen die Vorteile einer aggressiven Konsistenz wahrscheinlich keine Rolle.
Das soll nicht heißen, dass Sie bei Ihren Implementierungen verrückt werden sollten. Es ist eher zu sagen, dass ein schönes, sauberes, einfaches Design für Ihren hypothetischen zukünftigen Betreuer um Größenordnungen wertvoller sein wird als die dumme Konsistenz der Kesselplatten von Methode zu Methode. Das bringt uns zum eigentlichen Punkt ...
APIs sind nicht verfügbar.
Dies sind alle APIs auf Code-Ebene, Webservices, SDKs usw. Diese müssen konsistent sein. Die Produktivitätsgewinne aus dieser Vielfalt von Konsistenz sind aus einer Reihe von Gründen enorm:
Integrationstests:
Wenn Sie Ihre APIs konsistent halten, können Sie eine Reihe von Integrationstests erstellen. Dadurch können Entwickler die Implementierungsdetails frei austauschen und eine sofortige Validierung durchführen. Willst du deine Arbeitskollegen auf LINQ tauschen? Laufen die Integrationstests? Es bietet auch eine Validierung bei der Vorbereitung der Produktionsaufnahme. Weil Computer schnell sind, kann ein einzelner Laptop die Arbeit von tausend Testern ausführen, die alltägliche Aufgaben ausführen. Dies ist gleichbedeutend mit einer erheblichen Erhöhung der Mitarbeiterzahl Ihres Unternehmens.
Produktivität
Wenn die APIs konsistent sind, können Sie Ratschläge zur Verwendung einer API abgeben, indem Sie einfach nachvollziehen, was Sie über die Verwendung anderer Teile der API gelernt haben. Dies liegt daran, dass die API ein natürliches, konsistentes "Look and Feel" bietet. Dies bedeutet, dass Ihr Kunde weniger Zeit für das Durchsuchen der Dokumentation benötigt. Onboarding ist einfacher und billiger. Es werden weniger Fragen an die Personen gestellt, die die API entwickelt haben. Konsistenz macht jeden zum Gewinner
Warum ist Konsistenz in diesem Szenario wichtig? Weil APIs das genau entgegengesetzte Problem von Implementierungen haben. Die Anzahl der Personen, die sie verwenden, ist in der Regel viel höher als die Anzahl der Personen, die zu ihren Implementierungen beitragen. Kleine Gewinne aus einer geringen Konsistenz werden vervielfacht und die Kosten für die Aufrechterhaltung dieser Konsistenz werden amortisiert.
Fazit
Konsistenz ist teuer. Auf den ersten Blick verringert es die Produktivität. Das schränkt Entwickler ein und macht ihnen das Leben schwerer. Sie schränkt die Art und Weise ein, wie sie ein Problem lösen können, und zwingt sie manchmal, es auf nicht optimale Weise zu lösen. Dies geschieht häufig aus Gründen, die sie nicht verstehen, schlecht verstehen oder die sie nicht kennen (Verträge, größere organisatorische oder organisationsübergreifende Richtlinien).
Raymond Hettinger hat in seinem Pycon 2015-Vortrag einige hervorragende Punkte in Bezug auf die Verwendung des PEP8-Styleguides für Teams von Python-Programmierern hervorgehoben. Er zeigte, dass die Besessenheit von stilistischer Konsistenz bei einem Teil des Codes dazu führte, dass Code-Reviewer schwerwiegende Logik- und Designfehler übersahen. Seine Hypothese lässt sich zusammenfassen, da es einfach ist, stilistische Inkonsistenzen zu finden. Es ist schwierig, die tatsächliche Qualität eines Codeteils zu bestimmen
Der Punkt hier ist kritisch. Identifizieren Sie, wo Konsistenz wichtig ist, und schützen Sie sie aggressiv. Wo es nicht wichtig ist, verschwende deine Zeit nicht. Wenn Sie keinen objektiven Weg finden, um den Wert der Konsistenz zu messen (in den oben genannten Fällen "effektive Mitarbeiterzahl", Kosten als Funktion der Produktivität), und Sie nicht nachweisen können, dass die Renditen erheblich sind, tun Sie dies wahrscheinlich nicht deine Organisation.