ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • part 1. 도메인 모델 시작하기
    책 정리/도메인 주도 개발 시작하기 2023. 7. 8. 00:44

    도메인 모델 시작하기

    도메인이란

    • 비즈니스 도메인 [온라인 서점]
      • 하위도메인 [주문]
      • 하위도메인 [회원]
      • 하위도메인 [혜택]
      • 하위도메인 [배송]
      • 하위도메인 [결제]
      • 하위도메인 [정산]
      • 하위도메인 [카탈로그]
      • 하위도메인 [리뷰]
    • 회사에 적용한다면?

    도메인 전문가와 개발자 간 지식 공유

    • 개발에 앞서서 각 하위도메인들이 어떤 역할을 하게 되는지 파악할 수 있음

    도메인 모델

    • 어떻게 하면 개념 모델을 잘 작성할 수 있는가?
    • 예시에서는 상태 다이어그램을 이용한 주문 산태 모델링을 통해 의미를 전달한다.
    • uml을 이용해 개념모델 표현하여 도메인 자체를 이해할수있도록 작업한다.
    • [추가] uml은 어떨때 사용해야하는가? (UML 실전에서는 이것만 쓴다.)
      • 언제 다이어그램을 그려야 하며, 어떻게 그려야 하는가
        • 언제 다이어그램을 그려야 하며 언제 멈춰야 하는가
          • 프로젝트가 완료된 후
          • 프로젝트를 시작하기 전 의사사통할때
        • CASE 도구
        • 하지만 문서화는 어떻게 합니까
        • 그러면 Javadoc은?
        • 결론

     

    • [추가] mermaid를 이용한 상태도 표현하기
      stateDiagram-v2
        [*] --> Still
        Still --> [*]
        Still --> Moving
        Moving --> Still
        Moving --> Crash
        Crash --> [*]
    

    Online FlowChart & Diagrams Editor - Mermaid Live Editor

    도메인 모델 패턴

    • 표현계층 : 사용자의 요청을 처리하고 사용자에게 정보를 보여준다. 여기서 사용자는 소프트웨어를 사용하는 사람뿐만아니라 외부 시스템일 수도 있다.
    • 응용계층 : 사용자가 요청한 기능을 실행한다. 업무로직은 직접적으로 구현하지않으며 도메인 계층을 조합해서 기능을 실행한다.
    • 도메인 : 시스템이 제공할 도메인 규칙을 구현한다.
    • 인프라스트럭처 : 데이터베이스나 메시징 시스템과 같은 외부시스템과의 연동을 처리한다.

    💡 @transaction “usecase layer” vs “presentation layer”

    • 개념모델과 구현모델
      • 완벽한 개념모델을 만들기보다는 전반적인 개요를 알 수 있는 수준으로 개념 모델을 작성해야한다.

    도메인 모델 도출

    • 비즈니스 요구사항은 domain 에서 구현한다

    💡 글을 통해서 작성하는 문서화를 경계하고 코드를 통해 문서화하라

     

    V 모델

    엔티티와 벨류

    • 엔티티
      • 식별자를 가진다.
    • 밸류 타입
      • Money, ObjectId와 같은 데이터도 클래스를 만들어서 밸류 타입을 이용하도록 한다.
      • 도메인은 aggregate를 통해 움직이기고 이때 해당 데이터를 일관된 데이터로 최신화한다
      • 만약 setter가 존재하게 된다면 도메인의 aggregate없이 데이터를 수정하는 상황이 발생할 수 있는 코드라 setter의 존재를 경계한다.
    create table shop.purchase_order (
      order_number varchar(50) not null primary key,
      version bigint,
      orderer_id varchar(50),
      orderer_name varchar(50),
      total_amounts int,
      shipping_zip_code varchar(6),
      shipping_addr1 varchar(100),
      shipping_addr2 varchar(100),
      shipping_message varchar(200),
      receiver_name varchar(50),
      receiver_phone varchar(50),
      state varchar(20),
      order_date datetime
    ) character set utf8mb4;
    
    create table shop.order_line (
      order_number varchar(50) not null,
      line_idx int not null,
      product_id varchar(50) not null,
      price int,
      quantity int,
      amounts int
    ) character set utf8mb4;
    

    도메인 용어와 유비쿼터스 언어

    • 전문가, 관계자, 개발자가 도메인과 관련된 공통의 언어를 만들고 이를 대화, 문서, 도메인모델, 코드, 테스트 등 모든곳에서 같은 용어를 사용해야한다.

    댓글

Designed by Tistory.