
객체 지향적으로 설계하기 위해서는 SOLID 원칙을 고려하며 많은 고민을 거듭해야 한다.
특히 메서드를 추가할 때 어느 클래스에 메서드를 두어야할 지 심각하게 고민하곤 한다.
이번 포스팅에는 메서드를 두는 위치에 관련된
도메인 모델 패턴과 트랜잭션 스크립트 패턴을 알아보자.

class Model {
String name;
public String getName() {
return name;
}
// ** Model 관련 메서드도 Model 클래스에 포함 **
public void modelMethod() {
// 메서드 바디
}
}
도메인 모델 패턴이란, 도메인 객체가 상태와 행동을 모두 가지는 디자인 패턴이다.
MVC + Service 패턴에서 Model 클래스에 Model의 상태와 관련 메서드를 함께 작성한다.
Service는 단순히 Model에 필요한 메서드를 위임하는 역할을 한다.
각 Model 객체에서 상태와 관련 메서드인 비즈니스 로직을 개별적으로 확인할 수 있기 때문에
직관적이며 객체 지향적인 특성을 적극 활용한 디자인 패턴으로
복잡한 비즈니스 로직 처리에 적합하고 유지보수에 용이한 장점을 가지고 있다.

class Model {
String name;
public String getName() {
return name;
}
class Service {
public serviceMethod(Model model) {
String modelName = model.getName();
// 메서드 바디
}
}
트랜잭션 스크립트 패턴이란, 도메인 객체의 행동을 별도의 클래스로 분리하는 디자인 패턴이다.
MVC + Service 패턴에서 도메인 모델 패턴과는 반대로
비즈니스 로직을 Model 객체가 아닌 Service 클래스에 작성한다.
비즈니스 로직이 각 Model 객체에 분산되어 있지 않고 Service 클래스에 집중되어 있어
단순하면서 각 메서드를 절차 지향적으로 설계한다는 특징을 가진다.
한 곳에 로직을 집중하여 관리하기 때문에 초기 개발 또는
간단한 애플리케이션 제작에 사용하는 것이 유리하며
규모가 커질수록 Service 클래스의 코드가 복잡해지고
중복이 발생할 확률이 높아 유지보수 및 확장이 어려울 수 있다.

실제로 개발하면서 비즈니스 로직을 어디에 위치시켜야 하는지 고민했던 경험이 있다.
도메인 모델 패턴과 트랜잭션 스크립트 패턴을 이해하고,
로직의 위치를 일관적으로 위치할 수 있도록 하자.