레포지토리 패턴 적용, 아이템 도메인 개발

dropKick·2020년 8월 11일
0

Item 객체지향적 구성

Item이라는 클래스가 있고 우리가 이 클래스와 연관된 것들을 통해서
Item의 수량을 알아야 된다면 어떻게 해야할까?

강의에서는 Item 클래스 자체가 stockQuantity 필드를 통해 Quantity를 계산할 수 있어야 한다고 한다.

  • 객체지향적 설계에서 메소드는 항상 데이터와 가까운 곳에 위치해야 한다.
  • 어떤 엔티티가 데이터를 가지고 있다면 비즈니스 로직이 그 곳에 위치해야 응집력이 있다.
  • 따라서 다른 어떤 클래스가 아이템을 통해 가격, 수량, 정보를 알기보다 아이템 클래스 자체가 가격, 수량, 정보를 가지고 있고 이를 통해 비즈니스 로직을 만들어낼 수 있는 것이 객체지향적이다.

아마도 이게 객체지향 SOLID 원칙 중 SRP(단일 책임 원칙)에 속하는 것 같음
아이템을 상속한 A, B ,C 각기 다른 아이템이 있지만 이 객체들에 관한 공통 정보들은 아이템 클래스가 들고 있고, 아이템 클래스를 통해 메소드를 수행할 수 있어야한다
이것이 객체 간 응집력을(변화 가능한 공통 정보만 추상화) 모으는 하나의 클래스

Annotation

  • @Transactionl
  • @RequiredArgsConstructor
  • @Service
  • @Repository

ItemRepository

  • 다건 조회는 항상 JPQL을 작성해야 함
  • DB에서 데이터를 획득 해오는 DAO

ItemService

  • ItemRepository에 위임만 하는 클래스
  • 왜 쓰는 걸까?
    DAL(Data Access Layer)를 추상화하기 위한 클래스
    DAO로써의 실제적 접근과 참조는 Repository에서 이루어지고 Domain(Controller)은 Service로의 단일 참조만 존재하면 된다.
    훨씬 보기 편하다.
    단점은 Controller든 Repository든 Server에 대한 참조가 존재 해야한다는건데..
    일단 강의에서는 Controller에서 Repository를 접근해도 큰 문제는 없다고 하니 고민 해보라는데 다시 알아봐야겠음
    serivce없이 controller -> repo 호출하기

0개의 댓글