Ich denke, das sind eigentlich zwei Fragen in einer - ich werde versuchen, beide zu beantworten.
1) Wie reduzieren wir doppelten Code in einer Codebasis?
Es hilft uns, uns an den Vorteil dieser Vorgehensweise zu erinnern: Es führt zu weniger Fehlern aufgrund doppelter Geschäftslogik und es muss weniger Code gepflegt werden. Der beste Weg, dies zu verhindern, ist die Kommunikation - wie in den anderen Antworten erwähnt. Ich stimme der Empfehlung zu, Codeüberprüfungen mit der zusätzlichen Einschränkung zu verwenden, dass Sie die Verantwortung für die Codeüberprüfung gleichermaßen teilen sollten, um das Wissen richtig zu verbreiten. Sie sollten auch tägliche Stand-ups verwenden, damit Entwickler häufig erkennen, wenn jemand versucht, ein Problem zu lösen, für das bereits nützlicher Code vorhanden ist. Sie sollten auch das Koppeln von Code in Betracht ziehen, da dadurch der Wissensaustausch verbessert und die Programmierer diszipliniert werden.
Ich würde auch empfehlen, Ihre Entwickler so nah wie möglich zusammenzubringen, vorzugsweise im selben Raum. Mit vielen geteilten Whiteboards und viel Platz. Dann schick sie zusammen zum Essen. Je mehr Ihre Entwickler "binden", desto besser kommunizieren sie miteinander.
Ich bin mit der Empfehlung, ein Wiki oder ähnliches wie Dokumentcode zu verwenden, nicht einverstanden. Egal wie diszipliniert Entwickler sein wollen, die Dokumentation weicht vom ursprünglichen Code ab. Ein effektiverer Ansatz wäre die Verwendung von Spezifikationen durch Beispielstiltests. Diese dokumentieren den Code auf eine Weise, die klar macht, wie er verwendet werden soll, und Ihre Tests schlagen fehl, wenn jemand den Code ändert, ohne die Beispiele zu ändern.
Sie haben bereits eine große Codebasis mit vielen doppelten Codes, daher sollten Sie wahrscheinlich daran arbeiten, diese zu überarbeiten. Es kann schwierig sein, doppelten Code zu finden, der nicht ausgeschnitten und eingefügt wurde. Ich schlage vor, Sie analysieren Ihre Änderungshistorie, anstatt dies zu tun. Suchen Sie nach Dateien, die sich häufig gleichzeitig ändern. Dies weist wahrscheinlich auf Probleme mit der Kapselung hin, wenn kein tatsächlicher doppelter Code angezeigt wird und es sich trotzdem lohnt, diesen zu bereinigen. Wenn Sie Ihren Bugfix-Verlauf auch anhand Ihrer Codeänderungen analysieren können, finden Sie möglicherweise bestimmte Hotspots, an denen häufig Korrekturen erforderlich sind. Wenn Sie diese Hotspots analysieren, werden Sie wahrscheinlich feststellen, dass viele davon auf doppelte Geschäftslogik zurückzuführen sind, die ein Entwickler nur an einer Stelle geändert hat, ohne zu bemerken, dass sie zweimal geändert werden muss.
2) Wie sollten wir nähern gemeinsame Widgets machen, Komponenten, Bibliotheken, etc. , die dann in anderen Projekten verwendet werden können .
In diesem Fall sollten Sie nicht versuchen, die Geschäftslogik zu verpacken, sondern nützlichen Framework-Code gemeinsam nutzen. Dies kann eine heikle Angelegenheit sein, da die Kosten für das Erstellen und Verwalten eines Satzes gemeinsam genutzter Komponenten sehr hoch sein können und es schwierig sein kann, vorherzusagen, in welchen Fällen dies sinnvoll ist. Der Ansatz, den ich hier vorschlagen würde, ist eine Drei-Treffer-Regel. Machen Sie sich keine Gedanken darüber, einen ähnlichen Code zweimal zu schreiben. Wenn Sie ihn jedoch ein drittes Mal ausführen müssen, müssen Sie ihn in eine gemeinsam genutzte Komponente umgestalten. An diesem Punkt können Sie sich ziemlich sicher sein, dass es nützlich ist, und Sie haben eine gute Vorstellung von den umfassenderen Anforderungen für das Bauteil. Natürlich ist hier die Kommunikation zwischen Entwicklern von entscheidender Bedeutung.
Ziehen Sie in Betracht, so viele Ihrer gemeinsam genutzten Komponenten wie möglich als Open Source zu nutzen. Dies ist keine Geschäftslogik, sodass Ihre Konkurrenten keinen großen Vorteil daraus ziehen können. Es bedeutet jedoch, dass Sie zusätzliche Prüfer und Betreuer kostenlos erhalten.