문제

솔루션을 논리적 레이어로 분할할 때 단순히 폴더별로 그룹화하는 것보다 별도의 프로젝트를 사용하는 것이 가장 좋은 때는 언제인가요?

도움이 되었습니까?

해결책

기본적으로, 항상 새 폴더를 만드세요 같은 프로젝트 내에서

  • 단일 조립을 받게 됩니다(추가 ILMerge 체조 없이).
  • 난독화하기가 더 쉽습니다. (공개 유형과 메소드가 적고 이상적으로는 전혀 없기 때문입니다.)

소스 코드를 여러 프로젝트로 분리하는 것은 다음과 같은 경우에만 의미가 있습니다.

  • 프로젝트의 일부이지만 기본적으로 또는 전혀 배포할 수 없는 소스 코드의 일부가 있습니다(단위 테스트, 추가 플러그인 등).
  • 더 많은 개발자가 참여하고 그들의 작업을 소모품 블랙박스로 취급하고 싶습니다.(별로 권장하지 않음)
  • 프로젝트를 격리된 레이어/모듈로 명확하게 분리할 수 있고 교차 소비할 수 없도록 하려는 경우 내부 회원.(또한 가장 중요한 측면을 결정해야 하기 때문에 권장되지 않습니다)

소스 코드의 일부를 재사용할 수 있다고 생각되더라도 새 프로젝트로 생성하지 마세요.다른 솔루션에서 재사용하고 싶을 때까지 기다렸다가 필요에 따라 원본 프로젝트에서 격리하세요.프로그래밍은 레고가 아닙니다. 재사용은 일반적으로 매우 어렵고 계획대로 일어나지 않는 경우가 많습니다.

다른 팁

기능을 프로젝트로 분리하는 것은 종종 YAGNI 아키텍처 최적화입니다.실제로 이러한 개별 프로젝트를 얼마나 자주 재사용하셨나요?자주 발생하지 않으면 이론적 재사용을 위한 개발, 구축, 배포 및 유지 관리가 복잡해집니다.

나는 실제 재사용 사례가 있는 경우 폴더로 분리하고(적절한 네임스페이스를 사용하여) 프로젝트를 분리하도록 리팩터링하는 것을 훨씬 선호합니다.

데니는 다음과 같이 썼습니다.

개인적으로 재사용 가능한 코드를 프로젝트로 분할하면 폴더에 있는 것보다 다른 위치를 사용하는 것이 더 간단하다고 생각합니다.

나는 이것에 정말로 동의합니다. 재사용할 수 있다면 별도의 프로젝트에 있어야 합니다.즉, 효과적으로 재사용하는 것도 매우 어렵습니다. :)

여기 SO에서는 세 가지 프로젝트를 통해 매우 단순해지려고 노력했습니다.

  • MVC 웹 프로젝트(기본적으로 레이어를 폴더로 분리하는 기능이 훌륭함)
  • 당사 DB의 소스 컨트롤을 위한 데이터베이스 프로젝트
  • MVC 모델/컨트롤러에 대한 단위 테스트

모든 사람을 대변할 수는 없지만 우리가 얼마나 단순하게 유지했는지에 만족합니다. 빌드 속도가 정말 빨라졌습니다!

저는 보통 GUI용 프로젝트, 비즈니스 로직용 프로젝트, 데이터 액세스용 프로젝트, 단위 테스트용 프로젝트를 수행합니다.

그러나 인증, 판매 등과 같은 서비스(서비스 지향 아키텍처를 사용하는 경우)를 기준으로 분리하는 것이 현명한 경우도 있습니다.

제가 작업하는 경험적 법칙은 이를 관심사가 명확하게 분리된 구성 요소로 볼 수 있다면 다른 프로젝트가 신중할 수 있다는 것입니다.하지만 폴더 대 프로젝트는 단지 선호도나 철학일 수 있다고 생각합니다.

개인적으로 재사용 가능한 코드를 프로젝트로 분할하면 폴더에 있는 것보다 다른 위치를 사용하는 것이 더 간단하다고 생각합니다.

소스 코드를 여러 프로젝트로 분리하는 것은 ......더 많은 개발자가 참여하고 자신의 작업을 소모품 블랙 박스로 취급하고 싶습니다.(권장되지 않음) ...

이것이 권장되지 않는 이유는 무엇입니까?여러 개발자가 서로 다른 부분을 작업하면서 애플리케이션을 관리하는 것이 매우 유용한 방법이라는 것을 알았습니다.주로 병합을 사실상 제거하여 체크인을 훨씬 쉽게 만듭니다.두 명의 개발자가 동시에 동일한 프로젝트를 진행해야 하는 경우는 거의 없습니다.

여러 프로젝트를 만드는 경우 솔루션에 코드를 추가하는 모든 사람이 해당 의도를 완전히 인식하고 프로젝트 간의 종속성을 이해할 수 있도록 최선을 다하십시오.누군가가 떠났을 때 혼란스러운 상황을 정리하려고 시도한 적이 있고 거기에 없어야 할 참조를 추가하고 몇 주 동안 그 일을 처리해 본 적이 있다면 이 점을 이해할 것입니다.

저는 정말 프로젝트를 분할하는 것이 더 낫다고 생각합니다. 하지만 이는 프로젝트의 규모와 작업하는 사람의 수에 따라 다릅니다.

더 큰 프로젝트의 경우 다음을 위한 프로젝트가 있습니다.

  • 데이터 액세스(모델)
  • 서비스
  • 프런트 엔드
  • 테스트

Rob Connery와 그의 매장 애플리케이션에서 모델을 얻었습니다.정말 잘 작동하는 것 같습니다.

mvc-점포

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