피드로 돌아가기
Designing a Domain Model That Actually Models the Domain
Dev.toDev.to
Backend

도메인 객체를 데이터 주머니로만 사용하면 비즈니스 규칙이 흩어진다

Designing a Domain Model That Actually Models the Domain

Pablo Ifrán2026년 4월 1일8intermediate

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 간소화 효과

원문 읽기