비지니스 로직구현 Entity VS Service
7316
4 asked
안녕하세요 강사님!
이번 강의에서는
Item.class에 다음과 같이 해당 변수에 대한 접근은 해당 entity에서 작성하여 주셨는데요,
/*
* 재고 수량 증가
*/
public void addStock(int quantity){
this.stockQuantity += quantity;
}
/*
재고 수량 감소
*/
public void removeStock(int quantity){
int restStock = this.stockQuantity - quantity;
if(restStock < 0){
throw new NotEnoughStockException("need more stock");
}
this.stockQuantity = restStock;
}
1. 그렇다면 만약 회원의 주소를 변경하는 로직을 만든다고 하면 이 또한 memberRepository.class가 아닌 member.class에서 변경하여 주는 것이 맞을까요??
2. 또 비슷한 맥락으로 service 구현과 entity에서의 로직 구현의 차이는 객체의 맴버변수에 접근하는지/ 맴버 자체에 접근하는지의 차이로 이해하면 될까요??
감사합니다^^!
Answer 2
28
안녕하세요. contigunu66님
도메인이 비즈니스 로직의 주도권을 가지고 개발하는 것을 도메인 주도 설계라 합니다. 이렇게 해두면 서비스의 많은 로직이 엔티티로 이동하고, 서비스는 엔티티를 호출하는 정도의 얇은 비즈니스 로직을 가지게 됩니다.
이렇게 하면 information expert pattern을 지키면서 개발할 수 있습니다.
(information expert pattern는 검색해보시면 도움이 되실거에요^^)
반대로 엔티티는 단순히 getter, setter만 제공하고, 서비스에 비즈니스 로직이 모두 있어도 됩니다.
이렇게 되면 서비스 로직이 커지고, 엔티티는 단순히 데이터를 전달하는 역할만 담당하게 됩니다.
전자는 엔티티를 객체로 사용하는 것이고, 후자는 엔티티를 자료 구조로 사용하는 방식이지요.
그러면 항상 전자가 정답인가? 라고 하면 그렇지는 않습니다. 둘다 장단점이 있기 때문에, 상황에 맞는 적절한 방법을 선택하는 것이 중요합니다.
관련해서 클린코드 6. 객체와 자료구조에 둘의 차이가 자세히 설명되어 있으니 한번 읽어보시길 추천드립니다.
감사합니다.
sdk 설정 오류
0
46
2
오탈자 - @Transactional
0
53
1
src/test/resources 테스트 경로 문제
0
49
1
상품 등록후 H2 db 출력 순서 바꿀 수 있나요?
0
62
1
MemberRepositoryTest 실행오류
0
75
1
boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)
1
182
2
강의 마지막 QueryDSL 사용 부분 질문있습니다
1
137
2
클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.
0
50
1
도메인 모델 패턴 vs 트랜잭션 스크립트 패턴
0
71
1
기본 생성자
0
59
1
h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.
0
100
1
멤버서비스테스트 부분에서 막힙니다.
0
163
4
실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?
0
115
1
초반에 h2 다운로드 과정 꼭 필요한가요?
0
117
2
자신 필드에도 get으로 접근하는 이유가 있을까요?
0
110
1
24분 27초 연관관계 편의 메서드 위치
0
112
1
단건 주문만 가능하게 한건 의도한 부분이신가요?
0
106
2
빌드 툴, Gradle
0
57
1
h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다
0
73
2
Repository에서 EntityManager 주입 방식 차이
0
87
1
롬복과 사용자 정의 setter 메서드
0
70
1
주문 목록 조회 fetch join 질문드립니다
0
80
1
dirty checking 질문드립니다.
0
80
1
동시성 관련 질문입니다
0
72
1

