Я думаю, это зависит от того, насколько большим будет общий проект.
В одном крайнем случае, скажем, у вас есть проект 1 Mloc. Для такого большого проекта маловероятно, что один человек будет «экспертом» во всех областях. Так что в этом случае я бы придерживался существующих стилей кода для каждого основного компонента. Новые разработчики выберут область, узнают об этом, и вряд ли они увидят много других компонентов, которые могут иметь разные стили кода.
Если проект будет намного меньше, где это , вероятно, есть люди , понимают всю кодовую базу, то я выбрал бы доминирующую стиль коды и палку с этим. В этом случае я думаю, что последовательность во всем проекте имеет больше смысла, потому что новые разработчики, скорее всего, будут работать во всех областях проекта.
Проекты среднего размера, пожалуй, труднее всего принять это решение. В этом случае вам придется взвесить затраты для каждого подхода и выбрать тот, который, по вашему мнению, будет наименее дорогим в долгосрочной перспективе. Проблема заключается в том, что проекты среднего размера, как правило, разрослись настолько, что полный рефакторинг стиля выглядит слишком дорогим. Возможно, вы захотите еще раз взглянуть на древовидную структуру кода, чтобы увидеть, можно ли что-то упорядочить, чтобы сгруппировать определенные стили кода вместе.
В любом случае, окончательное решение должно приниматься командой, в которой вы работаете, чтобы собрать этот пакет.
Некоторые из выбросов, которые могут изменить мои рассуждения сверху:
Если один или несколько модулей имеют ужасный стиль, то нет смысла сохранять это, даже в более крупном проекте. Да, стиль субъективен, но если вы и ваши коллеги-участники проекта действительно, действительно не любите то, как текут определенные области, то обстреляйте старый стиль и сделайте его лучше.
Если все стили достаточно близки друг к другу, было бы так же просто объявить «вот новый путь» и использовать его для всего нового кода и значительных рефакторингов. Это может сделать отзывы немного болезненными, но, по моему опыту, большинство людей вполне способны адаптироваться к этому подходу. Он также предоставляет контрольный знак, где находится старый код.
Иногда стиль меняется в зависимости от новой функциональности, добавленной в язык. C ++ приобрел ряд особенностей за эти годы. Возможно, имеет смысл реорганизовать по мере необходимости старый стиль в более новый, использующий эти функции.
Некоторые библиотеки могут иметь особенно идиоматический подход или стиль. Если это так, я бы придерживался этого стиля для этой библиотеки, даже если он может конфликтовать с остальной частью проекта. Намерение здесь состоит в том, чтобы увеличить шансы, что кто-то, кто работает frobnosticators
над другими проектами, также будет работать над вашим проектом.
В некоторых комментариях упоминаются императивные и объектно-ориентированные стили.
Модули, которые являются "тяжелыми" в определенном стиле, вероятно, должны остаться такими, если модуль среднего размера или больше. Я работал с тремя основными стилями (императивный, целевой и функциональный), и я преобразовал тяжелые императивные стили в стиль ОО. При среднем или большем количестве кода рефакторинг может быть (исключительно) сложным. Мой опыт был сбит с толку, потому что у меня не было никакой инструментальной поддержки, чтобы помочь в рефакторинге.
Я полагаю, что существует высокая корреляция между модулями с сильным императивным стилем и теми модулями, которые идиоматичны для определенных ниш разработки, что восходит к последнему пункту, который я поднял с выбросами. Таким образом, любой модуль, который вы найдете для этой функциональности, будет выглядеть так, и вы хотите, чтобы эксперты в этой области также легко могли работать над вашим проектом. Но если есть варианты, а вашей команде не нравится стиль этого модуля, я бы изучил варианты.
Точно так же я работал с модулем в стиле тяжелого ОО, где принципы ОО зашли слишком далеко и использовались неправильно. В качестве примера, интерфейсы использовались в качестве замены множественного наследования. И, как вы могли ожидать, это была грубая реализация. Я смог добиться разумного прогресса в рефакторинге этого модуля, но в итоге я отказался от этого подхода, поскольку нашел более подходящие пакеты для использования.