Myślę, że to właściwie dwa pytania w jednym - postaram się odpowiedzieć na oba.
1) Jak zmniejszyć duplikat kodu w bazie kodu?
Pomaga przypomnieć sobie o korzyściach płynących z robienia tego: powoduje mniej błędów z powodu zduplikowanej logiki biznesowej i wymaga mniejszej ilości kodu. Najlepszym sposobem na ograniczenie tego zjawiska jest komunikacja - jak wspomniano w innych odpowiedziach. Zdecydowanie zgadzam się z zaleceniem używania recenzji kodu z dodatkowym zastrzeżeniem, że powinieneś równo dzielić obowiązki związane z przeglądaniem kodu, aby właściwie rozpowszechniać wiedzę. Powinieneś także używać codziennych stand-upów, aby programiści często rozpoznawali, kiedy ktoś próbuje rozwiązać problem, dla którego istnieje przydatny kod. Należy również rozważyć parowanie kodów, ponieważ zwiększa to dzielenie się wiedzą i pomaga utrzymać dyscyplinę programistów.
Polecam również zbliżenie programistów jak najbliżej siebie, najlepiej do tego samego pokoju. Z dużą ilością wspólnych tablic i miejsca. Następnie wyślij je razem na posiłki. Im więcej twoi programiści „łączą”, tym lepiej będą się ze sobą komunikować.
Nie zgadzam się z zaleceniem używania wiki lub podobnego do kodu dokumentu. Bez względu na to, jak zdyscyplinowani programiści starają się być dokumentacją, odchodzi od oryginalnego kodu. Bardziej efektywnym podejściem byłoby zastosowanie specyfikacji przez przykładowe testy stylu. Dokumentują one kod w sposób, który wyjaśnia, jak należy go używać, a testy zakończą się niepowodzeniem, jeśli ktoś zmieni kod bez zmiany przykładów.
Masz już dużą bazę kodów z dużą ilością zduplikowanego kodu, więc prawdopodobnie powinieneś pracować nad refaktoryzacją tego. Znalezienie duplikatu kodu, który nie został wycięty i wklejony, może być trudne. Zamiast tego sugeruję przeanalizowanie historii zmian. Szukaj plików, które często się zmieniają w tym samym czasie. Prawdopodobnie będzie to oznaczać problemy z enkapsulacją, jeśli nie wskaże faktycznego duplikatu kodu i jest warte wyczyszczenia. Jeśli możesz także przeanalizować historię poprawek błędów pod kątem zmian w kodzie, możesz znaleźć konkretne punkty aktywne, w których poprawki są często konieczne. Przeanalizuj te hotspoty, a prawdopodobnie zauważysz, że wiele z nich wynika z powielonej logiki biznesowej, którą programista zmienił tylko w jednym miejscu, nie zdając sobie sprawy, że trzeba go dwukrotnie zmienić.
2) Jak powinniśmy podejść do tworzenia wspólnych widżetów, komponentów, bibliotek itp., Które mogą być następnie wykorzystane w innych projektach .
W takim przypadku nie powinieneś próbować owijać logiki biznesowej, ale udostępniać użyteczny kod frameworka. Może to być trudna równowaga, ponieważ koszt utworzenia i utrzymania zestawu wspólnych komponentów może być dość duży i trudno przewidzieć, w których przypadkach warto to zrobić. Podejście, które tutaj zasugerowałem, to zasada trzech ostrzeżeń. Nie przejmuj się pisaniem podobnego fragmentu kodu dwa razy, ale gdy musisz to zrobić po raz trzeci, przekształć go we wspólny komponent. W tym momencie możesz być całkiem pewny, że będzie on użyteczny i masz dobre pojęcie o szerszych wymaganiach dla komponentu. Oczywiście niezbędna jest tutaj komunikacja między programistami.
Zastanów się, aby jak najwięcej udostępnionego komponentu było typu open source. To nie jest logika biznesowa, więc nie da konkurentom dużej przewagi, ale oznacza, że zyskasz dodatkowych recenzentów i opiekunów za darmo.