신발 주문 시스템 설계 도메인 - KEEMSY/shoes-ordering-system GitHub Wiki
완료
신발주문 시스템 설계 - 아키텍처 의 내용을 바탕으로, 신발 주문 시스템 분석-도메인 에서 석별한 기능 요구사항을 구체화해야 한다.
-
Domain-Driven-Design
을 적용한 도메인 설계가 필요하다. - 도메인 별 필요한
Entity
,Value Object
,AggregateRoot
식별하는 것이 필요하다.
└── 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 가 나누어 관련된 코드를 응집한다.
MVC 의 Model 계층의 경우 Application Service
와 Domain Core
를 구분하여, 핵심 도메인을 보호한다.
-
application-service
: domain core 와 application(Controller) 계층 간의 다리 역할을 하며, Mapper, DTO, Application Service 가 이에 해당한다. -
domain-core
: 필수 비즈니스 개념, 규칙 및 로직을 작성하며, Entity, Value Object, Domain Service, Domain Event 가 이에 해당한다.
다음 사항들은 고려되었으나, 선택되지 못했다.
-
계층형 패키지 구조를 사용한다.
계층형 패키지 구조를 사용하게 되면, 서비스의 고도화 및 추후 도메인별 하나의 서비스로 분리 할 때 분산된 코드를 분리하는 작업을 고려하여 선택되지 못했다.
-
각 도메인 별,
Entity
,Value Object
,AggregateRoot
식별한다.해당 내용은 각 도메인 서비스를 개발할 때 필요한 내용이라 판단하여, 구체적으로 식별하지 않았다.
결정한 도메인 설계를 준수하며, 각 도메인별 기능 개발을 진행하며, 이를 통해 다음과 같은 효과를 기대할 수 있다.
-
모듈성 및 유지보수성 증진
각각 독립적으로 유지 관리되어, 다양한 비즈니스 요구사항과 기능 변경에 있어 핵심 도메인에 영향 없이 개발이 가능하다.
-
재사용성 증진
독립되어 분리된 도메인을 통해 다른 도메인의 여러 컨텍스트에서 활용 될 수 있다.
-
유연성 증진
도메인 코어에는 영향 없이 모놀리식 아키텍처에서 마이크로 서비스 아키텍처로의 전환하는 것과 같은 애플리케이션 계층을 교체 또는 업그레이드 할 수 있다.