Я думаю, що це залежить від того, наскільки в цілому закінчиться проект.
Насамкінець, скажімо, у вас є проект на 1 Mloc. Для такого великого проекту малоймовірно, що жодна особа була б "експертом" у всіх задіяних областях. Тому в цьому випадку я б дотримувався існуючих стилів коду для кожного основного компонента. Нові розробники виберуть область, дізнаються про це, і навряд чи вони побачать багато інших компонентів, які можуть мати різні стилі коду.
Якщо проект набагато менший, де , ймовірно, люди зможуть зрозуміти всю базу коду, я б обрав домінуючий стиль коду і дотримувався цього. У цьому випадку я думаю, що послідовність у всьому проекті має більше сенсу, оскільки нові розробники, ймовірно, працюватимуть у всіх областях проекту.
Середньомасштабні проекти, мабуть, найскладніші для прийняття цього рішення. У цьому випадку ви повинні зважити витрати на кожен підхід і визначитися з тим, який, на вашу думку, буде найменш дорогим. Проблема полягає в тому, що середні проекти зазвичай виростають достатньою мірою там, де повне переробництво стилів виглядає непомірно дорогим. Ви можете по-другому переглянути структуру дерева кодових кодів, щоб побачити, чи можна впорядкувати об'єднання груп певних стилів коду разом.
Так чи інакше, остаточне рішення має залежати від команди, яку ви складаєте.
Деякі люди, які можуть змінити мої міркування згори:
Якщо один або декілька модулів має жорстокий стиль, то немає сенсу зберігати це, навіть у більшому проекті. Так, стиль є суб'єктивним, але якщо вам та вашим колегам-учасникам проекту дуже не подобається те, як протікають певні ділянки, то занурюйте старий стиль і надайте йому кращий.
Якщо всі стилі досить близькі один одному, може бути так само просто оголосити "ось новий шлях" і використовувати це для всіх нових кодів і значних рефакторинга. Це може викликати біль у відгуках, але, на мій досвід, більшість людей цілком здатні адаптуватися до цього підходу. Він також забезпечує контрольний знак, де знаходиться старий код.
Іноді стиль зміщується на основі нових функціональних можливостей, доданих до мови. C ++ протягом багатьох років набрав ряд функцій. Можливо, має сенс переробляти за потреби старіший стиль на новий стиль, який використовує ці функції.
Деякі бібліотеки можуть мати особливо ідіоматичний підхід або стиль. Якщо так, я б дотримувався цього стилю для цієї бібліотеки, навіть якщо це може суперечити решті проекту. Наміром тут є збільшити шанси на те, що той, хто працює frobnosticators
над іншими проектами, також буде працювати над вашим проектом.
У деяких коментарях згадуються імперативні та об'єктно-орієнтовані стилі як розгляд.
Модулі, які "важкі" у певному стилі, ймовірно, повинні залишатися таким чином, якщо модуль середнього розміру чи більше. Я працював з трьома основними стилями (імперативний, об'єктивний та функціональний), і перетворив важкі стилі імперативу на стиль ОО. З середньою або більшою кількістю коду, рефакторинг може бути (винятково) складним. Мій досвід був збентежений, тому що я не мав жодної підтримки інструментів, щоб допомогти в рефакторингу.
Я б міг уявити, що між сильно імперативно стилізованими модулями та тими модулями є ідіоматичні конкретні ніші розвитку, існує висока кореляція, яка повертається до останнього пункту, який я підняв з авангардами. Отже, будь-який модуль, який ви знайдете для цієї функціональності, буде виглядати так, і ви хочете, щоб фахівці цього домену могли легко працювати і над вашим проектом. Але якщо є варіанти, а вашій команді не подобається стиль цього модуля, я б дослідив варіанти.
Так само я працював з важким модулем в стилі OO, де принципи OO були взяті занадто далеко та використовувалися неправильно. Як приклад, інтерфейси використовувались як замінник багаторазового успадкування. І як ви могли очікувати, це було грубою реалізацією. Мені вдалося досягти розумного прогресу в рефакторингу цього модуля, але в кінцевому підсумку я відмовився від цього підходу, оскільки знайшов кращі пакети, які використовувати замість цього.