ddd 설계 예제

Posted on

소프트웨어 설계는 “사악한 문제”입니다. 클라이언트의 실제 요구 사항, API의 제한 사항 또는 검색에 따라 해결하려는 문제를 실제로 이해하려면 문제 해결을 시작해야 합니다. 전략적 디자인은 대형 디자인에 관한 것이며, 큰 모델을 구성하는 많은 부분과 이러한 부품이 서로 어떻게 관련되는지에 초점을 맞추는 데 도움이 됩니다. 이것은 `내 모델은 돌에 캐스팅`함정에 빠지지 않고 진행하기에 충분한, 앞에 큰 디자인의 조금을 달성하는 데 도움이됩니다. 제가 마지막으로 개발 책을 다룬 지 얼마 되지 않았습니다. 나는 홈 레코딩 스튜디오를 통해 작업 하기 전에 1 년 반 을 보냈다: 설계 하 고 내 지하실에 방음 녹음 실을 구축 하는 로드 Gervais에 의해 프로 처럼 구축. 이제 응용 프로그램 아키텍처를 살펴보겠습니다. 모든 경계된 컨텍스트에 대해 별도의 배포 단위가 있어야 합니다. 이것은 자바 워 파일 또는 EJB JAR일 수 있습니다.

구현 기술에 따라 다릅니다. 경계 컨텍스트를 서로 독립적으로 설계했으며 이 디자인 목표는 독립적인 배포 단위에도 반영되어야 합니다. 도메인 모델이 개체 모델일 필요는 없습니다. 예를 들어 프롤로그에는 논리적 규칙과 사실로 구성된 모델이 구현된 모델 기반 설계가 있습니다. 집계 및 엔티티는 모델에 고유한 ID를 가진 항목입니다. 값 개체는 사물이 아니라 UserId와 같은 값 또는 측정값입니다. 값 개체는 변경할 수 없도록 설계되어 상태를 변경할 수 없습니다. 모든 상태 변경 메서드는 Object 값의 새 인스턴스를 반환합니다. 이것은 우리가 원치 않는 부작용을 제거하는 데 도움이. 도메인 중심 설계는 디자인과 표현력이 뛰어난 모델을 만드는 데 전가됩니다.

또한 DDD는 소프트웨어 개발자뿐만 아니라 소프트웨어 개발에 관련된 모든 사람이 이해할 수 있는 모델을 만드는 것을 목표로 합니다. 엔터티는 고유 식별자로 고유하게 정의된 도메인 클래스입니다. 여기에는 해당 엔터티와 관련된 모든 비즈니스 논리(값 개체 및 집계와 마찬가지로)가 포함됩니다. 내가 만든 엔터티의 몇 가지 예로는 각각 GetTotal() 및 RollToNextInsurance(지불인 nextPayer)과 같은 메서드가 있는 클레임 포스트 및 요금 청구가 있습니다. 프로그래밍 언어는 컴퓨터가 아니라 사람이 읽을 수 있도록 설계되었습니다(예, 심지어 어셈블러). 공유 통신을 위한 모델을 효과적으로 만드는 소프트웨어 설계에도 마찬가지입니다. 디자인이 제품이 아니기 때문에 사람들이 작업할 수 있을 만큼 간단한 것으로 모델을 구체화하는 과정이 중요합니다. 이 디자인은 인간이 제품을 이해하고 그것에 대해 의사 소통할 수 있도록 돕기 위한 것입니다. 하지만 도메인이란 무엇일까요? 도메인은 회사가 운영하는 비즈니스와 같은 “지식 영역”입니다. 도메인은 “문제 공간”이라고도 하므로 솔루션을 디자인해야 하는 문제입니다. 이 예제에서는 클라이언트의 주소가 변경되면 새 Address 값 개체가 인스턴스화되어 클라이언트에 할당됩니다. 또 다른 까다로운 부분은 이벤트 순서입니다.

메시징 인프라에 따라 다릅니다. 인프라가 이벤트 순서를 지원하는 경우 모든 것이 맞습니다. 그렇지 않다면, 이것은 우리 자신에 의해 구현되어야합니다. 어쨌든 이벤트를 idempotent 작업으로 디자인하는 것이 좋습니다. 즉, 모든 이벤트는 여러 번 처리 될 수 있습니다. DDD에서 속도를 높이기 위해 가장 많이 요청된 보조 장치 중 하나는 실행 중인 예제 응용 프로그램입니다.