Entity에 게시글 수정 로직을  작성

@Getter
@NoArgsConstructor
@Entity
public class Board extends Timestamped {

   ...

    public void update(String title, String content) {
        this.title = title;
        this.content = content;
    }

   ...
   
}
  • 비즈니스 로직을 엔티티에 구현하는 것은 도메인 주도 개발 방식이다.
  • 위와 같은 방식은 서비스 부분을 좀 더 가볍게 만들 수 있습니다.
    반대로 엔티티에 비즈니스 로직을 구현하지 않으면 서비스 부분이 코드가 많이 길어집니다.
  • 엔티티에 비즈니스 로직을 구현하는 것은 엔티티를 객체로 사용
    엔티티를 단순히 데이터 전달 역할을 하게 만드는건 엔티티를 자료구조로 사용
  • 클린코드 '6. 객체와 자료구조' 에 둘의 차이가 자세히 설명 되어있음

 

 

서비스단에 게시글 수정 로직 작성(JPQL 사용)

   public void updateBoard(Long id, BoardRequestDto requestDto, UserDetailsImpl userDetails) {

        loginCheck(userDetails);

        Optional<Board> findBoard = boardRepository.findById(id);

        Board board = boardValidCheck(findBoard);

        Long boardId = board.getPostId();
        String boardTitle = board.getTitle();
        String boardContent = board.getContent();

        boardRepository.updateBoard(boardId, boardTitle, boardContent);
    };
  • 아직은 간단한 프로젝트라서 서비스 로직이 단순하고 짧습니다.
    그런데 확실히 로직이 복잡해지고 기능이 많이 추가되면 서비스 부분이 많이 무거워질 것 같습니다.
  • 서비스 부분에 비즈니스 로직을 모아서 작성하면 역할을 확실하게 분담 할 수 있습니다.
  • 경험상으로 비즈니스 로직만 구현되어 있기 때문에 정리가 훨씬 편했습니다.

 

 

 

느낀점

  • 리팩토링을 하기 전에는 엔티티에 비즈니스 로직 코드가 있으면 절대 안되는 걸로만 알고 있었습니다.
    하지만 각각 장단점이 있다는 것을 자료를 찾아보면서 알게 되었습니다.
  • 각각 장단점을 알기 위해서는 우선 공부와 경험이 필요하다고 뼈저리게 느꼈습니다.
  • JPA 관련 공부는 DB 공부를 하면서 같이 진행
    • 우선 JPA를 배우는데 욕심 부리지 않고 DB 관련 공부에 더 집중
  • 엔티티에 @Setter 어노테이션은 달면 안된다고 생각했는데 그게 꼭 맞지는 않는다는 걸 알게되었습니다.

 


참고자료

  • 깃허브 블로그 [joont92] JPQL => 링크
  • 인프런 비즈니스 로직구현 Entity VS Service => 링크

 

 

 

반응형

+ Recent posts