엔티티는 비즈니스에 쓰이는 데이터의 집합을 의미한다.
하지만 우리가 JPA를 사용하는 이유는 개발할 때 추상화된 객체와 데이터베이스의 데이터 사이에서 유연한 상호작용을 원하기 때문이다. Order 엔티티의 설계는 괜찮은걸까?
사진처럼 Order 엔티티를 설계했을 때 주문을 한 Member객체를 들고오는 로직을 실행하려면 memberId를 통해 Member객체를 들고와야 한다.
이 설계는 객체 설계를 테이블 설계에 맞춘 방식으로 객체 지향적인 관점에서 볼 때 잘못된 설계이다.
- 테이블의 외래 키를 객체에 그대로 들고온다.
- 객체 그래프 탐색이 불가능하다.
예를 들어, order.getMember()과 같이 협력하는 객체 간에는 그래프 탐색이 가능해야한다.- 참조가 없다.
Order 클래스는 Member에 대한 참조가 아니라 Id만 가지고 있다. 2번 문제와 맥락이 같다.
객체 지향적으로 더 나은 설계를 하려면 Order 엔티티에 멤버 변수로 Member 객체를 추가하고 member 객체를 활용하는 책임을 부여 해야 한다는 것이 내 생각이다.
(아마 JPA가 도와주겠죠?)