3장. 도메인 모델과 메타데이터
3.2 도메인 모델 구현
- 도메인 모델 구현은 애플리케이션 기능을 구현할 때마다
자주 재사용되는 중심적이고 조직적인 구성요소이다.
- 도메인 모델 구현에 비즈니스 외적인 문제가 스며들지 않도록 노력을 기울여야 한다.
3.2.1 관심사 누출 처리
- 영속성, 트랜잭션 관리, 권한 부여와 같은 관심사가 도메인 모델 클래스에 나타나기 시작하면, 이는 관심사 누출(leakage of concerns)의 예로 볼 수 있다.
- 도메인 모델은 도메인과 무관한 API에 의존해서는 안되는 중요한 코드이다.
- 예를 들면, 도메인 모델 내의 코드는 데이터베이스를 직접 호출하거나 다른 중간에 위치한 추상화를 통해 호출해서는 안 된다.
- 그래야만 사실상 모든 곳에서 도메인 모델 클래스를 재사용할 수 있다.
- 비즈니스 계층의 구성요소(컴포넌트)는 도메인 모델 엔티티의 상태에 접근하고, 이러한 엔티티의 메서드를 호출할 수 있다. 이곳에서 비즈니스 계산과 로직이 실행된다. 이러한 관심사는 다른 계층의 관심사와 분리되어야 한다.
- 관심사의 누출을 방지하면, 특정 런타임 환경이나 컨테이너 없이도 도메인 모델을 쉽게 단위 테스트하거나 서비스 의존성을 모킹할 수 있다.
3.2.2 투명하고**(transparent)** 자동화(automatic)된 영속성
- 투명하다(transparent)
- ‘도메인 모델의 영속성 클래스’와 ‘영속성 계층’ 간의 관심사를 완전히 분리한다는 의미
- 영속성 클래스는 영속성 메커니즘을 인식하지 못하며, 영속성 메커니즘에 대한 의존성도 없다.
영속성 클래스 내부에서는 외부 영속성 매커니즘을 참조하지 않는다.
- 자동(automatic)
- SQL문 작성이나 JDBC API 작업과 같은 수준의 기계적 세부사항을 처리할 필요가 없도록 해주는 영속성 솔루션을 지칭
3.3 도메인 모델 메타데이터
- 메타데이터란?
- 도메인 모델 메타데이터는 도메인 모델에 대한 정보.
- ORM 도구는 메타데이터를 필요로 한다. (매핑 지정 메타데이터)
- 클래스와 테이블
- 프로퍼티와 컬럼
- 연관관계와 외래키
- 자바 타입과 SQL 타입 등
- 어노테이션을 통해 매핑을 추상화함.
(어노테이션을 통해 매핑에 대한 추상화 수준을 높임)
도메인 모델이 JPA에 의존하는것 아닌지?