2011-02-24 1 views
4

EF4, POCO Domain Objects 및 Repository < -> 서비스 계층을 사용하는 새 MVC 응용 프로그램을 작성했습니다.Entity Framework 4 POCO 및 AutoMapper

AutoMapper를 사용하여 EF4 클래스를 뷰 모델의 DTO에 매핑하는 방법에 대해 많은 이야기를합니다. 나는 이것이 단단히 묶인 EF4 클래스를 없애는 것이라고 생각했다. 그래서 내 질문은 POCO 클래스를 사용하고 있기 때문에 View 모델에서 POCO 클래스를 사용할 수 없습니까? 또는 AutoMapper가 여전히 필요합니까?

답변

13

인수는 "POCO 's"가 도메인 모델이고 View가 도메인 모델과 관련이 없어야한다는 것입니다.

데이터 유효성 검사, 데이터 주석을 원할 경우 POCO에 입력해야하지만 입력 유효성 검사 (이 필드는 필수 항목 등)는 실제로 도메인 관심사가 아닙니다. UI 관심사 - 따라서 Data Annotations 및 AutoMapper에 대한 ViewModels 사용

당연히 절단되지 않고 건조하지 않기 때문에 선호도가 높습니다.

또한 MVC/EF4/POCO/AutoMapper/Service Layer를 사용하고 절대 POCO에 바인딩하지 않습니다. 항상 View마다 ViewModel을 사용합니다.

  • 모든보기의는 뷰 모델
  • POCO의이
  • 의 ViewModel 년대 그들은이
  • 기본적인 입력 검증이 비즈니스/도메인 로직하지만 아무것도 :

    이렇게하면 일관성의 좋은 수준이 그런 다음 도메인/비즈니스 유효성 검사를 호출하는 POCO에 매핑됩니다.

** 편집 - com **

리포지토리가 IQueryable을 반환합니까? 그렇다면 컨텍스트를 어떻게 처리합니까? 리포지토리가 IDisposable을 구현하고 컨트롤러에 처리 할 수 ​​있습니까?

예 - 내 리포지토리는 IQueryable<T>입니다. 여기서 T는 집계 루트입니다. 내 리포지토리에 작업 단위 (IDisposable 구현)가 전달됩니다. Unit of Work는 EF4 컨텍스트의 래퍼입니다. StructureMap (DI 컨테이너)은 구성 요소의 수명 (UoW - 일명 컨텍스트)을 담당합니다. HTTP 요청마다 UoW를 새로 작성하고 완료되면 Dispose합니다. 내 "서비스"는 IQueryable 저장소에서 메소드를 호출하고 콜렉션을 반환합니다 (예 : 컨트롤러로 다시 전달되기 전에 쿼리가 구체화됩니다).

어디에서 매핑을합니까? 당신은 컨트롤러에서 그것을합니까?

귀하에게 제공합니다. 개인적으로, 나는 "Configure"와 같은 하나의 방법을 가진 정적 "부트 스트 래퍼"클래스를 생성 할 것이다. Application_Start 이벤트 (Global.asax)에서 이것을 한 번 호출하십시오. 이 기술은 here입니다.

행운을 빈다.

+0

@ RPM1984 - 설명해 주셔서 감사합니다. 나는 너에게 몇 가지 다른 q를 가지고있다. 1) 리포지토리가 IQueryable을 반환합니까? 2) 그렇다면 컨텍스트를 어떻게 처리합니까?리포지토리가 IDisposable을 구현하고 컨트롤러에 처리 할 수 ​​있습니까? 도와 주셔서 감사합니다 !! – Sam

+0

@ RPM1984 - 어디에서 매핑을합니까? 당신은 컨트롤러에서 그것을합니까? – Sam

+1

@Sam Striano - 내 편집 참조 – RPM1984