문제

이론적으로 계층 아키텍처에서는 동일한 레이어에 여러 모듈을 가질 수 있습니다. 이 모듈은 서로를 교차 할 수 있습니까? 기술적으로는 가능합니다. .NET 사용?

도움이 되었습니까?

해결책

그렇게 할 수 있습니다. 모듈간에 주기적 종속성을 도입하지 않도록주의하십시오. 일반적으로 주어진 층의 모듈은 동일한 레이어 또는 그 아래의 레이어에서 다른 모듈에만 의존해야합니다. 모듈은 그 위의 레이어를 인식해서는 안됩니다.

이것을 더욱 엄격하게 만들고 싶다면 현재 레이어 바로 아래의 동일 또는 다른 모듈에서 다른 모듈에 대한 종속성을 제한 할 수도 있습니다.

노출 된 인터페이스를 최소로 유지하고 예를 들어 공개 인터페이스, 값 객체 및 예외 만 노출하는 것은 항상 좋은 생각입니다. 언어의 액세스 제어 기능 (예 : 개인/패키지/공개)을 사용하여 모듈 내부의 가시성이 다른 계층으로 유출되는 것을 제한 할 수 있습니다.

다른 팁

기술적으로 .NET에서 원하는 방향으로 교차 참조 할 수 있습니다 (DAL이 UI 구성 요소를 참조하기위한 기술적 제한은 없지만 좋은 생각이 아닐 수도 있음). 동일한 계층 내에서 참조 모듈에 문제가 없습니다.

그러나 층은 다른 모양과 크기로 제공되므로 "레이어"라는 단어를 조금보아야합니다. 종종 "레이어"라는 단어를 사용할 때 우리는 데이터 액세스 계층 또는 프리젠 테이션 계층을 생각하며 일반적으로 레이어가 아래쪽으로 보이지만 Upwars는 보이지 않습니다.

각 층 내에서, 다른 모듈은 종종 논리적으로 레이어로 배열되도록합니다. 동일한 규칙이 여기에 적용됩니다. 모듈은 아래로 보지만 위로 올라갈 수는 없습니다. 이를 염두에두고 동일한 (외부) 층 내에서 모듈을 참조하는 데 다소 안전합니다.

직접 또는 간접적으로 서로를 참조하는 두 개의 모듈이 없습니다. A와 B 둘 다 서로 기능이 필요하다는 것을 알게되면 (A와 B가 동일한 레벨에 있음을 나타냅니다) 코드를 리팩터링하고 아마도 A와 B 아래에있는 새로운 모듈 C를 소개해야 할 것입니다. 그들 중 사용할 수 있습니다.

또한 모듈을 최대한 분리하여 모듈을 유지하십시오. 그들이 서로에 대해 알 수 없을수록 좋습니다.

Pavel이 말했듯이 주기적 종속성에주의하십시오. 주기적 의존성없이 절대적으로 살 수 없다면 (크로스 참조라고 부르는), 클래스는 동일한 '층'뿐만 아니라 동일한 어셈블리에서도 있어야합니다.

즉, 교차 참조 할 이유가 없어야합니다. (Pavel과 같이) 모듈은 그 아래의 층에만 의존해야 할뿐만 아니라 모든 경우에 일방 통행 의존성이 존재해야한다는 것입니다.

예를 들어 도메인 모델과 같은 경우이 규칙에는 몇 가지 논리적 예외가 있습니다. 고객은 여러 주문이 있다고 말합니다. 이 경우 고객의 주문 목록과 각 주문의 고객에 대한 참조를 갖는 것이 유용 할 수 있습니다. 서비스 등과 같은 기능 단위의 관점에서는 한 가지 방법의 종속성 만 있어야합니다.

이 문제를 해결하는 한 가지 방법은 Windsor, Autofac, Spring.net 등을 통한 제어의 반전을 사용하는 것입니다. 어셈블리에서 인터페이스를 정의 할 수 있으며 해당 인터페이스의 구체적인 구현을 소비하는 다른 객체를 정의 할 수 있습니다. 다른 라이브러리에는 실제 구현이 포함될 수 있습니다 (즉, 어셈블리가 첫 번째 어셈블리를 참조해야 함). 이 경우 IOC 컨테이너는 구현을 가져옵니다.

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