Anemic Domain Model

  • 도메인 객체에 동작이 거의 또는 포함되지 않고 있고 대부분의 비즈니스 로직이 별도의 서비스 또는 관리자 클래스에서 구현되는 안티패턴이다.
  • 도메인 객체가 수동적인 데이터 구조로, 해당 객체와 연관되어야 하는 동작이 없는 애플리케이션 아키텍쳐가 생성된다.

1. 빈약한 도메인 모델

  • 도메인 객체에 동작이 없고 대신 상태를 저장하는 단순한 데이터 구조로 사용되는 아티 패턴이다.
  • 동작과 데이터를 객체 안에 컵슐화 해야하는 객체 지향 프로그래밍의 기본 원칙에 위배된다.
  • 보통 이런 객체는 getter, setter만 포함한다.

2. 의미

  1. 객체 지향 원칙 위반 : 동작, 데이터를 분리함으로써 객체 지향 프로그래밍 원칙을 위반한다.
  2. 코드 중복 : 비즈니스 로직이 별도의 서비스 클래스로 구현되기 때문에 여러 서비스 간의 코드가 중복될 가능성이 높다.
  3. 낮은 응집성 : 도메인 객체는 동작이 없는 단순한 데이터 컨테이너가 되어 클래스 내 응집성이 낮아진다.
  4. 제한된 캡슐화 : 동작과 데이터가 분리되어 있기에 캡슐화가 손상된다.
  5. 테스트의 어려움 : 동작이 없기에 비즈니스 로직 테스트가 어렵다.

3. 의미있는 모델

  1. 리치 도메인 모델 : 도메인 객체가 동작과 데이터를 모두 캡슐화하는 풍부한 도메인 모델을 추구
  2. DDD : 도메인 주도 설계 원칙을 채택하면 풍부한 도메인 객체를 만드는데 도움이 된다. 도메인 로직에 초점을 맞추고 도메인 객체 내에서 모델링함으로써 DDD는 소프트웨어 개발에 대한 보다 전체적인 접근 방식을 장려
  3. 디자인 패턴 : strategy, factoryMethod, command 등과 같은 디자인 패턴을 활용해서 객체 내 동작을 캡슐화
  4. 서비스 계층 리펙토링 : 상속 대신 객체 구성을 강조하여 복잡한 도메인 모델을 구축