모든 혐오 자들과 달리 실제 비즈니스 요구를 가정 해 봅시다.
(예를 들어, 인도 물은 소스 코드이며, 고객은 동일한 비즈니스 라인에서 서로 경쟁자이므로 서로 비밀을 유지하겠다는 비즈니스 모델을 약속합니다)
또한,의 기업은 모든 지점을 유지하기 위해 도구를 가지고 있다고 가정하자, 즉 하나 인력 (의 말을하자 100 개발자 병합에 전념, 5 일 출시 지연을 가정 또는 10 DEVS 가정 50 일 출시 지연을 확인한다), 또는 자동화 된 머지 (Merge)가 모든 지점에서 핵심 스펙 및 확장 스펙 으로 모두 테스트되는 놀라운 자동화 테스트는 "정확하게 "병합되지 않은 변경 사항에만 사람의 개입이 필요합니다. 고객이 사용자 지정뿐만 아니라 유지 관리 비용을 지불하는 경우 이는 유효한 비즈니스 모델 일 수 있습니다.
내 (그리고 나쁜 사람들) 질문, 당신은 각 고객에게 배달을 담당 하는 전담 직원이 있습니까? 예를 들어 10,000 명 규모의 회사라면 그럴 수 있습니다.
이는 경우에 따라 플러그인 아키텍처 로 처리 될 수 있습니다. 코어가 트렁크이고 플러그인이 트렁크 또는 분기에있을 수 있으며 각 고객에 대한 구성이 고유 한 이름의 파일이거나 고객 지사에 있다고 가정 해 봅시다.
플러그인은 런타임에로드되거나 컴파일시 내장 될 수 있습니다.
근본적으로 동일한 문제가 여전히 적용되는 근본적으로 동일한 프로젝트가 실제로 많은 프로젝트를 수행합니다. 간단한 핵심 변경 사항은 통합하기가 쉽지 않으며 충돌 변경 사항을 롤백하거나 많은 플러그인에 변경 사항이 필요합니다.
플러그인이 충분하지 않은 경우가 있습니다. 플러그인 인터페이스 수가 처리하기에 너무 많은 코어 내부를 조정해야하는 경우가 있습니다.
이상적으로 는 트렁크가 핵심 코드이고 분기가 측면 (여분의 코드와 추가를 코어에 연결하는 방법) 인 측면 지향 프로그래밍에 의해 처리됩니다.
간단한 예를 들어, 사용자 지정 foo
이 코어 이전 또는 이후에 실행 klass.foo
되거나이를 대체하거나이를 감싸서 입력 또는 출력을 변경할 수 있도록 지정할 수 있습니다.
이를위한 수많은 라이브러리가 있지만 병합 충돌 문제는 사라지지 않습니다. 깔끔한 병합은 AOP에 의해 처리되며 여전히 사람의 개입이 필요합니다.
마지막으로 이러한 비즈니스는 실제로 지점 유지 관리 와 관련 이 있습니다. 즉, 고객 별 기능 X가 너무 일반적이기 때문에 모든 고객이 비용을 지불하지는 않지만 코어로 이전하는 것이 더 저렴합니까?