본문 바로가기
프로그래밍 언어

빈약한 도메인 모델(Anemic Domain Model)

by 내기록 2023. 9. 10.
반응형

목차 LIST

     

    https://khalilstemmler.com/wiki/anemic-domain-model/

    빈약한 도메인 모델이란?

     

    "빈약한 도메인 모델(Anemic Domain Model)" 소프트웨어 개발의 안티패턴 중 하나이다.

    이 패턴에서 도메인 모델은 대부분의 로직 없이 단순한 데이터 구조로만 구성되며, 실제 비즈니스 로직은 서비스 계층에 위치하게 된다.

     

    문제점

    1. OOP(객체 지향 프로그래밍)의 이점 활용 못함: 객체는 상태와 행위를 가질 수 있는데, 빈약한 도메인 모델에서는 행위가 객체 외부에 있기 때문에 객체 지향의 특성과 장점을 제대로 활용할 수 없다.
    2. 코드 재사용의 어려움: 도메인 로직이 서비스 계층에 분산되어 있으면, 비슷한 로직이 여러 서비스에서 중복될 수 있다.
    3. 도메인 로직의 변경이 어려움: 서비스 계층에 비즈니스 로직이 집중되면, 로직의 변경이나 확장이 어려울 있다.

     

    예시

    빈약한 도메인 모델

    // 도메인 객체
    public class Account {
        private double balance;
        // getters and setters ...
    }
    
    // 서비스 계층
    public class AccountService {
        public void transfer(Account source, Account target, double amount) {
            if (source.getBalance() < amount) {
                throw new InsufficientFundsException();
            }
            source.setBalance(source.getBalance() - amount);
            target.setBalance(target.getBalance() + amount);
        }
    }

     

    풍부한 도메인 모델

    // 도메인 객체
    public class Account {
        private double balance;
    
        public void debit(double amount) {
            if (this.balance < amount) {
                throw new InsufficientFundsException();
            }
            this.balance -= amount;
        }
    
        public void credit(double amount) {
            this.balance += amount;
        }
    
        // getters and setters ...
    }
    
    // 서비스 계층
    public class AccountService {
        public void transfer(Account source, Account target, double amount) {
            source.debit(amount);
            target.credit(amount);
        }
    }

     

    마치며

     

    프로젝트가 커지면서 복잡도가 높아질 때, 도메인 로직이 서비스 계층에 흩어지면 유지보수와 확장이 어려워질 수 있다.

    작은 프로젝트나 특정 상황에서는 빈약한 도메인 모델이 효과적일 수 있기 때문에 무조건 나쁘다고 할 수는 없다. 하지만 도메인 주도 설계(DDD, Domain-Driven Design)와 같은 접근법을 사용할 때는 풍부한 도메인 모델을 선호하는 편이다.

     

    반응형

    댓글