ASP.NET MVC 4를 사용하여 3 계층 응용 프로그램을 설계하고 있습니다. 다음 리소스를 참조로 사용했습니다.
나는 지금까지 다음과 같은 것을 가지고있다.
프리젠 테이션 레이어 (PL) (주 MVC 프로젝트 M 의 MVC는 데이터 액세스 레이어로 이동했다)
MyProjectName.Main
Views/
Controllers/
...
비즈니스 로직 계층 (BLL) :
MyProjectName.BLL
ViewModels/
ProjectServices/
...
데이터 액세스 계층 (DAL) :
MyProjectName.DAL
Models/
Repositories.EF/
Repositories.Dapper/
...
이제 PL은 BLL을 참조하고 BLL은 DAL을 참조합니다. 이 방법으로 하위 계층은 위의 계층에 의존하지 않습니다.
이 디자인에서 PL은 BLL의 서비스를 호출합니다. PL은 뷰 모델을 BLL로 전달할 수 있고 BLL은 뷰 모델을 PL로 다시 전달할 수 있습니다.
또한 BLL은 DAL 계층을 호출하고 DAL 계층은 모델을 BLL로 되돌릴 수 있습니다. BLL은 View Model을 빌드하고 PL로 되돌릴 수 있습니다.
지금 까지이 패턴은 저에게 효과적이었습니다. 그러나 일부 ViewModels에서 여러 엔터티에 조인이 필요한 문제가 발생했습니다. 일반 MVC 접근 방식에서는 컨트롤러에서 LINQ 쿼리를 사용하여을 수행 join
한 다음 을 수행했습니다 select new MyViewModel(){ ... }
. 그러나 이제는 DAL에서 ViewModel이 정의 된 위치 (BLL)에 액세스 할 수 없습니다.
즉, DAL에 가입하여 BLL에 반환 할 수 없습니다. 하나의 쿼리에서 조인 대신 DAL에서 별도의 쿼리를 수행해야하며 BLL은 그 결과를 사용하여 ViewModel을 작성합니다. 이것은 매우 불편하지만 DAL을 ViewModels에 노출시켜야한다고 생각하지 않습니다.
이 딜레마를 어떻게 해결할 수 있습니까? 감사.