2011-03-10 3 views
3

시나리오 : 나는 많은 어셈블리가있는 솔루션에서 일하고 있어요ORM 아키텍처 : 하나 또는 여러 개의 모델 (엔티티 프레임 워크)

. 주 조립품은 대형 EF 모델이있는 DAL 조립품을 참조합니다. 나 자신의 작은 EF 모델을 포함하는 DLL에서 일하고 있습니다. 두 모델 모두 동일한 데이터베이스에 연결됩니다. 현재 작업중인 DLL은 주 어셈블리로 데이터를 반환하지만 모델에서 엔티티를 반환 할 필요는 없습니다.

질문 :

는 자신의 작은 모델을 포함하거나 모두 동일한 큰 모델을 공유해야 각 서브 어셈블리에 대한 더 나은가요?

토론 : 나는 본체의 모델을 공유하는 경우

  • 한편, 서브 - 어셈블리가 본체에 엔티티를 반환 할 수 있습니다.
  • 반면에 하나의 큰 모델을 공유하면 각 어셈블리가 해당 모델에 연결됩니다. 이 모델을 변경하면 하위 어셈블리가 손상 될 수있는 가능성이 높아집니다. 하위 어셈블리 중 하나가 손상 될 우려가 있으므로 주 모델을 안전하게 변경하지 못할 수도 있습니다.

편집 : 레이 Vernagus이 모델 주위에 명확하게 정의 boundries를 설정하는 방법에 대한 몇 가지 좋은 점 (내 생각)을 가지고

  1. . 이 아이디어와 같은 I 정말. 내 하위 어셈블리에 명확하게 정의 된 범위가 있으므로 하위 어셈블리에서 별도의 모델을 사용하여 이미이 작업을 수행하고 있습니다. 이것이 충분하나요?

  2. 모든 도메인 모델이 동일한 DAL 어셈블리에 있고 많은 엔터티가 동일한 테이블을 기반으로하고 동일한 이름을 가진 상황을 고려하십시오. 다른 이름의 네팔 스페이스에 있어야 할 필요가있는 것 외에는 나쁜 아이디어일까요?

답변

3

에릭 에반스 (Eric Evans)는 그의 책 Domain Driven Design에이 상황을 적절하게 설명합니다. 그의 추천은 모델 주변에 경계를 설정하고 적용 범위를 명시 적으로 정의하는 것입니다.이를 Bounded ContextContext Map이라고합니다.

하나의 공통 도메인 모델을 갖고 싶은지 또는 각 DAL 어셈블리가 자체 모델에 바인드되어야하는지 여부를 명시해야하는 것처럼 들립니다. 하나의 중앙 도메인 모델을 원할 경우 주 어셈블리에서 이러한 모델을 정의한 다음 해당 모델을 통해 DAL 어셈블리와 통신하도록 할 수 있습니다. 그렇지 않으면 DAL 어셈블리마다 별도의 모델을 유지하면서 명시 적 경계 컨텍스트를 정의 할 수 있습니다.

희망 하시겠습니까?

+0

첫 번째 단락의 경우 +1. 나는 네가하는 말을 이해하기 전에 두 번 째 단락을 여러 번 읽어야했다. ;-p –

+0

책을 읽으십시오! 나는 확실히 그것을 할 수 없다. =) –

+0

문제의 일부는 내가 원하는 것을 모른다는 것입니다 (그러므로 질문입니다). 내 상사는 모두가 사용하는 단일 DAL 어셈블리에서 하나의 거대한 모델을 원합니다. 모델을 개별 어셈블리에 포함하든 아니든 관계없이 더 작은 하위 모델로 모델을 분리하는 경향이 있습니다. 이 특별한 경우 하위 모델은 DAL 어셈블리가 아니고 대신 비즈니스 하위 어셈블리에 포함됩니다. –

0

유지 관리의 이유로 하나의 큰 모델을 사용합니다. 스키마의 데이터베이스 변경으로 인해 모델이 변경된 경우 둘 이상의 모델이있는 경우 해당 변경 사항을 전파해야합니다. ...

+0

나는 상점 모델의 변경에 대해 너무 염려하지 않는다. 제가 언급하고있는 변화의 유형은 '개념적'모델의 변화입니다. –

2

두 형식을 모두 사용했으며 하위 모델 훨씬 좋습니다. 특히 완전한 모델은 크고 상대적으로 독립적 인 다른 부분 집합이다. 또는 솔루션의 개념적으로 다른 부분에서 로컬로 사용됩니다. 더 깔끔한 솔루션 모음을 얻고 (복잡성을 현저히 줄임) 개념적으로 다른 여러 시스템 영역에 영향을주는 변경 사항은 거의 없습니다. 이 모델 사이를 이동하는 사소한 (하지만로 브리지)하지 않기 때문에 당신이 몇 가지 개념 영역을 스트레칭 시스템의 여러 부분이있는 경우

가장 큰 문제는

BR입니다 ...

다니엘

+0

나는 같은 이유로 이런 식으로 기울고있다. –

관련 문제