작성
·
142
0
[질문 내용]
여기에 질문 내용을 남겨주세요.
저는 지금까지 수정을 시도할때
changeContentsAndtitle 이런 식으로 엔티티단에서 수정을 시도했는데
https://velog.io/@gundorit/Spring-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EB%90%9C-CRUD-Update
이 블로그에 따르면 그것은 별로 안좋고 Editor 를 선언해서 하면 좋다는 식으로 얘기하고 있습니다.
근데 이렇게 하면 영한님이 얘기하셨던 얘기 중에 그런 이야기가 있었습니다.
DTO 는 엔티티를 참조해도 되는데 , 엔티티는 DTO 를 참조하지 말라고 하셨습니다.
위 블로그에서는 Entity 에서 DTO 를 참조하지는 않는데
Entity 에서 UpdateEditor 를 선언하고 있는데 이런 부분에 문제는 없을까요?? 영한님도 이런 스타일로 하시나요?
답변 1
0
안녕하세요. dionisos198님, 공식 서포터즈 코즈위버입니다.
블로그에서 정리한 내용은 불변 객체와는 다른 이야기 같습니다. 엔터티에서 Setter를 통해 데이터를 함부로 수정할 수 있으면 안된다는 내용이 중요한 것 같네요.
엔터티 모든 속성에 무조건적으로 setter 를 제공하는 것에는 반대하나 사용자의 액션에 따라 변할 수 있는 속성이라면 setter를 부분적으로 제공해도 무리는 아니라고 생각합니다. 저의 경우는 setter 를 직접적으로 제공하지는 않으나 deleteOrder(); changeOrderReceiverAddress(Address); 등등의 속성 변경 메서드를 제공합니다(엔터티가 Order 라고 가정한 예시입니다).
사용자(OrderService)는 Order엔터티에게 delete/change 등을 요청할 수 있습니다. 그러나 이를 어떻게 처리할지 혹은 받아들이지 말지는 Order의 책임이라고 봅니다. deleteOrder() 메서드 내에는 주문의 삭제여부값을 Y로 돌리는 코드와 주문삭제일시를 현재시간으로 업데이트 하는 코드와 함께 주문을 삭제로 돌리는게 합당한지(합당하지 않으면 거절의 뜻으로 오류를 던집니다)를 판단하는 코드를 묶었습니다.
특정한 액션에 필요한 값 변경은 Order 엔터티가 가장 잘 알고 있으며, 지금 내 상태를 바꿀수 있을지 없을지도 Order 엔터티가 가장 잘 알고 있기 때문입니다.
제 방법이 정답은 아니니 다양한 개발자들의 견해를 들어보시고, 프로젝트에 맞는 방법을 선택하시면 좋을것 같습니다. 감사합니다.
제가 잘못이해했을수도 있는데 위 블로그 내용은 changeOrder.. 이런식으로 수정하지 말라는 내용같아요!