우리의 작업에는 많은 기본 기능을 공유하는 여러 가지 .net 응용 프로그램이 있습니다. 우리는 깔끔한 n- 계층 아키텍처를 사용하여 이러한 응용 프로그램을 구축했지만 동일한 기능을 여러 번 다시 구현했다는 사실을 깨달았습니다. 분명히 이것은 DRY를 위반하므로 우리는 그것을 수정하고 싶습니다. 우리는 이미 일반적인 글루 코드 (IoC 연결, 로깅, 설정)를 위해 Nuget을 사용하고 있지만 모든 애플리케이션간에 데이터 및 비즈니스 계층을 공유하고 싶습니다. 아이디어는 UI가 실제로 필요한 비즈니스 계층의 일부만 처리한다는 것입니다.
이것은 처음에는 간단한 문제처럼 보이지만 진행중인 개발은 약간의 함정을 제공 할 수 있으며 진행 방법을 잘 모릅니다. 우리가 하나의 비즈니스 계층을 모든 것을 지배한다고 가정 해 봅시다. 간결하게하기 위해 "창립"이라고 부릅니다. 우리는 Foundation을 사용하기 위해 응용 프로그램을 이식하고 모든 것이 뛰어납니다. Foundation은 너겟을 통해 가벼운 UI 레이어에 배포되며 우리는 좋아 보입니다. 그러나 애플리케이션에 기능을 추가하기 시작하고 문제가 발생합니다.
프로젝트 A에서 작업 중이며 Foundation을 변경해야하는 새로운 기능을 추가한다고 가정하겠습니다. 우리는 재단 (Foundation-A)을 변경하고 불안정한 패키지로 너겟 피드에 밀어 넣습니다. 프로젝트 A는 최신 너겟 패키지를 얻었으며 모두 좋습니다. 한편, 다른 개발자가 프로젝트 B를 작업 중입니다. 소스 제어에서 최신 Foundation을 가져 오지만 안정적인 지점에서 가져와 프로젝트 A에 변경 사항이 없습니다. 그는 변경을하고 Foundation-B를 만들었습니다. 그리고 모두 좋다. 그러나 실제로 코드를 공유 할 수있는 Foundation-A 및 Foundation-B 구현 기능을 발견하여 결합합니다. 한편 Foundation-C는 자체 변경 사항이 반영되어 있습니다. 결국 Foundation-B는 생산 준비가 완료되었으므로이를 추진합니다. 그런 다음 프로덕션 A, B를 업데이트해야합니다.
이것은 작동하는 것처럼 보이지만 다른 데이터베이스 스키마로 작업하고 Foundation 리포지토리의 다양한 브랜치와 프로젝트 A, B 및 C 리포지토리간에 모든 항목을 동기화하는 것이 걱정됩니다. 아마도 많은 수동 작업이 필요할 것 같으며 오류가 발생할 가능성이 있습니다. 가능한 한 자동화를 원합니다.
우리가 사용하는 스택은 다음과 같습니다 : C #, TFS with Continuous Integration, Nuget. 우리의 응용 프로그램은 모두 다양한 유형의 ASP.NET 응용 프로그램입니다. 우리는 일을 더 쉽게 할 수 있도록 다른 SCM을 기꺼이 살펴볼 것입니다.
Nuget을 다른 소스 코드 브랜치로 유지하는 방법을 찾고 있습니다. 우리는 잘못된 Nuget 패키지를 참조하기 때문에 개발 코드를 실수로 프로덕션으로 푸시하고 싶지 않습니다.