Intro
도메인 모델 패턴(Domain Model Pattern)과 트랜즈액션 스크립트 패턴(Transaction Script Pattern)은 무엇인가?
비즈니스 로직이 어디서 처리되는가?
두 패턴의 차이점은 서비스에 대한 비즈니스 로직의 위치이다.
Service Layer vs Domain Entity
Web layer - Service layer - Repository layer로 나뉘는 웹 계층구조에서 서비스 레이어가 모든 비즈니스 로직을 처리하는 모델을 '트랜즈액션 스크립트 패턴'이라고 하며 웹 개발자에게 친숙한 구조다. 이때 도메인 엔티티는 아무런 비즈니스 로직이 없는 POJO 클래스로 데이터를 전달하는 역할만 수행한다.
Domain Model Pattern은 Web Layered Architecture 에서 도메인 엔티티를 좀 더 객체지향적으로 설계하는 패턴이다. 서비스레이어에 집중된 비즈니스 로직 일부가 도메인으로 이동하여 도메인 엔티티는 도메인 데이터와 함께 비즈니스 로직을 갖는다. 객체지향적 프로그래밍 방식에 더 가깝다.
간단히 예를 들어 '기름 주유시 비용을 청구하는 임의의 어플리케이션을 상상할 때,
도메인 엔티티는 주유(Refuel), 기름(Oil) 등으로 추상화 될 수 있습니다. Transaction Script 패턴이라면 두 엔티티에는 속성을 나타내는 필드와 필드의 Setter & Getter만 존재하지만 Domain Model 패턴에서는 주유의 발생이라는지 기름의 재고 증감 등의 비즈니스 로직이 엔티티에 존재합니다.
마지막으로
객체지향적 관점에서 도메인 모델 패턴이 정답인가? 아니다.
두 패턴 장단점이 존재하며 절대적 우위는 없기 때문에 상황에 맞춰 사용하는 것이 바람직하다.
(두 패턴의 장단점을 비교 분석하는 내용은 추후 본글을 업데이트하는 방식으로 추가할 에정)
[ 참고 ]
https://martinfowler.com/eaaCatalog/domainModel.html
https://martinfowler.com/eaaCatalog/transactionScript.html
인프런 강의
김영한 - 실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발v.2.1
https://www.inflearn.com/questions/117315