2009-06-02 2 views
5

예를 들어 우리는 두 개의 도메인 객체를 가지고 있습니다 : 세포와 몸체 (인간 세포와 몸체에서와 같이).도메인 구동 디자인에서 컨테이너에 컨테이너를 추가하는 엔티티가 복제되면 어떻게됩니까?

Body 클래스는 Cells 컬렉션입니다.

셀에는 내부적으로 자체의 복제본을 만드는 Split 메서드가 있습니다. 지금

Class Cell 
{ 
    public Cell Split() 
    { 
     Cell newCell = new Cell(); 
     // Copy this cell's properties into the new cell. 
     return Cell; 
    } 
} 

, DDD의 경우, 셀 분할해야 :

  1. 셀 (각각의 셀 객체가 포함 된 본체에 대한 참조를 보유 함을 의미) 본체에 새롭게 생성 된 셀을 추가?
  2. 또는 intitial 사용자 요청을받은 서비스 계층이 Split을 호출하면 반환 된 셀을 수집하여 Body에 추가해야합니까? (도메인 객체가 아닌 컨트롤러를 사용하는 좀 더 빈약 한 디자인 같음)
  3. Body에 SplitCell 메소드가 있어야합니까?

미리 감사드립니다.

답변

0

을 단단히 결합 될 service을 사용하여 처리했습니다.

1

DDD에서는 종종 도메인에 의존합니다. 여기, 예 - 따라서 도메인 - 조금 이상하게 보입니다. 그러나 나는 BodySplitCell 방법으로 갈 것이라고 생각합니다.

세포 분열이 의미하는 것이 무엇인지, 그리고이 작용을 일으키는 것이 무엇인지는 분명하지 않지만 체내에서 세포가 분열 될 수 있습니다. Body에있는 Regenerate 메서드 또는 그와 비슷한 방법으로 각 셀에 Split 메서드를 호출하여 내부 셀을 분할하는 것이 더 편할 것입니다. 좋아

이 예 ... 나는 몸이 단순히 셀에 splitCell()를 호출 것이라고 생각할 것

+0

셀 분할은 말의 차이가 1 인 셀의 정확한 복사본을 만듭니다. 셀을 인식하는 시스템 내의 다른 액터가 분할을 트리거합니다. 이 배우는 신체의 존재에 대해 실제로 알지 못합니다. – ng5000

+1

이상한 예제는 모델링 할 실제 도메인보다 설명하기가 쉽습니다. 나는 내가 다루고있는 문제에 대한 간단한 추상적 인 예를 그려 내려고 노력했다. – ng5000

2

확실히 기괴한입니다. 그러면 몸은 새로운 셀로 원하는 것을 할 수 있습니다 - 스스로 추가하고, 소비하고, 던져 버리십시오. 어쨌든 몸에는 세포가 들어 있습니다.

2

다른 방법은 "나 쪼갤거야"라고 말하는 이벤트를 몸으로 보내는 것입니다. 그리고 Body는 새로운 Cell을 픽업 할 수 있습니다.

외부 액터가 본문에 대해 알지 못하는 경우 Split 메서드가 새 셀 복제를 반환해야합니까? 외부 배우가 어떻게 든 이것을 사용할 것입니까? 또는 Split 메서드가 아무 것도 반환하지 않고 (void) 단순히 살고있는 본문에 메시지를 보낼 수 있습니까?

1

Cell 클래스의 이벤트를 사용하는 것은 자연스러운 해결책 인 것처럼 보이지만 C#을 구현하는 것이 더 까다 롭습니다.

Cells이 범위에 올 때 이벤트를 연결해야하며 범위를 벗어날 때 이벤트의 연결을 해제해야합니다. 그렇지 않으면 메모리 누수가 발생합니다.

셀이 Body과 다시 연관 될 때마다, 즉 셀이 지속성 저장소에서 검색 될 때도 이벤트를 연결해야합니다. 컨테이너를 사용하여 관계 (ORM 인터셉터 일 가능성이 있음)를 관리하면이 작업을보다 쉽게 ​​수행 할 수 있습니다.

더 단순한 대안 ​​(오른쪽?, 단 하나의 Body에 속하는 세포) 부모 Body에 대한 참조를 개최하고 Body을의에 새로운 Cell 자체를 추가 할 수 있도록하는 것입니다.

  • 장점 : 코드 작성, 디버그, 이해하기 쉽습니다.
  • 단점 : 셀 바디는이 시나리오가 가장 적합한 것으로 보인다 도메인 기반 디자인 (에반스)을 읽은 후 그들에게 (관련이있을 수 있습니다) 다른 상황의 난이도에 다시 사용
+0

안녕하세요. 전에 이와 같은 이벤트 관리 상황을 다루었습니다. 너무 까다 롭지는 않지만 항상 오류의 여지가 있습니다. – ng5000

+0

나는 셀이 최적화로서 바디 (물론, IBody에게)에 대한 링크를 가질 것이라고 이미 결정했다. 나는 그 연계에 대해 의문을 제기했다 : http://stackoverflow.com/questions/920158/avoid-circular-reference-in-domain-model – ng5000