DDD
// 사용자의 구분
// 관리자, 일반 사용자
// 사용자의 권한 관리 방법 - 중첩, 우선 순위
// JPA - Entity, Domain
// Exposed - Entity, Domain
// 둘의 차이?
/DDD(도메인 주도 개발)
Domain Concept
- 프로그램이 흘러감에 있어서 메인이 되는 로직 또는 흐름
- 상품을 주문한다, 로그인을 한다 등의 개념을 말한다
- 이러한 것들은 추상적인 개념이기에 보통 객체로 담을 수 없다. 상품을 주문하는 과정을 객체로 담지는 않기 때문
Domain
- 프로세스 흐름 상 메인이 되는 행위나 행위의 주체가 되는 혹은 수반되는 개념
- 구체화 및 식별되지 않는 개념 자체를 담은 추상적인 것을 말한다
(ex> 주문, 배송 등)
- 개발 시에 객체로 담아내는 것은 주로 행위의 주체가 되거나 그에 따라 수반되는 개념들이다
(ex>
Entity
- 추상화한 Domain을 식별되도록 구체화 시킨 개념을 말한다
- 여기서 개발에 사용하는 것이 도메인 엔티티, 영속성(Persistent) 엔티티가 존재한다
Persistent Entity
- DB Table <-> 개발(Persistence)을 연결 해주는 Domain을 구체화 시킨 객체
Domain Entity
- 영속성 개발(Persistence) <-> 서비스 개발(Service)을 연결 해주는 Domain을 구체화 시킨 객체
- Persistent Entity와 동일하다면 없을 수도 있다
Table
- 실제 데이터가 저장되는 데이터베이스 테이블을 말한다
DTO?
- Domain Entity와 다른 것이 뭔가? 할 수도 있다
- 하지만 Domain Entity는 특정 Domain 개념을 구체화시킨 것과는 달리, DTO는 단순히 데이터를 변환하는
- 즉, Presentation 계층의 반환 데이터 타입에 맞게 변환한 객체에 불과하다
- 따라서 Domain 이라는 개념이 없으며, 오로지 출력에 맞춰져있는 객체이다
- 굳이 따지자면 Domain Concept와 관련된 객체라고 할 수 있다
Presentation - Controller, DTO 등
Persistence - Table, Entity 등
Domain - Model, ModelDetail 등
설계 방법?
그렇다면 실제로 개발할 때는 어떻게 해야하나?
DDD는 도메인 주도 개발, 즉 도메인 설계가 우선이 되야한다
하나의 프로그램에는 여러개의 Domain Concept가 존재한다
이런 Concept들을 보고서 Domain을 유추해내고 설계해야 한다
그러므로 다음과 같은 단계가 되야한다
Domain Concept 정리 -> Domain 유추 및 설계
그러면 다음으로 해야할 일은 무엇일까? Table 설계와 Domain 설계 문제가 남았다\
무엇이 우선시 되어야 할까?\