2010-04-20 2 views
5

저는 항상 Visual Studio (2008)의 프로젝트가 거대한 괴물이되어 모든 것이 일반적으로 웹 응용 프로그램 프로젝트에 던져지는 문제에 봉착합니다. 오픈 소스 자료를 확인하는 것에서는 솔루션 내에서 여러 프로젝트를 수행하는 경향이 있으며 각 프로젝트마다 책임이 있습니다.Visual Studio에서 큰 프로젝트를 리팩토링하는 방법

누군가 리팩토링하는 방법에 대한 조언이 있습니까? 웹 프로젝트의 일부분과 별도의 프로젝트에는 무엇이 있어야합니까? 주제에 대한 참고 자료를 가르쳐 주시겠습니까? 아니면 시간이지나면서 익숙해 진 것입니까?

+3

먼저 Resharper가 필요합니다 ... – cletus

답변

4

프로젝트를 네임 스페이스에 정리하십시오. 네임 스페이스는 너무 크지 않아 너무 크지 않아야합니다. 각 네임 스페이스를 공용 "인터페이스"(즉 공용 클래스 집합)로 만들고 다른 네임 스페이스의 네임 스페이스에 대한 내부 구현 세부 정보에 액세스하지 않습니다. 다른 네임 스페이스는 대개 응용 프로그램의 다른 부분을 처리합니다 (예 : UI, 비즈니스 로직, 도우미 기능과 관련된 네임 스페이스를 갖게 될 것이다. Framework Design Guidelines에는 네임 스페이스를 디자인하는 좋은 방법이있다.

프로젝트가 너무 커질 것으로 생각되면 명확하게 서로 관련이있는 네임 스페이스 집합을 식별하여 프로젝트를 별도로 이동하십시오. 다른 네임 스페이스는 이미 이동 된 네임 스페이스의 공용 인터페이스 만 사용하기 때문에 네임 스페이스를 새 프로젝트로 리팩토링하는 것은 파일 이동 작업에 지나지 않습니다.

+0

그건 의미가 있습니다. 특정 웹 프로젝트 파일과 별도로 클래스 파일을 프로젝트에 유지하려고합니까? 또는 (네임 스페이스를 사용하는 동안) 그들과 어울리게 하시겠습니까? 네임 스페이스에 대한 모범 사례가 있습니까? 미안,이게 정말 기본적인 것임을 알지만, 나는 이것을 몇 년 동안 해왔고, 마침내 좌절의 절충점에 도달했습니다. – Aaron

+0

FDG 책은 안내서입니다. 의미있는 네임 스페이스를 만들고 나면 크기를 정하고 거대한 프로젝트를 몇 개의 작은 것들로 나누십시오. ReSharper는 좋지만 NDepend가 훨씬 유용하다는 데 동의합니다. http://codebetter.com/blogs/patricksmacchia/archive/2008/09/23/getting-rid-of-spaghetti-code-in-the-real-world.aspx –

2

아래에서 위로 (프레임 워크 외의 다른 것에 의존하지 않는 가장 간단한 클래스)부터 시작하여 종속성을 기능 단위로 분리 할 수 ​​있는지 확인하십시오. 예를 들어 서로를 참조하지만 결코 UI 클래스를 참조하지 않는 데이터 또는 비즈니스 로직 클래스가있는 경우 다른 프로젝트로 분할 할 수있는 후보자가 있습니다. 명확한 분리 점을 찾을 수 없다면 설계상의 문제가있어 리팩터링을해야 할 것입니다.

또한 네임 스페이스를 사용하는 것이 좋습니다. 프로젝트 내에서도 자연스럽게 클래스를 그룹화하는 방식으로 종속성을 격리하거나 최소화 할 수 있습니다. 이 폴더를 같은 폴더에 넣으면이 그룹이 기능적 유닛으로 강화되며 앞으로 코드를 유지해야하는 가난한 사람을 도울 수 있습니다. 저를 믿으십시오, 나는 한 번 이상, 그 가난한 사람이 저 였기 때문에 그 가난한 사람에 대해 생각하려고합니다. 그가 코드를 쓴 사람이 저와 썼다는 약간의 위안이있었습니다.

1

guidance given by the Sharp Architecture project을 확인하십시오. 그 ASP.Net MVC하지만 ASP.NET과 다른 프로젝트에도 똑같은 원리가 적용됩니다. 이 물건들을 모으는 사람들은 스마트입니다. 나는 일반적으로 충고를 사용하며 좋은 이유가있을 때만 이탈합니다. 그들이 제안

기본 계층화 (잔류 포함) 외부 서비스에 액세스하는 도메인 객체와 인터페이스에 대한

  • 핵심 프로젝트입니다.
  • 코어 데이터에 의존
  • 로깅 또는 로그인 확인과 같은 애플리케이션 레벨 문제를 지원하기위한 응용 서비스 프로젝트 지속성
  • 액세스하는 모든 인터페이스를 구현 프로젝트. 이것은 코어만을 참조합니다.
  • 보기 만 보유하는 프로젝트.
  • 컨트롤러 부트 스트래핑 코드와 웹 레이어, 도메인을 조정하는 코드가 들어있는 프로젝트입니다. 이는 기본적으로

    • 프로젝트의 최소 금액을 포함해야합니다 귀하의 웹폼과 codebehinds을 보유하고 내가 MVP 패턴을 사용하는 같은 asp.net 응용 프로그램의 경우

  • 을 의미 발표자로 리디렉션하는 데 필요한 코드. 아마도 부트 스트랩 코드를 거기에 넣어야 할 것입니다. 이것은 ASP.Net 제한 때문에 발생하며 코드 비하인드에서 해당 내용을 참조하면 안됩니다.
  • 컨트롤러 프로젝트가 발표자 프로젝트로 대체되었습니다. 여기서 가장 큰 차이점은 어떻게 든 발표자가 WebForm에 의해 인스턴스화되어야한다는 것입니다.

ASP.NET MVP project을 확인해 볼 수도 있습니다.

관련 문제