Я думаю, что это на самом деле два вопроса в одном - я постараюсь ответить на оба.
1) Как уменьшить дублирующийся код в кодовой базе.
Это помогает напомнить себе о преимуществах этого: это приводит к уменьшению количества ошибок из-за дублирования бизнес-логики и необходимости поддерживать меньше кода. Лучший способ избежать этого - общение - как упоминалось в других ответах. Я полностью согласен с рекомендацией использовать проверки кода с дополнительным предупреждением о том, что вы должны распределять обязанности по проверке кода в равной степени для правильного распространения знаний. Вам также следует использовать ежедневные ожидания, чтобы разработчики часто распознавали, когда кто-то пытается решить проблему, для которой существует полезный код. Вам также следует подумать о сопряжении кода, так как это увеличивает обмен знаниями и помогает дисциплинировать программистов.
Я также рекомендую собрать ваших разработчиков как можно ближе друг к другу, желательно в одной комнате. С большим количеством общих досок и места. Затем отправьте их вместе на обед. Чем больше ваши разработчики «связывают», тем лучше они будут общаться друг с другом.
Я не согласен с рекомендацией использовать вики или аналогичный коду документа. Независимо от того, как дисциплинированные разработчики стараются быть документами, они будут отклоняться от исходного кода. Более эффективным подходом было бы использование спецификации на тестовых примерах. Они документируют код таким образом, чтобы было понятно, как его следует использовать, и ваши тесты не пройдут, если кто-то изменит код без изменения примеров.
У вас уже есть большая кодовая база с большим количеством дублирующегося кода, поэтому вам, вероятно, следует поработать над ее рефакторингом. Может быть трудно найти дублирующий код, который не был вырезан и вставлен. Поэтому вместо того, чтобы делать это, я предлагаю вам проанализировать историю изменений. Ищите файлы, которые часто изменяются одновременно. Это, вероятно, будет указывать на проблемы с инкапсуляцией, если это не указывает на фактический дублирующийся код и все равно стоит его устранить. Если вы также можете проанализировать свою историю исправлений ошибок по сравнению с изменениями кода, вы можете найти определенные горячие точки, где исправления часто необходимы. Проанализируйте эти «горячие точки», и вы, вероятно, обнаружите, что многие из них связаны с дублированием бизнес-логики, которую разработчик изменил только в одном месте, не осознавая, что это необходимо, дважды.
2) Как мы должны подходить к созданию общих виджетов, компонентов, библиотек и т. Д., Которые затем могут использоваться в других проектах .
В этом случае вы не должны пытаться обернуть бизнес-логику, а делиться полезным структурным кодом. Это может быть сложный баланс, поскольку стоимость создания и поддержки набора общих компонентов может быть довольно большой, и может быть трудно предсказать, в каких случаях это стоит делать. Подход, который я предлагаю здесь, - это правило трех ударов. Не беспокойтесь о написании подобного фрагмента кода дважды, но когда вам нужно сделать это в третий раз, преобразуйте его в общий компонент. На данный момент вы можете быть уверены, что это будет полезно, и у вас есть хорошее представление о более широких требованиях к компоненту. Очевидно, что общение между разработчиками здесь очень важно.
Подумайте о том, чтобы сделать как можно больше ваших общих компонентов открытым исходным кодом. Это не бизнес-логика, поэтому она не даст вашим конкурентам большого преимущества, а значит, вы получите дополнительных рецензентов и сопровождающих бесплатно.