0

아래 프로젝트 구조를 참조하십시오.종속성이없는 MVC 프로젝트 구조를 설정하는 올바른 방법

내 솔루션에는 다음이 포함
TestProj.WebUI MVC5을해서 Ninject는 IOC의에 대한 BLL

TestProj.WebUI.Tests

TestProj.BLL를 주입은 - 인터페이스 폴더를 포함하는 ICustomerProvider.cs 및 CustomerProvider.cs 및 UserProvider.cs와 같은 클래스를 보유하는 CRM, HR과 같은 폴더를 보유합니다.

TestProj.DAL - 일반적인 클래스

내가 있는지 여부를 알아낼 수 없습니다 - EF6 DbFirst도 ICustomerRepository.cs

TestProj.Common 보유 저장소 CustomerRepository.cs을 보유하고 폴더 및 인터페이스 폴더가 포함 내 BLL에 종속성 삽입을 추가하여 DAL을 주입해야합니다.

답변

1

dal에서 객체를 조롱 할 수없는 경우 bll을 테스트하기가 어려울 수 있으므로 인터페이스 및 di를 사용하면 유용 할 것입니다.

느슨하게 연결하면 다른 달에 대한 달을 교체 할 수도 있습니다. dal 인터페이스는 bll에있을 수 있습니다.

일반적으로 모든 종속성이 사용자의 bll로 전달되어야하며 다른 방법으로는 전달되지 않아야합니다. bll은 어떤 것에 의존해서는 안됩니다.

모델에 대해서는 일반적으로 dal 및 bll과 함께 별도의 클래스 라이브러리에이 파일이 있으며 ui 프로젝트의 모델 폴더 만 사용하십시오.

유용 할 수있는 개념은 당신의 bll을위한 외장 층을 갖는 것입니다. 이것은 사용자가 당신의 bll의 복잡한 세부 사항을 알 필요가 없도록합니다. 그냥 컨트롤러에서 정면을 부르면됩니다.

내 자신의 프로젝트에는 예를 들어 단지 데이터베이스 액세스 인 경우 blal facade 레이어가 있거나 모든 로직을 수행하는 경우 bll 개체에 해당합니다. 나는 특히 bll 객체에 대해 100 % 테스트 커버리지를 목표로하고 있으며 프로젝트 요구 사항에 따라 항상 다른 모든 것을 tdd하지는 않습니다.

ef를 사용하는 경우 더 논란의 여지가있는 또 다른 각도는 IQueryable 개체가 전파되는 것을 얼마나 멀리 허용하는지입니다. 대개 큰 프로젝트에서는 내 bll을 ef에 종속시키지 않기 때문에 일반적으로이 파일을 dal 레이어에만 유지합니다.

Microsoft 응용 프로그램 아키텍처 가이드 2.0이 유용 할 때 발견되었습니다. 조금 오래되었지만 여전히 적절합니다. http://msdn.microsoft.com/en-gb/library/ff650706.aspx

마지막으로 개인적으로 bll과 dal은 두문자어로 몇 년 전에 작성했던 리치 클라이언트 소프트웨어를 생각 나게하기 때문에 bll 계층 로직, facade, 모델 및 이름은 데이터 레이어의 dal 대신 데이터와 유사합니다.

솔루션을 구조화하는 데는 여러 가지 방법이 있지만 비어있는 MVC 프로젝트를 기반으로하는 VS2013 테스트 솔루션이 있습니다. 참조 설정은 의미를 설명합니다.이 도움이

My Test VS2013 Solution

희망.

+0

이렇게 설명 해주셔서 감사드립니다. 나는 단지 TDD에 들어가기 때문에 건물에있는이 새 템플릿 프로젝트에서 모든 것이 제대로 구성되었는지 확인하려고합니다. 어떻게 든이 같은 구조의 실제 예제 프로젝트를 얻으려는 모든 일을 할 것입니다. 나는 항상 그것을 읽고 그것이 의미가 있지만 그때 내가 그것을 구현하기 위해 갈 때 많은 질문이 발생합니다. 거의 모든 튜토리얼/예제가 코드를 기반으로하므로 DbFirst를 사용할 때 너무 혼란스러워합니다. 그렇다면 결국 모든 것이 결국 컨트롤러에서 사용되는 뷰 모델로 연결되는 방법을 얻지 못합니다. 나는 진지하게 알아 내기 위해 돈을 지불 할 것이다. – JTunney

+0

당신이 말하고있는 것에 따라, 나는 단지 EDMX를위한 Model 레이어를 가질 것이고, 그 다음 저장소 클래스를 가진 데이터 레이어, 그리고 나의 데이터 인터페이스, 서비스 인터페이스 및 서비스 클래스를 가진 로직 레이어, 그리고 facade 레이어를 가질 것입니다 (실제로 여기에 실제로 들어가는 것에 대해 혼란 스러울 정도입니다. 논리 인터페이스와 facade 클래스를 가정하고 있습니다) 그리고 마침내 컨트롤러가 외관 레이어에서 단순히 호출 할 수있는 UI 레이어가됩니다. – JTunney

+0

먼저 mvc 프로젝트를 망치지 마십시오. 우리가 말하는 라인을 따라 추가 클래스 라이브러리가있는 프로젝트를 추가하십시오. 두 번째로 edmx는 비지니스 로직 레이어가 아닌 데이터 레이어에 들어간다. 왜냐하면 bll은 내 관점에서 ef와 결합되어서는 안되기 때문이다. 저장소 (즉, 데이터 계층)의 모델과 인터페이스는 bll로 갈 수 있고 데이터 계층은이 구현을 제공합니다. ef를 사용한다면 bll에서 모델을위한 인터페이스를 가지고 있습니까? 나는 결코 그렇게하지 않았다. 중요한 질문은 당신이 당신의 bll에 침투하는 것을 염두에 두는 것입니다. 나는 더 큰 프로젝트에는 참여하지 않는다. 몇 가지 예를 찾으려고합니다. –