2013-02-01 6 views
0

다음 상황이 있습니다. 우리는 다중 레이어 응용 프로그램을 사용하고 있으므로 각 레이어마다 다른 어셈블리를 만들었습니다. Top, Middle 및 Base로 불러올 수 있습니다. 그들은 다음과 같이 의존합니다 :.net 어셈블리 종속성 체인

상단 -> 중간 ->베이스. 왜냐하면 상단에서 중간 및 중간의 덩어리를 사용하기 때문입니다.

이제 우리는 Base에서 아무것도 사용하지 않는 Middle의 일부 클래스 만 필요로하는 보조 Application Top2를 갖게됩니다.

Top2 배포시 Base가 포함되지 않는 방법이 있습니까?

언제 컴플 리언하려 할 때, VS는 어셈블리베이스에 대한 참조가 필요하다는 것을 알려줍니다. "중동은"그 부츠 조금 큰지고처럼 토마스

+1

물론 중간 부분을 두 부분으로 나누십시오. – KingCronus

+0

Middle-1과 Middle-2는 Base와 Middle-2를 사용하지만 Middle-2는 Base를 사용하지 않는 Middle-1과 Middle-2를 의미합니까? – Thomas

+0

예. 나는 대답을 자세히 설명 할 것이다. – KingCronus

답변

1

최저 는 소리.

어셈블리는 필요없는 것을 참조하면 안됩니다. 따라서 상황에 따라 어셈블리를 분할하는 것이 좋습니다.

현재

Application One -> "Middle.dll" -> "Base.dll" 

귀하의 제안

Application One -> "Middle.dll" -> "Base.dll" 

Application Two -> "Middle.dll" -> "(Redundant) Base.dll" 

이 정말 일반적으로 사용되는 오브젝트를 본질적으로 unneccesserily 비즈니스 로직에 집중 될 때까지 오는 일반적인 문제입니다. 즉, 애플리케이션에 유용한 Middle.dll의 유틸리티 클래스가있을 수 있지만 실제로는 필요하지는 않습니다. 당신은 별도의 유틸리티 dll로 더 나을 수도 있습니다.

제안

Application One -> "Middle1.dll" -> "Base.dll" 
       -> "Middle2.dll" 

Application Two -> "Middle2.dll" 

현재 Middle.dll에 존재 Base.dll를 사용하는 데 필요한 모든 기능은 Middle1.dll로 이동해야합니다. 그런 식으로 의존하지 않는 코드 만 사용해야하는 경우에는 Middle2.dll을 참조 할 수 있습니다.

코드베이스에 따라 큰 리펙터가 될 수도 있지만 나중에 평가 해 주시면 감사하겠습니다. 이

  • 테스트에

    장점이 개선 될 것입니다.

  • 이 두 응용 프로그램을 완전히 분리해야하는 경우 리팩토링을 줄여야합니다.당신은 어떤 이유로 우려의
  • 클리너 단락 지을 "Middle1"를 변경해야하는 경우 두 응용 프로그램을 깨는
  • 적은 기회
  • 현재 프로그램에 필요하지 않음 뭉침 코드
  • 이 없다 같은 어떤 컴파일러 문제 없다 그들은 그 차이를 알 수 없습니다 응용 프로그램에 있도록 모든 프로그램
  • 더 작고 관리 어셈블리는
  • 개선 인텔리
  • Middle1 및 Middle2는 같은 네임 스페이스를 공유 할 수 있습니다.

참고 : 분명히 내가 Middle1 및 Middle2라고 불러야한다고 제안하는 것은 아닙니다. 그러나 당신은 아이디어를 얻습니다.

+0

덕분에 다행히도 우리 프로젝트는 꽤 어려워서 리팩토링은 일이었습니다. 이제 모든게 괜찮지 않아. 솔루션은 하나의 어셈블리에 외부 참조가없는 모든 데이터 클래스를 배치하는 것이 었습니다. – Thomas