도메인 설계할 때 생각

Chooooo·2023년 12월 21일
0

TIL

목록 보기
22/22

JPA의 엔티티는 인터페이스 자체를 지원하지 않는다. 순수 자바 코드로 인터페이스를 만들고 구현하는 것은 가능하지만, JPA를 통해서 해당 인터페이스를 읽거나 하는 것은 불가능하다.

실전 스프링부트와 JPA활용에서 나오는 Item과 Book과 같은 상속 관계도 일반적인 경우에 제공되는 것이 아니라, 관계형 데이터베이스의 슈퍼타입 서비스타입으로 설계된 경우에 한해서 객체 상속관계를 사용할 수 있다.

즉, JPA의 엔티티는 태생적으로 관계형 데이터베이스의 테이블과 매핑하기 위해 존재한다. 따라서 완전히 순수한 객체지향 개발을 하기는 어렵다. 어느정도는 객체지향 개발이 가능하지만, 테이블 자체가 데이터 중심의 설계이기 때문에 엔티티는 객체와 데이터 중심 설계 둘 사이에 놓이게 된다.

😎 개발

개발은 크게 인터페이스와 메세지 중심의 객체지향 설계 방법과 데이터 중심의 설계 방법이 있다. 어떤 경우는 객체지향 설계 방법이 잘 맞지만, 어떤 경우는 데이터 중심의 설계 방법이 더 잘 맞는다. 그리고 하나의 프로젝트 안에서도 둘이 공존한다.

  • 어떤 것이 더 우월하다기 보다는 상황에 따라 더 잘 맞는 것이 있다. (클린코드 객체와 자료구조)

엔티티는

엔티티는 비즈니스 데이터를 기반으로 설계되기 때문에 인터페이스와 메시지 중심의 객체지향 설계 방법만으로 개발하기는 쉽지 않다.

  • 사방에서 필요한 비즈니스 데이터를 달라고 할 것이기에....

또한 이 필요한 비즈니스 데이터가 프로젝트마다 조금씩 다를 것인데, 그러면 결국 인터페이스 자체가 달라질 수 밖에 없다. 인터페이스로 설계하는 것 자체가 인터페이스는 잘 변하지 않아야 한다가 전제인데, 프로젝트마다 데이터가 다를 것이고, 그러면 인터페이스 자체가 달라지니 결과적으로 잘 맞지 않는다.

😊 엔티티는 엔티티 자체가 특정 비즈니스 요구사항에 맞추어 개발된 데이터들을 포함하고 있다. 따라서 비즈니스가 조금만 달라져도 재사용이 어렵다.

profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글