0

우리는 .net/C#에서 계층화 된 비즈니스 응용 프로그램을 설계하고 있으며 우리가 생각하는만큼 솔리드 원칙을 따르려고합니다. 테스트 가능성은 프로젝트에서 매우 중요하며이 목적을 위해 Moq를 사용하고 있습니다. moq를 사용하여 우리는 엔티티 프레임 워크 컨텍스트를 조롱합니다.제어 반전 및 비즈니스 계층에서의 데이터 계층 종속성 주입

테스트의 주요 목표는 기본 비즈니스 계층 (BL) 논리이므로 비즈니스 계층 클래스에는 사용할 DAL (데이터 액세스 계층) 컨텍스트가 삽입 될 수 있습니다. 아래 예를 참조하십시오. 데이터를로드하는 BL 클래스의 샘플 생성자입니다. 이 클래스는 액세스 설정 등에 대한 종속성을 주입합니다. 이제 BL 클래스에 삽입 할 수있는 다른 DAL 종속성도 있습니다. 이러한 객체는 서비스 계층 (WCF)에 구현되기 때문에 DAL 구성 요소를 주입 할 수있는 것은 싫다.

질문 : BL 클래스에 DAL 종속성을 주입해야합니까?

+0

비즈니스 계층에 SOLID를 적용하려는 경우 [this] (https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=91)를 확인하십시오. [this] (https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=92) 및 [this] (https://www.cuttingedge.it/blogs/steven/pivot/entry) .php? id = 95) 아티클은 응용 프로그램의 유지 관리 가능성과 유연성에서 엄청난 차이를 만들 수 있기 때문에 중요합니다. – Steven

+0

은 이것들을 살펴볼 것입니다, 고마워요. 내가 물었던 질문에 대해 어떻게 생각하니? – JohanLarsson

답변

0

BL은 추상화에 따라 다르므로 종속성 반전 원칙 (DIP)을 준수합니다. 비즈니스 계층이 DAL과 통신해야한다는 것은 명백합니다. 이 문제를 해결할 방법은 없습니다.하지만 하위 수준의 구성 요소가 아닌 추상화에 의존하고 있기 때문에 괜찮습니다.

+0

좋아, DIP 메달을 위해 더 일하기 위해, 어떤 이유로 든 "KonstruktEntities"클래스를 포장해야 할 이유가 있습니까? 그것은 IObjectContextAdapter 인 DbContext를 상속받습니다. – JohanLarsson

+0

한 가지 문제는 내 서비스 계층의 WCF funktion에서 DAL 종속성을 직접 주입해야하는 경우입니다. 서비스 계층에서 DAL 개체를 인스턴스화해서는 안되는 것처럼 느껴지 겠지만 어쩌면 끝내야 할 것 같습니까?! – JohanLarsson

+0

@JohanLarsson : 모든 구성 요소는 [Composition Root] (http://blog.ploeh.dk/2011/07/28/CompositionRoot/)에 인스턴스화되어야합니다. 'DbContext'에 의존하는 코드가 항상 DIP에 위배됩니다. 그러나 이것이 항상 방지 할 수는 없습니다. 어딘가에 데이터베이스를 쿼리해야합니다. – Steven