1) НЕТ! Вы не хотите управлять разными ветвями одной и той же кодовой базы ... Потому что, как бы ни был распространен код, вы захотите внести радикальные изменения, и один проект "на данный момент" будет не так важен, как другие , и тогда вы получите одну ветвь, растущую быстрее, чем другие .... вставьте снежок.
2) Это более или менее отраслевой стандарт. Большой конфигурационный файл, ограничивает количество вещей на основе лицензии / конфигурации. Это может сделать приложение немного громоздким, но пока код жалуется на взаимоисключающие вещи и все разработчики постоянно общаются о новых функциях и о том, как они распространяются по всему приложению, у вас все должно получиться. Это также легче всего взломать, если это вызывает беспокойство.
3) Это также «может» работать. Если вы используете C #, плагины относительно просты, вам нужно беспокоиться только об аде зависимости. Если у плагинов есть какой-либо шанс стать циклически взаимозависимым (то есть, a требует b, требует c, требует a), то это быстро взорвется, и вы вернетесь (довольно легко) обратно к # 2.
Лучшими ресурсами, которые у вас есть, являются, вероятно, прошлый опыт ваших коллег по различным проектам и опыт людей, болтающих об этом здесь, на Слэшдоте или где-то еще. Конечно, самый дешевый.
Плюсы обмена кодом:
Одно изменение меняет все.
Единая модель данных.
Есть только одна правда. (Гораздо проще для всех быть на одной странице)
Минусы совместного использования кода:
Одно изменение меняет все .. Будьте осторожны.
Если в нем есть одна ошибка, это влияет на все.
Плюсы копирования / разветвления:
Обычно быстрее реализовать конкретную функцию для конкретного клиента.
Быстрее взломать, когда вы поймете, что допущение A применимо только для рынков B и C, а не D.
Минусы копирования / разветвления:
Один или несколько скопированных проектов в конечном итоге потерпят неудачу из-за отсутствия согласованности в вашем коде.
Как сказано выше: радикальные изменения занимают намного больше времени.
Удачи.