경계가 붙은 컨텍스트를 DCI로 생각해 본다

4141 단어 DDDDCI

소개



관심의 분리를 의식한 이름 설계로 거대 클래스를 폭살 에서 시스템을 분할하는 방법에 대해 공부했습니다.

쓰여진 내용을 바탕으로 나름대로 시스템의 설계를 생각하고 있었는데 의문이나 깨달음이 있었으므로 투고해 보겠습니다.
틀린 것을 기재하고 있으면 지적 바랍니다.

경계 컨텍스트로 시스템 분할



관심사에 적합한 명명을 한다 의 항에 다음의 그림이 있었습니다.



자신적으로는 이것은, 같은 상품이라도 상황(컨텍스트)에 의해 관심사가 바뀌기 때문에, 경계 붙인 컨텍스트로 나눌 것인가라고 생각하고 있습니다. (DDD)



이것을 단순히 서브 도메인 -> 시스템으로 변환하면



혹은 CQRS+ES라면



처럼 마이크로서비스적으로 시스템을 분할해야 하는 것일까라고 생각하고 있었습니다.

집계 단위로 분할



시스템으로 나누면 자신은 재고품 ID, 예약품 ID, 주문품 ID, 발송품 ID라고 하는 것을 준비해, 외래 키로 각각의 ID를 가지는 것 같은 설계 밖에 생각하고 있지 않았습니다만
마찬가지로 관심사에 적합한 명명을 한다

(※재고품, 예약품, 주문품, 발송품의 일의성은, 같은 독특한 ID를 사용하는 것으로 해결합니다.)

그리고 다른 관점을 깨달았습니다.
상품 ID 뭔가를 준비하고 각각의 집약의 독특한 ID로 하면 좋을까.
그 생각을 바탕으로 클래스 다이어그램을 써 보면



이런 느낌이 될까. 여기서 하나 의심스럽게 생각한 것이, 예를 들면 주문 서브도메인에 속해 있고 주문품이 관리하고 있는 주문일이라는 업무 지식이 있어, 발송 서브 도메인에서도 사용하고 싶은 경우는 어떻게 하는 것일까, 라고. 주문하고 발송한다는 유스 케이스를 생각했을 때 interface I 주문하기 { void 주문 (주문 상품 _ 주문품); } interface I 발송하기 { void 배송 (주문 상품 _ 주문품, 배송품 _ 배송품); void 배송 (주문일 _주문일, 배송품 _발송품); } 같이 주문품을 통째로 건네주거나 주문일만을 추출해 건네주거나 하는거야? 라고 생각했습니다. 또는 주문 저장소 .Save (주문 제품); 배송 저장소.Get(주문품.ID); 와 같이 한번 저장 영역에 저장하고 나서 배송 상품을 얻는다든가. 전자는 인터페이스의 인수가 늘어나면 어떨까요? 토카 후자는 처리 기술이 전후하면 어떻게 되는 거야? 라든지 (수속 형으로되어있다) 생각해도 역시 하고 있었습니다. 그리고 상품명을 어디에 둘까? 라든지. DCI적인 사고방식으로 변경해 본다 그럴 때 DCI 아키텍처라는 생각을 찾을 수 있었습니다. DCI는 혼자서 말할 수 없습니다. (죄송합니다.) 다만 DCI는 data context interaction의 약자라고 합니다. 자신의 이해로 DCI로 다시 작성해 보면

됩니다. 결국 상품은 단순한 데이터 보관소가 완성되고, 각 상황(컨텍스트)에서의 행동은 각각의 역할(롤)에 기술합니다. 상품은 각 롤을 계승하고 있으므로 유스 케이스를 실행할 때 롤에 캐스트 해 사용합니다. 예를 들면 var 상품 = 상품 저장소. Get(new 상품 ID()); I 주문하는 유스 케이스 주문 = new 주문하는 유스 케이스 (); 주문. 주문 (상품); I 발송하는 유스 케이스 발송 = new 발송하는 유스 케이스 (); 배송, 배송 (상품); 같은 인스턴스를 사용할 수 있습니다. 이 경우 주문 날짜가 I 주문하는 유스 케이스에서 변경 되더라도 I 발송하는 유스 케이스에서는 변경된 주문 날짜를 사용할 수 있습니다. 상품명의 두는 장소도 상품으로 결정할 수 있었습니다만 상품명을 변경하려고 하면 상품 제정보 변경 롤 되는 롤을 준비하지 않으면 안 되는 것일까? 라고 생각합니다. 그리고 롤이 늘어나면 늘어날수록 상품의 프로퍼티가 늘어날 것 같고, 이것으로 맞는지 어떤지 자신이 없습니다. 정리? 나는 쓰레기를 썼다. 그러나이 게시물에서 관심을 분리하고 다른 집약으로 해도 고유 ID를 사용하면 동일시할 수 있다 거의 거의 데이터가 같고 조금만 동작이 다른 경우는 DCI가 유효할지도 DDD와 DCI는 혼합하면 위험? 라고 하는 점에 대해 기재한 생각입니다. DCI에 대해 올바르게 이해하고 있는 자신이 없기 때문에 실수등 있으면 지적 바랍니다.

좋은 웹페이지 즐겨찾기