피드로 돌아가기
Dev.toBackend
원문 읽기
도메인 객체를 데이터 주머니로만 사용하면 비즈니스 규칙이 흩어진다
Designing a Domain Model That Actually Models the Domain
AI 요약
Context
Python 애플리케이션에서 domain objects가 getter/setter만 보유하는 anemic domain model이 기본 패턴으로 자리 잡았다. 비즈니스 규칙은 service methods, utility functions, route handler에 흩어져 있다.
Technical Solution
- Money, Discount 같은 value objects 생성 시 __post_init__에서 자동 검증 추가
- Order.place(), Order.cancel(), OrderItem.subtotal() 등 domain objects에 behavior methods 구현
- OrderItem quantity는 1~100, Discount rate는 0.0~1.0 등 business invariants를 __post_init__에서 강제
- Order.total() 계산 로직을 service layer에서 domain objects로 이동
- OrderService는 orchestrate만 담당하고 business 계산 수행하지 않음
Impact
Key Takeaway
Service layer가 business 계산을 수행하고 있으면 도메인 로직이 유출된 것이다. Behavior는 business rules를 소유하는 domain objects에 속해야 한다.
실천 포인트
Python 애플리케이션에서 @dataclass 기반 domain objects에 __post_init__ 검증과 behavior methods를 추가하면 validation 우회 방지 및 service layer 간소화 효과