문제

이 질문 가장 좋은 방법은 무엇을 관리할 사용자 지정 버전의 소프트웨어에 대한 특정 클라이언트?

의 대부분 사이에 차이 클라이언트로이 변경된 사용자 인터페이스 소프트웨어를 주문을 받아서 만들처럼 보이 그것에 의해 소유 클라이언트입니다.더 자주하지 않,이것은 단순한 로고 변경합니다.쿼티 색상뿐만 아니라 변경됩니다.그러나 거기 있는 경우는 기능을 활성화 또는 비활성화 기반 클라이언트입니다.가장 좋은 방법은 무엇을 계속 이러한 모든 릴리스 최고 그들을 쉽게 사용할 수 있는 사용자의 특정 클라이언트?

이 시점에서 우리는 다섯 가지 서로 다른 클라이언트와 각각 자신의 구축의 소프트웨어와 자신의 설치 관리자(전체와 그들의 로고에서 설치 프로그램).이 되는 고통을 관리하며,그것은 악화될 것입니다 더 많은 클라이언트 사용하기 시작하는 우리의 소프트웨어입니다.

그래서 가정이 연결된 질문지 않는 방법,이동하는 가장 좋은 방법은 무엇입할 수 있습니다.

도움이 되었습니까?

해결책

"이것은 관리가 고통스러워지고 있으며 점점 더 많은 고객이 소프트웨어를 사용하기 시작함에 따라 악화 될 것입니다."

정말로가는 유일한 방법 해결하다 이 부분은 소프트웨어에 핵심 제품 위에 사용자 정의를 지원하는 아키텍처를 갖도록하는 것입니다. 이상적으로는 단순히 런타임 구성 옵션입니다 (색상, 로고 및 활성화/비활성화는 이에 적합합니다). 매우 많은 수의 클라이언트를 얻거나 원한다면 구성 가능성을 핵심 제품으로 바로 밀고 고객이 사용자 정의를 수행 할 수 있도록합니다.

업데이트 할 때 핵심 제품을 빌드 (및 테스트) 한 번, 이미 제작 된 코어 제품을 라이브러리로 연결 (참조)하여 사용자 정의 버전을 구축하십시오. 각 클라이언트가 별도의 빌드에 있거나 업데이트를 생성하는 단일 빌드 프로세스를 가질 수 있습니다. 모두 현재 관리되는 클라이언트 빌드 (후자는 아마도 더 많은 수의 클라이언트에게 더 좋습니다). "바닐라"버전이있는 경우 코어의 일부 또는 클라이언트 버전과 함께이를 구축 할 수 있으므로 특정 사례에 따라 다릅니다.

기술에 따라 핵심 제품과 독립적으로 사용자 정의 계층을 구축 할 수 있습니다. 이 경우 클라이언트 재건은 거의 필요하지 않습니다 (아마도 중요한 변경 사항에 대해서만). 런타임에 업데이트 된 코어 제품에 간단히 링크 할 수 있습니다. 클라이언트에 배포하려면이를 지원하는 배포 방법이있는 경우 업데이트 된 코어 만 배포하면됩니다.

플랫폼을 모르면 더 자세한 내용을 말하기는 어렵지만,이 질문을 기꺼이 적절하게 유지했습니다.

다른 팁

  1. 소스 트리의 공통 부품과 사용자 정의 부품을 분리하십시오. 이를 통해 테스트 및 릴리스 정책에 따라 대부분의 합병을 제거 할 수 있습니다. 거기 있습니다 언제나 빌드 프로세스가 스크립트를 호출하여 일부 파일을 다시 작성해야하더라도 빌드 리소스를 추상화하고 사용자 정의하는 방법.

  2. 좋은 소스 코드 관리 시스템에서 분기를 신중하게 사용합니다. 이것들은 "구성 관리"시스템이라고하지 않습니다. 그것들은 정확하게이 작업에 최적화 된 도구이므로, 아마도 하나 이상을 구축하지 않고는 더 나은 것을 얻지 못할 것입니다.

전복은 여러 가지를 설정하는 데 능숙하지만 마지막으로 한 번에 단일 파일에 3 방향 병합을 수행 할 수 있음을 확인했습니다. Perforce는이 부서에서 파일별로 분기 기록을 추적하고이를 사용하여 전체 분기 간 변경 세트의 병합을 자동화하기 때문에이 부서에서 굉장합니다. 정말 고양이의 잠옷입니다.

Git과 Darcs는 비슷한 힘을 가질 수 있지만 나는 그것들을 사용하지 않았습니다. 그들은 각 작업 체크 아웃 트리가 처음부터 모든 변경 사항을 사본을 가질 것이라는 아이디어를 기반으로하는 것 같습니다. SCM 제어하에 크고 변화하는 SDK를 유지해야하기 때문에 그것은 나에게 비현실적으로 들립니다.

틀림없이, 유일한 차이점은 고객-유니 키가 변경되면서 릴리스의 지점이어야합니다. 예를 들어 :

/project
   /trunk 
   /branches
      /release-v1
   /customer-branches
      /release-v1-google
      /release-v1-microsoft
 ....

고객 릴리스가 고객 릴리스의 지점 인 경우. 이 브랜치는 트렁크 나 다른 릴리스 브랜치로 굴러 가지 않기 때문에 일반 개발 /가지 트리를 오염시키지 마십시오.

나는 그것의 수준에 따라 달라 사용자 지정에 필요한 각 클라이언트,하지만 당신이 당신의 기본 응용 프로그램""사용자 정의 자체 기반으로 config 파일? 을 할 수 있도록 트렁크는 전체 응용 프로그램 다음은 특별한 설정 파일을 각 고객에 대한 제어하는 모양과 느낌을 뿐만 아니라 기능을 사용하 릴리스 프로세스는 올바른 설정파일을 배포하에 설치.

는 경우에 당신은 항상을 제공 사용자 지정(ish)전 버전의 앱에 대한 각 클라이언트에 가치가있을 것입 시간을 연장하는 앱에서는 이 방법입니다.

호출 된 헤더 파일을 설정했습니다 브랜딩 .H 여기에는 다음 예제와 같은 #ifdef가 포함되어있어 변경이 필요한 비트를 변경합니다. Visual Studio에서는 적절한 클라이언트 기호가 정의 된 상태에서 여러 빌드를 쉽게 설정할 수 있습니다.

#if defined BRAND_CLIENT1
#  define COMPANY_NAME  "Client 1"
#  define PRODUCT_NAME  "The Client 1 Widget App"
#  define LOGO_FILE     "res/logoClient1.ico"

#elif defined BRAND_CLIENT2
#  define COMPANY_NAME  "Client 2"
#  define PRODUCT_NAME  "The Client 2 Super Widget App"
#  define ENABLE_EXTRA_MENU
#  define LOGO_FILE     "res/logoClient2.ico"

#endif

이것은 물론 C ++를 가정합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top