2016-12-21 4 views
2

각 변형에 대해 명령을 가질 수 있습니다. 또는 하나의 명령을 포함하고 그 변형을 처리 할 수 ​​있습니다.CQRS 및 DDD의 컨텍스트에서 약간 다른 유스 케이스를 어떻게 처리합니까?

설명하기 위해 세 가지 사례 ("이상", "CommentOnPhoto", "CommentOnWall", "CommentOnArticle")가 있습니다. 모두 내부적으로 동일한 주석 달기 시스템을 사용합니다. 세 가지의 차이는 :

  • 다른 정책을 점검 할 필요가있다 (CommentOnPhotoPolicyCommentOnWallPolicy, CommentOnArticlePolicy)
  • 다른 집계는 우리가 부를 수 있도록 저장소에서 가져온 할 photo.attachComment(comment), article.attachComment(comment)
  • 있다

각 변형에 대해 하나의 명령 경로를 사용하는 경우 각 명령은 모두 매우 비슷하기 때문에 일부 기본 경로 인 CommentOnSomething 명령을 상속해야합니까?

모든 사용 사례에 대해 하나의 마더 명령어 경로를 사용하는 경우 필요에 따라 필요한 정책 및 저장소를 가져 오기 위해 Service Locator를 사용해야합니다 (각 사용 사례에만 10 개 이상의 종속성을 주입하지 않습니다. 하나를 사용하는 것). 서비스 로케이터 사용을 숨기기 위해 추상적 인 공장 등을 사용한다면 이것이 받아 들여질 수 있습니까? 우리는 CommentPolicyFactoryCommentableFactory을 가지고 있습니다. 내부적으로 올바른 정책과 적절한 집계를 제공하기 위해 Service Locator를 사용합니다.

+2

나는 정책과 aggreagtes가 다른 경우 "약간"이라고 부릅니다. 귀하의 도메인에 따라 다르지만 귀하의 예는 3 가지 다른 경계 상황을 가질 수 있습니다. – jlvaquero

답변

2

변형마다 하나의 명령.

먼저 매우 일반적인 "주석 달기"구성 요소 (핵심 프로젝트와 분리 된 자체 프로젝트)를 만드는 데 중점을 둡니다. 일단 가지고 있다면 명령은 CommentOnPhoto, CommentsOnWall 등은 몇 줄의 코드만으로 매우 간단 해집니다.

+0

그것이 제가 선택한 길입니다. 필자가 가지고있는 유일한 문제는 이제 모든 유스 케이스에 서비스를 제공하는 컨트롤러 메소드뿐만 아니라 많은 명령 핸들러와 명령 정의가 있다는 것입니다. –

+2

@DenisPshenov 당신에게 좋습니다. 당신은 개체 체조에 닫힙니다. 시스템은 마이크로 서비스 및/또는 이벤트로 쉽게 전환 할 수 있으며 일반적으로 확장성에 많은 도움이됩니다. – jlvaquero