Myślę, że to zależy od tego, jak duży będzie projekt.
Z jednej strony załóżmy, że masz projekt o wartości 1 Mloc. W przypadku tak dużego projektu jest mało prawdopodobne, aby jedna osoba była „ekspertem” we wszystkich zaangażowanych obszarach. Tak więc w tym przypadku trzymałbym się istniejących stylów kodu dla każdego głównego komponentu. Nowi programiści wybiorą obszar, dowiedzą się o tym i jest mało prawdopodobne, że zobaczą wiele innych składników, które mogą mieć różne style kodu.
Jeśli projekt jest dużo mniejszy, jeżeli jest prawdopodobne, że ludzie rozumieją całą bazę kodu, a następnie wybrałbym dominujący styl kodu i trzymać się tego. W tym przypadku uważam, że spójność w całym projekcie ma większy sens, ponieważ nowi programiści będą prawdopodobnie pracować we wszystkich obszarach projektu.
Prawdopodobnie najtrudniej jest podjąć średnie projekty. W takim przypadku musisz obliczyć koszty każdego podejścia i zdecydować się na takie, które Twoim zdaniem będzie najtańsze w perspektywie długoterminowej. Wyzwanie polega na tym, że średnie projekty zwykle rozwijały się na tyle, że refaktoryzacja kompletnego stylu wydaje się zbyt droga. Możesz rzucić okiem na strukturę drzewa kodu, aby sprawdzić, czy można zorganizować grupowanie określonych stylów kodu.
Tak czy inaczej, ostateczna decyzja powinna spoczywać na zespole, który tworzy ten pakiet.
Niektóre wartości odstające, które mogą zmienić moje rozumowanie z góry:
Jeśli jeden lub więcej modułów ma okropny styl, nie ma sensu go utrzymywać, nawet przy większym projekcie. Tak, styl jest subiektywny, ale jeśli ty i twoi koledzy z projektu naprawdę nie lubicie sposobu, w jaki przepływają poszczególne obszary, to przestańcie dawny styl i nadaj mu lepszy.
Jeśli wszystkie style są dość blisko siebie, równie dobrze może być zadeklarowanie „oto nowy sposób” i użycie go do całego nowego kodu i znacznych refaktoryzacji. Może to sprawić, że recenzje będą trochę uciążliwe, ale z mojego doświadczenia wynika, że większość ludzi jest w stanie dostosować się do tego podejścia. Zapewnia także znak ostrzegawczy, w którym znajduje się stary kod.
Czasami styl jest zmieniany w zależności od nowej funkcjonalności dodanej do języka. C ++ na przestrzeni lat zyskał wiele funkcji. Sensowne może być przebudowanie w razie potrzeby starszego stylu na nowszy, który korzysta z tych funkcji.
Niektóre biblioteki mogą mieć szczególnie idiomatyczne podejście lub styl. Jeśli tak, trzymałbym się tego stylu dla tej biblioteki, nawet jeśli może to kolidować z resztą projektu. Chodzi tutaj o zwiększenie szans, że ktoś, kto pracuje frobnosticatorsnad innymi projektami, będzie również pracował nad twoim projektem.
W niektórych komentarzach jako uwagę wzięto pod uwagę style imperatywne i obiektowe.
Moduły, które są „ciężkie” w określonym stylu, prawdopodobnie powinny tak pozostać, jeśli moduł jest średniej wielkości lub większy. Pracowałem z trzema głównymi stylami (tryb rozkazujący, obiektywny i funkcjonalny) i przekształciłem ciężkie style rozkazujące w styl OO. Przy średniej lub większej ilości kodu refaktoryzacja może być (wyjątkowo) trudna. Moje doświadczenie było zakłopotane, ponieważ nie miałem żadnego wsparcia narzędziowego do pomocy w refaktoryzacji.
Wyobrażam sobie, że istnieje silna korelacja między modułami o silnie imperatywnej stylistyce a modułami idiomatycznymi dla poszczególnych nisz programistycznych, co sięga ostatniego punktu, który podniosłem z wartościami odstającymi. Tak więc każdy moduł, który znajdziesz dla tej funkcjonalności, będzie tak wyglądał i chcesz, aby eksperci z tej domeny mogli łatwo pracować również nad Twoim projektem. Ale jeśli istnieją opcje, a twojemu zespołowi nie podoba się styl tego modułu, zbadałbym te opcje.
Podobnie pracowałem z modułem w stylu OO, w którym zasady OO zostały posunięte za daleko i były niewłaściwie stosowane. Jako przykład zastosowano interfejsy jako substytut wielokrotnego dziedziczenia. I jak można się spodziewać, była to prymitywna implementacja. Byłem w stanie poczynić rozsądne postępy w refaktoryzacji tego modułu, ale ostatecznie zrezygnowałem z tego podejścia, ponieważ znalazłem lepsze pakiety do użycia.