728x90
반응형
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 어노테이션은 달면 안된다고 생각했는데 그게 꼭 맞지는 않는다는 걸 알게되었습니다.
참고자료
반응형
'프로그래밍언어 & 프레임워크 > 스프링(Spring)' 카테고리의 다른 글
DispatcherSevlet 직접 구현해보기(구현 중) (0) | 2022.12.08 |
---|---|
스프링 시큐리티(Spring Security)와 JWT란? (0) | 2022.11.29 |
[Spring] Jasypt를 활용한 yml 암호화해보기(gradle, intellij) (4) | 2022.05.10 |
[JPA] Update 시 InvalidDataAccessApiUsageException 에러 (0) | 2022.05.08 |
쿼리DSL을 사용하는 이유는?(QueryDSL) (0) | 2022.05.01 |