2009-08-27 2 views
5

저는 도메인 기반 디자인에 대한 현재의 이해를 사용하여 새 응용 프로그램을 작성했습니다. 지금까지 데이터베이스에서 가져 오거나 데이터베이스에서 검색 할 저장소와 도메인에있는 엔티티를 나타내는 클래스가 있습니다.도메인 기반 디자인 : 복잡한 데이터 목록을 검색하는 방법

내가 겪고있는 문제는 UI에서 목록의 항목이 내 도메인의 항목에 직접 매핑되지 않는 몇 가지 목록을 표시해야한다는 것입니다. 목록 중 일부는 특정 엔티티에 대해 상당히 열정적 인로드를 수행하여 작성할 수 있지만 다른 데이터는 기본적으로 검색시 합성되며 엔티티의 일부가 아닙니다. 희망적으로 문제를보다 명확하게 설명 할 수있는 예제를 제공하겠습니다.

내 도메인에서 나는 평가 (답변 할 일련의 질문)와 응답 (각 사용자가 평가에 제공 한 답변)을 평가에 제공합니다. 나는 또한 행동을 취했다. 각 조치는 응답 (제출, 승인, 거부 등)으로 수행 된 조치를 나타냅니다. 나는 또한 사용자가있다.

표시해야하는 데이터 목록 중 하나는 응답 및 평가 (응답되지 않은)를 포함하며, 각 줄에는 현재 응답으로 작업하고있는 사용자에 대한 정보가 포함됩니다 (이는 응답에 취해진 행동을보고 검색 시간). 각 광고 항목에는 지금까지 응답에서 취한 조치 인 0 개 이상의 하위 항목도 포함됩니다.

지금 당장은 도메인 엔티티로이 전체 데이터 세트를 표시 할 수있는 방법이 없습니다. 내 첫 번째 반응은 데이터베이스에서 데이터 테이블을 검색하고 내 도메인 엔티티를 우회하는 것입니다. 하지만 도메인 객체로 작업하고 객체 자체에 구운 다른 엔티티 간의 관계를 유지하는 데 많은 가치가 있음을 알 수 있습니다. 그래서 내 다음 아이디어는이 목록을 지원하기 위해 내 도메인 엔티티를 수정하는 것이지만이 엔트리 시나리오를 지원하기 위해 내 엔티티에 이상한 속성을 추가하는 것과 둘 중 하나만 수행하면 성능이 저하 될 수 있다는 우려가 있습니다. 내 애플 리케이션의 몇 군데에만 그 데이터가 필요할 때 개체.

답변

2

이 항목을 엔티티에 넣지 말고 서비스 (도메인 기반 디자인 용어로)을 제공하여 요청시이 데이터를 수집하고 제시하는 것이 좋습니다. 보기로. 이렇게하면 엔티티를 거친 방식으로 재 작업하지 않아도됩니다.

현재 문제는이 전체 데이터 집합을 내 도메인 엔티티와 함께 ​​표현할 수있는 방법이 없다는 것입니다.

여기 느낌이 좋지 않은 디자인 마찰은 좋은 것입니다. 그것은 일이 서로 잘 어울리지 않는다는 단서입니다.

+0

좋아, 이제 서비스에 대해 읽고 있습니다. 서비스에서 데이터를보기로 표시한다고 말하면보기는 무엇입니까? 이 목적을 위해 정의 된 클래스입니까? 도메인 엔터티로 구성되어 있습니까? –

+1

MVC 관점에서보기를 사용하고 있습니다. 즉, 작업을 표시하는 것입니다. 실제 관련 데이터는 서비스에 의해 집계되며,보기가 전달되어 귀하의 경우에는 귀하가 언급 한 "데이터 목록"이 표시됩니다.서비스는보기에 전달하기 전에 별도의 클래스 (특히 많은 뷰가 동일한 데이터를 사용하는 경우)에서 랩핑하도록 결정할 수 있지만 이는 반드시 필요한 것은 아닙니다. –

2

귀하의 도메인 모델에 문제가 있음을 (이와 같은 어려움으로 인해) 확인했습니다. 각 목록 상자에 표시하려는 추상화는 도메인 모델이나 "유비쿼터스 언어"로 잘 표현되지 않습니다. 무엇인지 결정하고, 이름을 정하고, 리파지토리에 코드를 추가하여 엔티티 또는 값 객체가되는지 여부에 관계없이 이러한 객체의 목록을 생성하십시오.

+1

실제로 나는이 문제를 오해하고 있을지도 모르지만 초기 엔 도메인 엔티티가 추가 속성이 필요하다는 것입니다. 즉, 응답 엔터티는 응답에 대해 취해진 동작을 나타내는 Actions (또는 ActionHistory) 속성을 가져야합니다. 지금까지." –

+0

내가 가진 문제를 이해하는 것처럼 들리 네. 그 추가 속성을 추가하는 것을 고려 중입니다. 솔직히 저의 관심사 중 일부는 실제로 특정 시간대에 필요한 것보다 많은 양의 데이터를로드하는 것과 관련이 있습니다. 액션은 꽤 솔직하고 문제가되지 않지만 내 사용자 엔티티는 매우 복잡하며 실제로 필요한 모든 사용자 ID와 이름 만 있으면 전체 사용자를로드하는 데 많은 추가 작업이 필요합니다. 하지만 엔티티를 부분적으로로드하는 것은 나에게 정말 해커처럼 보입니다. –

+1

성능/최적화 문제라면 John Feminella의 대답 (이를 처리 할 서비스 메소드를 작성하는 것)이 분명 적절할 것입니다. 그런데 많은 OR/M 도구를 사용하면 이러한 속성을 느리게로드 할 수 있습니다. 물론 이러한 속성 중 하나를 사용하지 않거나 고유 한 데이터 액세스 계층/저장소를 사용하지 않는 경우에는 부적합합니다. –

관련 문제