2013-10-25 1 views
0

내 조직에는 .NET 솔루션 (C# MVC)이 있으며 우리 솔루션을 재사용 가능하게 유지하면서 동시에 확장 할 수는 없지만 약간 어려움을 겪고 있습니다.우리의 솔루션과 조언을 설계하십시오

우리는 4 클라이언트

A는, B, C, D

이 각 클라이언트가 웹 사이트를 필요가 있고 각 웹 사이트는 매우 매우 유사하다 90 % 유사한 말한다. 따라서 우리는 데이터 레이어, 코어, 서비스 및 웹 레이어 (컨트롤러/헬퍼/매핑/유효성 검사 포함)를 포함하는 기본 템플릿을 만들었습니다. 모든 클라이언트는이 템플리트를 사용합니다. 클라이언트가 코드를 공유하지 않는 유일한 부분은 해당 클라이언트에 적용될 마크 업과 테마입니다. 스크립트/기본 CSS도 클라이언트간에 공유됩니다.

이것은 지금까지 7 개월 동안 비교적 잘 작동했습니다.

클라이언트 A와 B가 배포되어 프로덕션 환경에 있습니다.

우리는 현재 클라이언트 C에서 작업하고 있으며 클라이언트 D는 아직 구현되지 않았습니다.

클라이언트 C에서 작업하는 동안 클라이언트 A와 B도 버그 수정/기능 변경 등이 필요합니다. 그러나 클라이언트 C에서 작업하기 때문에 항상 템플릿이 "프로덕션 준비"상태가 아니므로 코드는 클라이언트 A와 클라이언트에 대해 릴리스됩니다. B와 테스트되지 않은 코드. 우리는 이제 클라이언트 C에 직접 기능을 구현하여 템플릿을 변경하지 않도록했습니다.

물론 간단한 옵션은 브랜치를 분기하고 작업하는 것이지만 TFS를 사용해야하므로이 작업이 어려워집니다. 대부분 우리가 거기서부터 일할 것이지만 다른 사람들이이 문제를 어떻게 해결하는지에 대한 추가 조언 (정보원)이 있습니다.

답변

0

분기점은 고객 솔루션을 서로 독립적으로 만드는 가장 좋은 방법입니다. 또한 변경 사항을 고객 솔루션에 통합 할시기를 결정할 수 있으며 생산 준비가되지 않은 코드를 고객의 버그 수정과 함께 릴리스하지 않아도됩니다.

직접적인 접근 방식은 모든 프로젝트를 솔루션에 포함시키고 소스 코드의 완전한 솔루션을 포함하는 각 고객에 대한 분기를 만드는 것입니다. 이렇게하면 전체 코드에 대한 고객 별 변경을 할 수 있습니다.귀하의 소스 트리이 비슷한 보일 것이다

  • BRANCH1
    • 솔루션
      • 프로젝트 1
      • 프로젝트 2
  • 브랜치
    • 솔루션을
      • 프로젝트 1
      • 프로젝트는 공유 기본 구성 요소와 고객의 특정 코드 사이에 큰 분리를 도입 할 경우 2

, 당신은에 대한 별도의 솔루션을 만드는 방법에 대해 생각 고객의 특정 솔루션과 프로젝트에 바이너리를 참조하게하십시오. 조만간 기본 구성 요소의 변경 사항이 동일한 방식으로 고객 프로젝트에 통합되는 것을 보장하면서 이것은 훨씬 더 복잡하며 상당한 노력이 필요합니다. 또한 기본 구성 요소에 대한 고객 별 변경을 수행 할 수 없으므로 유연성이 떨어집니다. 나는 당신이 많은 고객 프로젝트를 기대할 때만이 것을 권하고 싶습니다. 왜냐하면 모든 고객들에게 똑같은 테스트를 거친 기본 구성 요소를 가지고 있기 때문입니다. 같은 것을 보일 것이다 귀하의 솔루션 트리 :

  • 기본 구성 요소 루트 폴더
    • 기본 구성 요소 지점
      • 솔루션을
        • 프로젝트
  • 기본 구성 요소 바이너리 출력으로부터 분기 (아마도 소스 제어의 공통 영역에서)
  • 기본 구성 요소 바이너리 출력
  • 고객 솔루션 루트 폴더
    • 지점 1
      • 기본 구성 요소 폴더 (당신이 원하는 경우 병합 고객을위한 구성 요소의 새로운 버전)
      • 솔루션을 사용
        • 프로젝트
    • 지점 ... 당신이 두 방식을 혼합 할 수 물론

(설명 된 사람은 극단). 이게 도움이 되길 바란다.

관련 문제