신발 주문 시스템 설계 도메인 - KEEMSY/shoes-ordering-system GitHub Wiki

신발 주문 시스템 설계 - 도메인

완료

Context

신발주문 시스템 설계 - 아키텍처 의 내용을 바탕으로, 신발 주문 시스템 분석-도메인 에서 석별한 기능 요구사항을 구체화해야 한다.

  • Domain-Driven-Design 을 적용한 도메인 설계가 필요하다.
  • 도메인 별 필요한 Entity, Value Object, AggregateRoot 식별하는 것이 필요하다.



Decision

└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── shoes
    │   │           └── ordering
    │   │               └── system
    │   │                   ├── ShoesOrderingSystemApplication.java
    │   │                   ├── common
    │   │                   │   ├── infra
    │   │                   │   └── util
    │   │                   └── domain
    │   │                       ├── common
    │   │                       ├── member
    │   │                       │   ├── controller
    │   │                       │   ├── domain
    │   │                       │   │   ├── application-service
    │   │                       │   │   │   ├── dto
    │   │                       │   │   │   ├── helper
    │   │                       │   │   │   └── mapper
    │   │                       │   │   └── domain-core
    │   │                       │   │       ├── entity
    │   │                       │   │       ├── valueobject
    │   │                       │   │       ├── event
    │   │                       │   │       └── exception
    │   │                       │   ├── repository
    │   │                       │   └── exception
    │   │                       ├── order
    │   │                       ├── product
    │   │                       └── payment

각 도메인은 아키텍처 설계 간 고려했던 Domain-Driven-Design 을 고려하여, 이에 맞게 패키지 구조 를 계층형이 아닌 도메인형으로 설계한다.

  • 도메인 단위로 MVC 가 나누어 관련된 코드를 응집한다.

Controller-ApplicationService-DomainService

MVC 의 Model 계층의 경우 Application ServiceDomain Core 를 구분하여, 핵심 도메인을 보호한다.

  • application-service: domain core 와 application(Controller) 계층 간의 다리 역할을 하며, Mapper, DTO, Application Service 가 이에 해당한다.
  • domain-core: 필수 비즈니스 개념, 규칙 및 로직을 작성하며, Entity, Value Object, Domain Service, Domain Event 가 이에 해당한다.

다음 사항들은 고려되었으나, 선택되지 못했다.

  • 계층형 패키지 구조를 사용한다.

    계층형 패키지 구조를 사용하게 되면, 서비스의 고도화 및 추후 도메인별 하나의 서비스로 분리 할 때 분산된 코드를 분리하는 작업을 고려하여 선택되지 못했다.

  • 각 도메인 별, Entity, Value Object, AggregateRoot 식별한다.

    해당 내용은 각 도메인 서비스를 개발할 때 필요한 내용이라 판단하여, 구체적으로 식별하지 않았다.



Consequence

결정한 도메인 설계를 준수하며, 각 도메인별 기능 개발을 진행하며, 이를 통해 다음과 같은 효과를 기대할 수 있다.

  • 모듈성 및 유지보수성 증진

    각각 독립적으로 유지 관리되어, 다양한 비즈니스 요구사항과 기능 변경에 있어 핵심 도메인에 영향 없이 개발이 가능하다.

  • 재사용성 증진

    독립되어 분리된 도메인을 통해 다른 도메인의 여러 컨텍스트에서 활용 될 수 있다.

  • 유연성 증진

    도메인 코어에는 영향 없이 모놀리식 아키텍처에서 마이크로 서비스 아키텍처로의 전환하는 것과 같은 애플리케이션 계층을 교체 또는 업그레이드 할 수 있다.

⚠️ **GitHub.com Fallback** ⚠️