본문 바로가기

DDD/도메인 주도 설계 철저 입문

레포지토리 구현 시 팁 - 「도메인 주도 설계 철저 입문」 5장 (3)

본 포스트 시리즈는 「도메인 주도 설계 철저 입문」책을 요약한 내용입니다.

 

 

이전 발행 글 보기

 

더보기


 

 


 

05장 데이터와 관계된 처리를 분리하자 - 리포지토리 (3)

 

(3) 리포지토리에 저장되는 행위

 

 

데이터 모델과 데이터 객체

ORM에서 사용되는 데이터 모델, JPA로 치면 @Entity 어노테이션으로 만들어지는 Entity 객체는 앞서 3장에서 얘기하는 엔티티와 그 이름은 같으나 전혀 다른 객체이다. @Entity는 "데이터 모델"로서 데이터베이스와 상호작용을 위한 객체이고, 도메인 엔티티는 도메인의 비즈니스 규칙과 도메인 지식을 표현하는 객체이다. 

 

 

리포지토리에 정의되는 행동(1) - 객체의 저장

객체의 저장에 대한 행위 (객체의 저장, 수정, 삭제)는 리포지토리에 정의 되는 것이 타당하다. 그런데 이때 주의할 것은 객체를 통째로 인자로 받아 저장해야 한다는 것이다. 만약 수정할 항목만 인자로 받으면 리포지토리에 항목별로 수정 메서드가 생기게 되기 때문이다. 이때 JPA를 사용하면 save(), update(), deleteById()와 같이 객체를 인자로 받는 각각의 행위들을 모두 구현해 놓았기 때문에 따로 구현할 필요는 없다. 

 

 

리포지토리에 정의되는 행동(1) - 객체의 복원

객체의 복원에 대한 행위인 조회도 리포지토리에 정의 되는 것이 타당하다. 마찬가지로 JPA는 findById(), findAll() 등을 정의해 놓았다. 객체의 생성은 리포지토리에 정의되지 않는다. (9장에서 다룰 예정)

 

 


 

요약

 

1. @Entity는 데이터베이스와 상호작용을 위한 객체로 "데이터 모델"이며, 도메인 객체인 "엔티티"와는 다르다.

2. 리포지토리에는 객체의 저장에 대한 행위 (저장, 수정, 삭제)와 객체의 복원에 대한 행위 (조회)가 정의되는 것이 바람직하다. 객체의 생성은 리포지토리에 정의되지 않는다.