2009-04-04 4 views
3

저는 현재 공통점이 많은 두 개의 소셜 네트워킹 사이트에서 작업 중이지만 아직 완전히 다릅니다. 나는 (UI를 포함해서) 둘 모두에 대해 동일한 코드를 많이 작성하고 코드 복제를 제한하는 모범 사례가 있는지 궁금해하고있었습니다.여러 프로젝트에서 중복 된 기능

가장 큰 문제점 중 하나는 이러한 프로젝트가 서로 매우 독립적이어서 조만간 유사점보다 더 많은 차이가있을 것이라는 점입니다. 또한 초기 작업이 완료되면 다른 프로그래머에게 전달 될 수 있으므로 공유 코드 라이브러리가 큰 문제가 될 수 있습니다.

비슷한 상황을 처리해야하는 사람의 제안이 있으십니까?

추신 : 저는이 두 프로젝트의 유일한 개발자이며 잠시 동안 그렇게 될 것으로 보입니다.

답변

5

정의 된 인터페이스와 기본 구현을 사용하여 공유 기능을 프레임 워크 또는 라이브러리로 다시 추상화하는 것이이 문제를 처리하는 일반적인 방법입니다. 예를 들어, 플러그인 아키텍처를 지원하기로 선택한 경우, 아마 모든 프로젝트에서 공유 할 수있는 것입니다. 대부분의 경우 공유하려는 항목은 기본 기능이나 상대적으로 추상적 인 기능으로 쉽게 사용자 지정할 수 있습니다. 전자는 인식하기 쉽고 공통 라이브러리에 대해 고려하기 쉽습니다. 후자는 때로 사소한 변경 (코드보다는 패턴 공유)으로 코드를 다시 구현하는 것보다 많은 작업 일 수 있습니다.

조심해야 할 것은 공유 아키텍처를 미리 마련하기보다는 일반적인 라이브러리 디자인을 실제 재사용하도록하는 것입니다. 프레임 워크 디자인에 익숙해지고 공동 사용을 위해 추상화하려는 것은 매우 유혹적입니다. 불행히도 공유 된 사용이 예상했던 것과 다른 방향으로 발전하거나 개발되지 않으며 종종 프레임 워크를 다시 작성하거나 멀리 던지거나 심지어는 사용하지 않는 코드를 유지하고 유지하는 경우가 종종 있습니다. YAGNI (당신은 필요 없을 것입니다)를 안내자로 삼아 실제로 필요한 때까지 일반 도서관에 대한 리팩터링을 지연하십시오.

1

여기에는 서로 다른 접근 방식이 몇 가지 있습니다. 둘 다 확실히 사용할 수 있습니다. 먼저 공통 코드를 별도의 프로젝트로 옮겨 코드를 통계적으로 호출하면됩니다. 이것은 매우 쉽게 수행 할 수 있으며, 때로는 주 프로젝트의 클래스에 속하지 않는 간단한 도우미 함수를 사용하여 이러한 접근 방식을 취합니다. 좋은 예는 수학 라이브러리 나 이와 비슷한 것입니다. 다른 접근 방법은 클래스 나 인터페이스에 일반적인 기능을 추출한 다음 상속하고 확장하는 것입니다. 재사용하려고하는 코드에 따라 이러한 접근법 중 하나 또는 둘 모두를 사용할 수 있습니다.

내가 생각하는 것보다 쉽게 ​​찾을 수있을 것으로 생각됩니다. 몇 가지 간단한 코드로 시도해보고 동일한 솔루션에서 새 프로젝트를 설정하고 기존 코드에서 라이브러리를 참조하고 어떻게 진행되는지 확인하십시오. 또한 여러 솔루션에서 공유 프로젝트를 참조하지 않을 이유가 없습니다.

개발 코드가 전달되면 공유 코드 라이브러리가 문제가되지 않아도됩니다. 이제는 2 개의 사이트가 유지 관리하는 동일한 라이브러리 (또는 라이브러리)를 참조하도록 할 수 있지만, 프로젝트를 다른 팀으로 나눠서 공유 코드의 복사본을 각 팀에 제공 할 수있는 경우.

+0

고마워요! 그것은 내가 재사용하는 대부분의 기능에 효과적이다. 프로필 미리보기 이미지를 만드는 클래스는 어떻습니까? 나는 각 프로젝트마다 다르므로 너비와 높이 매개 변수를 하드 코딩 할 수 없습니다. 이러한 값을 한 번 설정하고 내 프로젝트 전체에서 사용하는 방법이 있습니까? –

+0

아이디어의 몇 가지 - 당신은 여전히 ​​일반적인 크기 조정 기능을 가지고 그냥 너비와 높이를 전달할 수 있으며, 각 프로젝트에서 이러한 값을 상수 클래스에 보관하십시오. 또는 런타임에 구성 파일에서 크기 조정 기능을 읽을 수 있습니다.이 경우 설정 파일은 나에게 소리가 나지 않습니다. –