-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Labels
documentationImprovements or additions to documentationImprovements or additions to documentation
Description
📅 2024.08.13 - 복잡한 비즈니스 로직 다루기
📝 학습 내용 요약
- 주요 주제: 도메인 모델 패턴
🧠 이해한 내용
-
핵심 개념: 도메인 모델의 구성 요소는 애그리게이트, 값 객체, 레포지토리이다.
도메인 모델은 행동과 데이터 모두를 표현하는 모델이다. -
값 객체(Value Object): 예를들어 금액(Money), 기간(Period), 사람 이름(Name)을 값 객체로 만들어 볼 수 있다.
-
엔티티(Entity): 값 객체와 다르게 식별할 수 있는 객체이다. 식별 필드가 존재해야 한다.
-
애그리게이트(Aggregate): 여러 엔티티의 일관성, 불변식을 지킬 수 있게해주는 엔티티이다.
- 엔티티 계층 구조를 대표하는 엔티티이기 때문에 애그리게이트 만으로 상태를 변경해야 한다.
- 상태 변경시 일관성을 지킬 수 있게 해주며, 트랜잭션의 경계 역할을 한다.
- 일관성이 필요한 정보만 애그리게이트에 포함돼야 한다.
- 애그리게이트의 변화가 다른 애그리게이트에 영향을 미친다면 도메인 이벤트를 사용한다.
// Pseudocode
@Entity
class Ticket(
val customer: Long, // 애그리게이트 경계가 다른 ID 간접 참조
val assignedAgent: Long, // 애그리게이트 경계가 다른 ID 간접 참조
@OneToMany
val messages: List<Message>,
@Id
val id: Long = 0L
) {
// 상태를 변경하는 함수
fun xxx() {
// messages 검증
// 상태 변경
}
}- 레포지토리(Repository): 애그리게이트 모델을 영속화할 때 사용한다.
예를들어,주문(Order:1)-주문아이템(OrderItem:N)인 애그리게이트가 있다고 가정하자. 애그리게이트 루트는 Order이므로 OrderRepository만을 이용해서 주문과 주문아이템을 영속화 시켜야한다.
❓ 궁금한 점 및 논의할 주제
- 질문 1: 도메인 서비스는 언제 사용하는지 수도코드 또는 글로 작성해 주세요. (chat-gpt 퍼오기 금지)
🔍 추가 참고 자료
🗒 기타 메모
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
documentationImprovements or additions to documentationImprovements or additions to documentation