2010-04-09 5 views
1

반복 및 테스트/디버깅 간소화를 위해 많은 프로젝트에서 활용할 수있는 라이브러리 그룹을 개발하는 가장 좋은 방법을 찾으려고합니다. 개별 실행 파일을 비교적 작게 유지하고 수학, 데이터베이스, 콜렉션, 그래픽 등을 공유하는 라이브러리를 가지고 싶습니다. 이전에 여러 프로젝트에서 흩어져 있었고 많은 경우 중복되었습니다 (좋지 않았습니다!). 이 라이브러리는 SVN 저장소에 있어야하며 여러 프로그래머가 이에 대해 작업 할 것입니다. 이 라이브러리는이를 활용하는 실행 파일과 함께 지속적으로 개발 될 것입니다. 내가 추가해야하는 MyCompany 라이브러리를/디버그를 개발하기 위해,으로 VisualStudio 내 PROJECTA 솔루션 파일에 따라서대형 프로젝트에 무관 한 코드 라이브러리 만들기/유지 관리

using MyCompany.Math.2D; //static 2D math methods 
using MyCompany.Math.3D; //statiC#D math methods 
using MyCompany.Comms.SQL; //static methods for doing simple SQLDB I/O 
using MyCompany.Graphics.BitmapOperations; //static methods that play with bitmaps 

:

예를 들어, 나는 다음과 같은 일을보고 PROJECTA의 코드 파일을 원하는 여러 프로젝트 (수학, 통신, 그래픽). 상황이 복잡해지고 솔루션 파일이 프로그래머 SVN이 커밋하는 사이에 빨리 종료됩니다.

저는 SCN 저장소에 대규모의 공유 코드 기반을 유지 관리하는 데 대한 높은 수준의 접근 방식을 찾고 있습니다. 나는 나의 접근 방식을 근본적으로 재 설계하고자한다. 나는 디자인 어프로치가 자리를 잡고 개발이 유동적이며 자연 스럽다는 느낌을 받으면서 그 따뜻한 솜털 같은 느낌을 찾고 있습니다.

아이디어가 있습니까? 감사!!

+0

솔루션을 SVN으로 확인합니까? – juharr

+0

@juharr - 예, 각 프로젝트마다 자체 라이브러리가 있으며 각 라이브러리에 대한 저장소가 있습니다. – bufferz

+0

참조 : http://stackoverflow.com/questions/1943320/why-shouldnt-i-have-a-single-monolithic-utility-library –

답변

2

나는 보통 SVN externals을 사용합니다.

ProjectA 
ProjectA\Libs 
ProjectA\Libs\Maths  <-- svn:external pointing to your Maths repo 
ProjectA\Libs\Comms  <-- svn:external pointing to your Comms repo 
ProjectA\Libs\Graphics <-- svn:external pointing to your Graphics repo 

당신은 하나 개의 repo에 모든 libs와 넣어 할 수 있습니다 - 그것은, 많은 다른 사람들이 등, 그들에 작업하는 방법

이 그런 다음 빌드 스크립트가 설정되어있는 코드베이스가 얼마나 큰에 따라 달라집니다 ProjectA를 빌드하기 전에 각 libs 프로젝트를 빌드하십시오. 이렇게하면 각 라이브러리의 최신 커밋 버전을 얻을 수 있습니다. 특정 버전으로 라이브러리를 잠그고 싶다면, 예를 들어 릴리즈에 태그를 붙이고 있기 때문에 이전 버전의 ProjectA를 체크 아웃 할 때 항상 동일한 라이브러리 개정판을 얻으려는 경우, 버전 번호를 지정할 수 있습니다. svn : 외부 URL.

물론 이와 같은 의존성을 많이 사용하는 경우 모든 libs에 대한 단색 단위 테스트가 있어야하며 빌드 할 때마다 실행해야합니다.

+0

SVN 외관은 나를위한 멋진 해결책이었습니다. Orbs 감사합니다! – bufferz

0

라이브러리의 크기를 비교적 작게 유지하십시오.

적극적으로 유지 관리되는 공개적으로 사용 가능한 라이브러리는 다시 작성하지 마십시오. Java의 경우 Apache Commons가됩니다. C#의 경우 CommonLibraryNET이 떠오른다. 나는 콜렉션에 대해 코드가 이미 작성되지 않았다는 것을 믿을 수 없다. 예를 들어 특정 회사 데이터베이스 설치와 같이 이미 설치되어있는 라이브러리를 가지고 있으면 좋은 일이 될 수 있습니다.

"계속 개발 중"이라면 버전 번호를 원할 수 있습니다. 인터페이스를 일관되게 유지하십시오. 기능을 자주 제거하지 마십시오. 그게 정상적인 정책을 만들려면 실제로 사용하지 않을 기능을 추가하지 마십시오. 사람들이 찾고있는 기능이 복잡해지기 때문입니다.

사용하려는 그룹에서 구매하십시오. 작은 기본 기능 집합을 시드 한 다음 추가 할 수 있도록 다른 그룹을 가져옵니다. 더 개방 된 프로세스로 만들어야하고 잡을 가능성이 더 큽니다.

관련 문제