์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- ๋ฌธ์์ด#ํ ๋ฆฐ๋๋กฌ
- ์ฌ๋ผ์ด์ค
- SD
- ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ
- ๋ฆฌ์คํธ์ปดํ๋ฆฌํธ์ #๋ฌธ์์ด#๋ฆฌ์คํธ#๋์ ์ด๋ฆฌ
- d
- Today
- Total
JustDoEat
ํฉํ ๋ฆฌ ํด๋์ค์ ๊ฐ์ฒด ์์ฑ์ ํ์ํ ์๋น์ค๋ฅผ ์์กด์ ๋ฐ์๋ค. ์ ๋ต์ผ๊น ์๋๊น ๋ณธ๋ฌธ
ํฉํ ๋ฆฌ ํด๋์ค์ ๊ฐ์ฒด ์์ฑ์ ํ์ํ ์๋น์ค๋ฅผ ์์กด์ ๋ฐ์๋ค. ์ ๋ต์ผ๊น ์๋๊น
kingmusung 2024. 11. 21. 02:32๊ฐ์
๐ฃ๏ธ ํฉํ ๋ฆฌ ๋ฉ์๋๋ ๊ฐ์ฒด ์์ฑ์ ์ฑ ์์ด ์๋ค๊ณ ์๊ณ ์์.
๐ฃ๏ธ ๐ฃ๏ธ ์๋น์ค ํด๋์ค์์๋ ์์ง๋๋ฅผ ์ํด ์ ์ฌํ ์ฑ๊ฒฉ์ ๊ฐ์ง ๊ธฐ๋ฅ๋ค์ ๋ชจ์์ผ ํ๋ค๊ณ ์๊ณ ์์.
โ ์ด ๋๊ฐ์ง ์๊ฐ์ ๋ํ ์ถฉ๋ โ
์งํ
์ฌ๊ธฐ์ ๋๋ ์๋ฌธ
Review๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ User Entity ๊ฐ์ฒด์, Product Entity ๊ฐ์ฒด๋ฅผ ๋ฐ์์ผ ํ๋ค.
์ํฉ
ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ๋ทฐ๋ฅผ ๋ฑ๋กํ๊ธฐ ์ํด์๋, ๋ฆฌ๋ทฐ์ ๋ด์ฉ, ํ์ ์ ์ ๋ ฅํ ๊ฒ์ด๊ณ .
์์ฑ์๋ฃ๋ฅผ ๋๋ฅด๋ฉด ํ๋ฐํธ์๋์์๋ ํด๋น ๋ฆฌ๋ทฐ์ ๋์๋๋ productId๋ฅผ ๋๊ฒจ์ค ๊ฒ์ด๋ค.
Case 1.
@Service
@RequiredArgsConstructor
public class ReviewServiceImpl implements ReviewService{
private final ReviewCrudService reviewCrudService;
private final ReviewFactory reviewFactory;
private final UserService userService;
private final ProductCrudService productCrudService;
@Override
public void registerReview(ReviewCreateRequestDto review) {
reviewCrudService.saveReview(createReviewWithUserAndProduct(review));
}
@Override
public List<ReviewWithAvgProjection> getAllReview(Long productId) {
return reviewCrudService.getReviewWithRateAvg(productId);
}
@Override
public Review createReviewWithUserAndProduct(ReviewCreateRequestDto review) {
User user = resolveUser();
Product product = resolveProduct(review.getProductId());
return reviewFactory.createWithRegisterRequest(review,user,product);
}
private Product resolveProduct(Long productId){
return productCrudService.getProductById(productId);
}
private User resolveUser(){
return userService.getDummyUser();
}
}
๋ฆฌ๋ทฐ๋ค์ ๊ด๋ฆฌํ๋ ์๋น์ค ์ฝ๋
๋ค์ ํ๋ฒ
๋ฆฌ๋ทฐ๋ฅผ ๋ฑ๋กํ๊ธฐ ์ํด์๋ User ๊ทธ๋ฆฌ๊ณ Product๊ฐ์ฒด๊ฐ ํ์ํ๋ค.
๊ทธ๋ฌ๊ธฐ ์ํด ๋งจ ์๋ private ํด๋์ค๋ก User์ Product ์กฐํ ๋ก์ง์ ๋ง๋ค์๋ค.
๊ถ๊ธ์ , ๊ทธ๋ฆฌ๊ณ ๊ณ ๋ฏผ...
โ private ๋ฉ์๋๋ ์ ์ฐ๋ ๊ฒ ํ ์คํธํ ๋ ์ฌ๋ฌ๋ชจ๋ก ์ข๋ค๊ณ (?) ๋ค์์ต๋๋ค.. ๊ทธ๋ผ ๋นผ์ผ ํ ๊น์?
โ ๋ฆฌ๋ทฐ ๊ด๋ จ ์๋น์ค์ธ๋ฐ ๋ค๋ฅธ ์ํฐํฐ๋ฅผ ์ฌ๊ธฐ์ ์กฐํ๋ฅผ ํ๋ ๊ฒ ๋ง์๊น์?
๊ทธ๋์ ? ๋ ๋ญ ํ์๊น ?
Case 2.
@Service
@RequiredArgsConstructor
public class ReviewServiceImpl implements ReviewService{
private final ReviewCrudService reviewCrudService;
private final ReviewFactory reviewFactory;
private final UserService userService;
private final ProductCrudService productCrudService;
@Override
public void registerReview(ReviewCreateRequestDto review) {
reviewCrudService.saveReview(createReviewWithUserAndProduct(review));
}
@Override
public List<ReviewWithAvgProjection> getAllReview(Long productId) {
return reviewCrudService.getReviewWithRateAvg(productId);
}
@Override
public Review createReviewWithUserAndProduct(ReviewCreateRequestDto review) {
return reviewFactory.createWithRegisterRequest(review);
}
}
Case 1. ์์ ๋ฆฌ๋ทฐ๋ฅผ ๊ด๋ฆฌํ๋ ReviewService์ UserService, ProductService๋ฅผ ์์กด์ฑ ์ฃผ์ ๋ฐ์์ ์ฌ์ฉํ์์ต๋๋ค.
Case 2. ์์๋ ์ ๋ ฅ๋ฐ์ ๋ฆฌ๋ทฐ์ ๋ด์ฉ, ํ์ , productId ๊ฐ ๋ด๊ธด DTO๋ฅผ ๊ทธ๋๋ก Review๋ฅผ ์์ฑํ๋ ํฉํ ๋ฆฌ ๋ฉ์๋๋ก ๋ณด๋ด๋ฒ๋ ธ์ต๋๋ค.
@Component
@RequiredArgsConstructor
public class ReviewFactory {
private final UserService userService;
private final ProductCrudService productCrudService;
public Review createWithRegisterRequest(ReviewCreateRequestDto reviewCreateRequestDto, User user, Product product){
String constent = reviewCreateRequestDto.getContent();
Integer rating = reviewCreateRequestDto.getRating();
return Review.builder().content(constent).rating(rating).user(user).product(product).build();
}
public Review createWithRegisterRequest(ReviewCreateRequestDto reviewCreateRequestDto) {
User user = userService.getDummyUser();
Product product = productCrudService.getProductById(reviewCreateRequestDto.getProductId());
return Review.builder()
.content(reviewCreateRequestDto.getContent())
.rating(reviewCreateRequestDto.getRating())
.user(user)
.product(product)
.build();
}
}
์์ฝ์ ํ์๋ฉด,
๊ธฐ์กด(Case1.) Review ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํฉํ ๋ฆฌ ๋ฉ์๋์๋ (๋ฆฌ๋ทฐ์ ๋ด์ฉ, ํ์ ) DTO , Product, User๋ฅผ ์ธ์๋ก ๋ฐ์ Review ๊ฐ์ฒด ์์ฑ.
๋ณ๊ฒฝ(Case1.) Review ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํฉํ ๋ฆฌ ๋ฉ์๋์๋ (๋ฆฌ๋ทฐ์ ๋ด์ฉ, ํ์ , productId) DTO๋ฅผ ์ธ์๋ก ๋ฐ์ Review ๊ฐ์ฒด ์์ฑ.
โ ์ ์ด๋ ๊ฒ ํ์๊น ๋?
โ ์ํฐํฐ ๋ด๋ถ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ ๋ ์ด์ ๋, ๊ฐ์ฒด ์์ฑ ๋ก์ง์ด ๋ณต์ก ํด์ง๋ฉด ์ํฐํฐ๊ฐ ๋ฌด๊ฑฐ์์ง๊ธฐ ๋๋ฌธ์ ํฉํ ๋ฆฌ ํด๋์ค๋ก ๋ถ๋ฆฌ๋ฅผ ํ์.
๊ทผ๋ฐ? ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ํธ์ถ์์์ ๊ฐ์ฒด ์์ฑ์ ํ์ํ ๋ชจ๋ ์ธ์๋ฅผ ๋ฃ์ด ์ฃผ๊ณ ๊ฐ์ฒด ์์ฑ์ ํ๋ค๋ฉด, ๊ตณ์ด...? ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ๋ถ๋ฆฌํ ํ์๊ฐ ์์๊น?๋ผ๋ ์๊ฐ์ผ๋ก ํจ.
โ ํฉํ ๋ฆฌ ํด๋์ค๋ ํด๋น ๊ฐ์ฒด ์์ฑ์ ๋ํ ์ฑ ์์ด ์๋๋ฐ, Review๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํด ReviewService์์ UserService, ProductService๋ฅผ ์ ๋ ฅ๋ฐ๋ ๊ฒ๋ ๋ง์์ ์ ๋ค์๋ค. ์์๋ Review๋ง ๋ค์์ง๋ง ๋ค๋ฅธ ๋๋ฉ์ธ๋ ๋น์ทํ ๊ณ ์ถฉ์ ๊ฒช์๋ค.
โ ๊ทธ๋ DTO๋ VO๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ก ์์ฑํ๋ค๊ณ ํ์ง๋ง, ์ด๊ฑฐ์ผ ๋ง๋ก ๊ฐ์ฒด์์ฑ ๋ก์ง์ด ๋ณต์กํ ๊ฑฐ ์๋๊ฐ? ์ถํ ๋ค๋ฅธ ์๋น์ค์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ผ์ด ์๋ค๋ฉด ํฉํ ๋ฆฌ ๋ฉ์๋์ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ง ๋ฃ์ด์ฃผ๋ฉด ํด๋น ๊ฐ์ฒด์ ์ฐ๊ด ์๋ ๊ฐ์ฒด๋ฅผ ์์์ ์กฐํํด ์ฃผ๋๊น ํธํ ๊ฑฐ ์๋ ?
โ ๊ถ๊ธ์ ์ด ์ ๋ฆฌ (๊ถ๊ธํ ๊ฑฐ ์ฐธ๋ง๋ก ๋ง๋ค)
โ ๊ทผ๋ฐ ํฉํ ๋ฆฌ ํด๋์ค์ ์์กด์ฑ์ ์ฃผ์ ํด์ ์ฐ๋ ๊ฒ ๊ณผ์ฐ ๊ด์ฐฎ์๊น? case 1. ๊ณผ case 2. ์ค ์ ํฉํ ๊ฑด?
โ private ๋ฉ์๋๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ฉด ๋จ์ ํ ์คํธ ํ๊ธฐ ํ๋ค๋ค๊ณ ํ๋๋ฐ, ๊ทธ๋ผ ์ ์ฐ๋ ๊ฑฐ์ง?
(Review์๋น์ค์์ Product, User ์กฐํํ๋ ๋ก์ง๋ค์ ๋ฆฌ๋ทฐ์๋น์ค๋ ์ง์ ์ ์ธ ๊ด๊ณ๊ฐ ์์ด์ ์ผ๋จ private ๋ฉ์๋๋ก ์ฒ๋ฆฌํด ๋์)
๋ฐํ ํ๊ธฐ
์ ๋ฆฌ
private ๋ฉ์๋์์ ์ฌ์ฉํ ๊ฑด ๋จ์ํ ๋ค๋ฅธ ์๋น์ค์ ๊ธฐ๋ฅ์ ํธ์ถํ ๊ฑฐ๋ฐ์ ์๋ค. ํธ์ถํ ์๋น์ค์์ ๋จ์ ํ ์คํธ๊ฐ ๊ฐ๋ฅํ๊ธฐ์ private๋ก ํ๋ค ํ๋ค ๋ฌธ์ ๊ฐ ํฌ๊ฒ ์์ ๊ฑฐ๋ ์๊ฐ์ด ๋ ๋ค. BUT ๋๋ฌด ๊ณผํ๊ฒ ์์ฉํ๋ค๋ฉด ์ฝ๋์ ์ค๋ณต์ด ์์ ์๋ ์์ ๊ฑฐ ๊ฐ์์ ์ฌ์ฉ์ ํ๋ ๋ก์น ์ ํ์ง ๋ง์.
์๋ฌด๋๋ Case 2. ๋ด๊ฐ ์ด์ํ ์๊ฐ์ ํ ๊ฑฐ ๊ฐ๋ค ใ ใ ใ ใ ใ ํธ์ถ์๊ฐ ์ฃผ๋ ๊ฒ ๋ง๊ณ , ํฉํ ๋ฆฌ ๋ฉ์๋๋ ๊ฐ์ฒด์์ฑ์ ์ฑ ์๋ง ์ง๋ฉด ๋๋ค.
์์ฑ์ ์ฑ ์์ด๋ผ๊ธธ๋ ์์ฑ์ ํ์ํ ๊ฒ๋ค๊น์ง ๋ถ๋ฌ์ค๋ ๊ฒ ํ๋์ ์ฑ ์์ด๋ผ๊ณ ์๊ฐํ๋๋ฐ ์๋ชป ์๊ฐ ํ๊ฑธ์๋ ์๊ฒ ๋ค!