Ich denke, es hängt davon ab, wie groß das Gesamtprojekt sein wird.
Nehmen wir an, Sie haben ein 1-Mloc-Projekt. Für ein so großes Projekt ist es unwahrscheinlich, dass eine einzelne Person ein "Experte" in allen beteiligten Bereichen ist. In diesem Fall würde ich mich also an vorhandene Codestile für jede Hauptkomponente halten. Neue Entwickler werden einen Bereich auswählen, dies lernen und es ist unwahrscheinlich, dass sie viele andere Komponenten sehen, die möglicherweise andere Codestile haben.
Wenn das Projekt viel kleiner ist, wo es ist wahrscheinlich Individuen haben die gesamte Code - Basis zu verstehen, dann würde ich mit , dass ein dominanten Code - Stil und Stick holen. In diesem Fall halte ich die Konsistenz über das gesamte Projekt für sinnvoller, da neue Entwickler wahrscheinlich in allen Bereichen des Projekts arbeiten werden.
Mittelgroße Projekte sind vielleicht am schwierigsten zu treffen. In diesem Fall müssen Sie die Kosten für jeden Ansatz abwägen und entscheiden, welcher Ansatz Ihrer Meinung nach langfristig am kostengünstigsten ist. Die Herausforderung besteht darin, dass mittelgroße Projekte in der Regel gerade so weit gewachsen sind, dass ein vollständiges Refactoring des Stils unerschwinglich teuer erscheint. Vielleicht möchten Sie einen zweiten Blick auf die Codebaumstruktur werfen, um zu sehen, ob Dinge angeordnet werden können, um bestimmte Codestile zu gruppieren.
In jedem Fall sollte die endgültige Entscheidung bei dem Team liegen, dem Sie angehören und das dieses Paket zusammenstellt.
Einige der Ausreißer, die meine Argumentation von oben verschieben könnten:
Wenn eines oder mehrere der Module einen grausamen Stil haben, macht es keinen Sinn, dies auch bei einem größeren Projekt beizubehalten. Ja, Stil ist subjektiv, aber wenn Sie und Ihre Projektkollegen die Art und Weise, wie bestimmte Bereiche fließen, wirklich, wirklich nicht mögen, dann zerstören Sie den alten Stil und geben Sie ihm einen besseren.
Wenn alle Stile relativ nahe beieinander liegen, ist es möglicherweise genauso einfach, "Hier ist der neue Weg" zu deklarieren und diesen für alle neuen Codes und wichtigen Refactorings zu verwenden. Dies kann Bewertungen ein wenig schmerzhaft machen, aber meiner Erfahrung nach sind die meisten Leute ziemlich fähig, sich an diesen Ansatz anzupassen. Es bietet auch ein verräterisches Zeichen, wo sich der alte Code befindet.
Manchmal wird der Stil aufgrund neuer Funktionen geändert, die der Sprache hinzugefügt wurden. C ++ hat im Laufe der Jahre eine Reihe von Funktionen übernommen. Es kann sinnvoll sein, den älteren Stil nach Bedarf auf einen neueren Stil umzugestalten, der diese Funktionen nutzt.
Einige Bibliotheken haben möglicherweise einen besonders idiomatischen Ansatz oder Stil. In diesem Fall würde ich mich an diesen Stil für diese Bibliothek halten, auch wenn er möglicherweise mit dem Rest des Projekts in Konflikt steht. Hier soll die Wahrscheinlichkeit erhöht werden, dass jemand, der frobnosticators
an anderen Projekten arbeitet, auch an Ihrem Projekt arbeitet.
In einigen Kommentaren wurden imperative und objektorientierte Stile als Überlegung erwähnt.
Module, die in einem bestimmten Stil "schwer" sind, sollten dies wahrscheinlich auch bleiben, wenn das Modul mittelgroß oder größer ist. Ich habe mit den drei Hauptstilen (imperativ, objektiv und funktional) gearbeitet und schwere imperative Stile in einen OO-Stil umgestaltet. Bei einer mittleren oder größeren Codemenge kann das Refactoring (ausnahmsweise) schwierig sein. Meine Erfahrung war verwirrend, weil ich keine Werkzeugunterstützung hatte, um beim Refactoring zu helfen.
Ich würde mir vorstellen, dass es eine hohe Korrelation zwischen den stark zwingend gestalteten Modulen und diesen Modulen gibt, die für bestimmte Entwicklungsnischen idiomatisch sind, was auf den letzten Punkt zurückgeht, den ich mit Ausreißern angesprochen habe. So jede Modul , das Sie für diese Funktionalität finden würde , wie das aussehen wird, und Sie wollen die Experten dieser Domäne zu leicht als auch der Lage sein , an Ihrem Projekt arbeiten. Aber wenn es Optionen gibt und Ihr Team den Stil dieses Moduls nicht mag, würde ich die Optionen untersuchen.
Ebenso habe ich mit einem Modul im Heavy-OO-Stil gearbeitet, bei dem die OO-Prinzipien zu weit gegangen sind und falsch verwendet wurden. Beispielsweise wurden Schnittstellen als Ersatz für die Mehrfachvererbung verwendet. Und wie zu erwarten war, war es eine grobe Implementierung. Ich konnte vernünftige Fortschritte bei der Überarbeitung dieses Moduls erzielen, habe diesen Ansatz jedoch letztendlich aufgegeben, da ich stattdessen bessere Pakete gefunden habe.