2009-12-02 1 views
1

나는 MVC 저장소를 올바르게 조립하는 것에 매우 가깝지만 단지 프린지에서 떨어져 있다고 생각한다. 저장소가있는 MVC 프로젝트를 만들었지 만 데이터를 성공적으로 반환하고 있지만 정확히 DDD와 관련이있는 것은 아닙니다. 엄격한 DDD 어셈블리의 관점에서 내가 잘못된 부분을 말해주십시오. 나는 주제가 너무 넓 으면, 책 제안은 괜찮을 것이라고 생각한다. 나는 내 질문에 충분히 구체적이기를 바란다.MS MVC에서 Poco 클래스는 Models 네임 스페이스에 정의되지만 저장소 클래스 외부에 정의됩니까?

이것은 하나의 질문 이었지만 명확하게 구분하기 위해 다음과 같이 설명했습니다. MyStore.Models라는 모든 저장소 클래스에 대해 단일 네임 스페이스를 만드십니까? 모델 네임 스페이스 내에서 Product와 같은 각 엔티티에 대한 리포지토리 클래스를 만드시겠습니까? Pocos를 Models 네임 스페이스의 자체 클래스에 넣지 만 Repository 클래스 자체에 포함시키지 않습니까?

현재 Pocos를 사용하여 Linq 문에서 엔티티를 잘라내어 IQueryable 래퍼에서 그룹을 반환합니다. 여기서 IQueryable을 제거하고 어떤 종류의 Lazy load로 바꾸겠습니까? 어떻게 원래의 Linq SQL에 의존하지 않고 게으른로드합니까?

public IQueryable<Product> GetProducts(...) { 
return (from p in db.Products 
     where ... 
     select new myProductPoco { // Cut out a Poco from Linq 
      ID = p.ID, 
      Name = p.Name, 
      ... 
     }); 
} 

그런 다음 상속 페이지 지시문에서 MVC 뷰에서 다음을 참조 :

System.Web.Mvc.ViewPage<IQueryable<MyStore.Models.Product>> 

그러나, 중첩 된 제네릭 잘못 보인다. 나는 이것이 re-factor를 필요로한다고 가정한다. 엔티티에 대한 참조를 포함하는 View Model 클래스는 어디에 정의합니까? 컨트롤러 클래스 (중첩 클래스) 내에서?

답변

2

도서 제안으로 Eric Evan의 Domain-Driven Design 및 아마도 Martin Fowler의 Refactoring을 사용해보십시오.

+0

내가 알고있는 것처럼, 당신이 당신의 도메인 모델 클래스 저장소에서 별도의 정의해야합니다. 더욱이 ViewModel 클래스를 별도로 정의해야합니다 (뷰 모델 클래스는 도메인 모델 클래스의 하위 집합이므로 클라이언트에 불필요한 데이터를 보내지는 않습니다.) –

+0

글쎄, 내 첫 번째 주석은 실제로 더 많이 알고 있으므로 실제로 부정확합니다. 도메인 모델을 반영하는 ViewModel 클래스를 만들지 않고, 기존 도메인 모델에서 필요한 필드 만 채우기 만하면됩니다. 꽤 미쳤어. 관계에 IList를 사용하는 집계 루트에 대해서는 아직 확실하지 않습니다. 이것들은 데이터베이스에서 대량으로 대량로드하는 방법 인 것 같습니다. –

1

또한 Domain Driven Design Quickly InfoQ에서 제작되었습니다. 무료로 다운로드하거나 30 달러를드립니다.

"도메인 기반 디자인 신속히, InfoQ.com에 의해 생산 했다 편집기를 관리하기로 Marinescu 아벨 아브람에 의해 플로이드 주로 을 요약. 에릭 에반스 특별 덕분에 그의 지원 블라디미르 Gitlevich와 댄을 위해 Bergh Johnsson의 상세한 리뷰 이 책의 목적은 을 도메인 구동의 소개로 사용하는 것입니다. 가능한 한 많은 손으로 디자인하는 것이 주류가되도록 하십시오. " - InfoQ