2010-12-14 4 views
0

3 개의 프로젝트로 구성된 MVC 웹 응용 프로그램을 빌드하고 있습니다. 하나는 GUI 용이고 다른 하나는 BusinessLogic 용이고 다른 하나는 데이터 액세스 용입니다.ASP.NET MVC - GUI의 DAL에서 종속성 제거

내 데이터 액세스를 위해 EF가 생성 한 파일이 있으므로 "Customer"라는 생성 된 클래스가 있습니다. 이 클래스에 대한 유효성 검사 속성을 만들려면 MetaDataType을 만들어야합니다 (동일한 네임 스페이스에서 수행해야하므로 DAL 계층에서 바인딩해야합니다). 이렇게하면 GUI에서 데이터 액세스 계층을 참조합니다 이제는 내 GUI가 내 DAL 및 BL 레이어를 모두 참조하기 때문에 프로젝트를 분할하는 전체 아이디어를 망칠 수 있습니다. 어쨌든 GUI와 DAL 레이어를 분리하여 보관할 수 있습니까? 그렇지만 [필수]와 같은 유효성 검사 속성을 사용하는 것은 여전히 ​​가능합니까?

미리 감사드립니다.

답변

2

.NET 4 (EF 2)를 사용하는 경우 프로젝트간에 공유 할 수있는 별도의 클래스 라이브러리에서 POCO 항목을 생성 할 수 있습니다. DAL에 의존하지 않아도됩니다. 내 이전 답변을 참조하십시오 :

ASP.Net Layered app - Share Entity Data Model amongst layers

특히 별도의 프로젝트로 이동하는 방법을 포함하여 3 POCO 템플릿 : http://blogs.msdn.com/adonet/pages/feature-ctp-walkthrough-poco-templates-for-the-entity-framework.aspx

+0

제 대답에 대해 논평했듯이, 이것은 실용적 일 수 있습니다. 그러나 UI가 도메인 모델과 섞여 있기 때문에 영속성의 무지의 개념에 완전히 위배됩니다. 그러나 아무도 DDD 프로그래머가되어야합니다. – rsenna

+0

@rsenna : 내가 잘못 본 것이 아니라면, 당신은 여전히 ​​끈기를 알지 못한다. 그것이 POCO 사용의 요점입니다. 데이터베이스 호출을 처리하는 저장소 패턴과 같은 다른 추상화가있는 한 전체 데이터베이스 백엔드를 대체하여 POCO 엔티티를 유지 보수 할 수 있습니다. 물론, POCO 엔티티는 더 이상 EF에 의해 생성되지 않지만 EF에 대한 의존성은 없으므로 중요하지 않습니다. –

+0

내가 보는 문제는 기술적 인 것이 아니라 건축적인 것입니다. DAL과 UI에서 ** 같은 ** 엔티티를 공유하고 있습니다. 따라서 프레젠테이션은 지속성에 사용되는 것과 동일한 엔티티에 연결됩니다. 그리고 나는 이것이 "무지"라고 불릴 수 있다고 생각하지 않습니다 ...그러나 다시 한번, 나는 이전에 그렇게 해왔고, 단순한 시스템이나 CRUD 지향적 인 것을 위해 다시 할 것입니다. 그 외에도 UI 용 뷰 모델과 비즈니스 및 데이터 액세스 레이어 용 도메인 엔터티를 사용합니다. – rsenna

2

이것이 바로 ViewModels입니다. 하지만 그것은 뷰 컨트롤러 통신을위한 새로운 DTO 세트를 갖게된다는 것을 의미합니다. 실제 도메인 모델에 대해 아무 것도 모를 정도로 IMHO가 좋습니다.

귀하의 의견을 모델과 소통시키는 모든 다른 방법에 대해서는 this을 참조하십시오.

+0

들은 "ViewModels"- 그들이에 "포장"내 BL 층과에 전달해야한다 EF가 수업을 생성 했습니까? – ebb

+0

아니요, 뷰 모델은 뷰와 컨트롤러에서만 볼 수 있습니다. **는 ** BL 또는 DAL의 ** 일부가 아닙니다. ** 사용자 **가 보는 것처럼 데이터를 데이터로 생각하십시오. 이는 동일한 데이터가 도메인 모델에 유지되는 방식과는 상당히 다를 수 있습니다. – rsenna

+0

내 뷰 모델 중 하나를 BL로 전달하려면 어떻게해야합니까? 또는 어쩌면 당신은 일반적으로 매개 변수로 클래스를 사용하지 않습니까? – ebb