2012-01-30 3 views
4

DDD 원칙을 사용하여 새 프로젝트의 인프라를 만들었습니다. 나는 그 영역에 공장/수화기를 공급하는 저장소를 가지고있다. 응용 프로그램 계층은 요청시 다양한 도메인 모델을보고/편집 할 수있는 평면으로 기능합니다.도메인 객체 모범 사례 목록 반환

편집 모델 매핑 유창 검증을 사용하여의 serice에 의해 검증되고, 다시 도메인 모델에 병합됩니다. 오류가 기록되고 오류 서비스를 통해 사용자에게 다시보고됩니다.

이 모든 것이 완벽하게 작동합니다. 이제는 이러한 도메인 객체의 목록을 만드는 것이 가장 좋습니다.

몇 가지 옵션이 마음에 와서 :

1) 목록에 다음을 평평하게 한 후 전체 도메인 모델을 수화물합니다. 도메인 모델은 IEnumerable 목록으로 캐시 될 수 있습니다. 그런 다음이 컬렉션은 평평 해지고 요청한보기로 푸시됩니다.

2) 도메인 모델의 경량 표현 인 "투사"개체를 만듭니다. 이것은 수화가 거의 필요 없으며, 도메인 레벨을 통해 끌어와 viewModel에 매핑하여 표시 할 수 있습니다.

3) "바이 패스"도메인과는 IEnumerable을 생성 응용 계층에서 호출 서비스가있다. 이렇게하면 도메인을 깨끗하게 유지할 수 있습니다.

나는 솔루션 1 도메인 항목의 목록을 표시 위해서 무거운 될 것이라고 우려하고있다. 도메인의 검색 가능한 특성으로 인해 캐치 될 것이지만 캐시가 훨씬 잘 수행 할 수있는 보장이 없습니다.

최상의 옵션이 무엇인지에 대한 조언을 주시면 감사하겠습니다.

+2

돈에 대한 생각이 맞지만 불행히도 확실한 대답은 없습니다. 단순성 및 코드 유지 관리가 목표라면 옵션 1을 선택하십시오. 목표가 성능이라면 옵션 2로 가십시오. 필자는 진정으로 필요한 경우 옵션 3 만 사용 하겠지만 옵션 2와 함께 속도를 크게 향상시킬 수 있습니다. –

+0

Yoda 인용 - "쓰기와 별도의 읽기는 수행해야하는 작업입니다 ! " –

+0

나는 ORM이 EF 나 NHibernate와 같이 # 2 방법을 선호하는데, 프로젝션이 실제로는 더 슬림 한 SQL을 생성 할 수 있고 데이터를 줄이는 것은 전선을 가로 질러 진행될 수 있습니다. –

답변

0

나는 깨끗한이 켜지지 인 도메인 모델을 유지 솔루션 (2)을 선호한다. CQS으로

은 (명령 쿼리로 구분), 우리는 효과적이고 가벼운 쿼리 architecuture을 implemente 수 있습니다.