Протиставляючи всіх наймовців, припустимо, реальна потреба в бізнесі.
(наприклад, вихідний код є вихідним кодом, клієнти ведуть один і той же бізнес і, отже, конкурують один з одним, а ви бізнес-модель обіцяє зберігати свої секрети в секреті)
Крім того, припустимо, що у вашої компанії є інструменти для підтримки всіх галузей, тобто чисельність персоналу (скажімо, 100 розробників, присвячених об'єднанню, припускаючи 5-денну затримку випуску; або 10 розробок, за умови, що 50-денний затримка випуску нормальна), або таке дивовижне автоматизоване тестування, що автоматичні злиття справді випробовуються як до основних специфікацій, так і до специфікацій розширень у кожній галузі, і, отже, лише зміни, які не зливаються «чисто», вимагають втручання людини. Якщо ваші клієнти платять не тільки за налаштування, але за їх обслуговування, це може бути дійсною діловою моделлю.
Моє (і най-кажуть) питання: чи є у вас віддана особа, відповідальна за доставку до кожного замовника? Якщо ви, скажімо, компанія з 10 000 осіб, це може бути так.
Це може вирішуватися архітектурою плагінів у деяких випадках, скажімо, ваше ядро є магістраллю, плагіни можуть міститись у стовбурі або гілках, а конфігурація для кожного клієнта - це однозначно названий файл або зберігається у відділенні клієнта.
Плагіни можуть бути завантажені під час виконання або вбудовані під час компіляції.
Дійсно багато проектів зроблено так, принципово та ж проблема все ще застосовується - прості основні зміни тривіальні для інтеграції, конфліктні зміни потрібно або відкотити назад, або зміни потрібні для багатьох плагінів.
Бувають випадки, коли плагіни недостатньо хороші, саме тоді потрібно налаштувати стільки внутрішніх процесів ядра, що кількість інтерфейсів плагінів стає занадто великою, щоб обробити.
В ідеалі це вирішуватиметься орієнтоване на аспекти програмування , де магістраль - це основний код, а гілки - це аспекти (тобто додатковий код та інструкції, як підключити додатки до ядра)
Простий приклад, ви можете вказати, що користувальницький foo
запускається перед ядром або після нього, klass.foo
або що він замінює його, або що завершує його і може змінити вхід або вихід.
Для цього є маса бібліотек, однак проблема конфліктів злиття не минає - чисті злиття вирішуються АОП, і конфлікти все ще потребують втручання людини.
Нарешті, такий бізнес справді має стосуватися технічного обслуговування філій , а саме, чи характерна для клієнта функція X настільки поширена, що її дешевше перенести до основної роботи, хоча не всі клієнти платять за неї?