반응형
목차 LIST
빈약한 도메인 모델이란?
"빈약한 도메인 모델(Anemic Domain Model)" 소프트웨어 개발의 안티패턴 중 하나이다.
이 패턴에서 도메인 모델은 대부분의 로직 없이 단순한 데이터 구조로만 구성되며, 실제 비즈니스 로직은 서비스 계층에 위치하게 된다.
문제점
- OOP(객체 지향 프로그래밍)의 이점 활용 못함: 객체는 상태와 행위를 가질 수 있는데, 빈약한 도메인 모델에서는 행위가 객체 외부에 있기 때문에 객체 지향의 특성과 장점을 제대로 활용할 수 없다.
- 코드 재사용의 어려움: 도메인 로직이 서비스 계층에 분산되어 있으면, 비슷한 로직이 여러 서비스에서 중복될 수 있다.
- 도메인 로직의 변경이 어려움: 서비스 계층에 비즈니스 로직이 집중되면, 로직의 변경이나 확장이 어려울 수 있다.
예시
빈약한 도메인 모델
// 도메인 객체
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)와 같은 접근법을 사용할 때는 풍부한 도메인 모델을 선호하는 편이다.
반응형
'프로그래밍 언어' 카테고리의 다른 글
FastAPI에 대해 가볍게 알아보자. (0) | 2023.11.24 |
---|---|
단위 테스트(Pytest, Mock)란 무엇인가? (0) | 2023.09.04 |
Python - SQLAlchemy 간단 정리 (0) | 2023.08.22 |
Python Thread는 블로킹I/O에 사용한다. GIL이란? (0) | 2023.08.20 |
Python subprocess 모듈 (0) | 2023.08.20 |
댓글