-
카테고리
-
세부 분야
기타 (개발 · 프로그래밍)
-
해결 여부
미해결
연습에 대한 구체적인 코드가 맞는지 리뷰 부탁드려도 될까요 :)?
18.08.06 23:22 작성 조회수 165
0
안녕하세요.
DIP까지 다 듣게 되었습니다. 좋은 강의를 이렇게 올려주셔서 너무 감사합니다. 다만, 마지막 연습에 대한 구체적인 코드가 없어서 작성하게 되었습니다:)
제가 작성한 코드가 제대로 이해한게 맞는지 확인 부탁드려도 될까요?
// 고수준 모듈class ProductDataService {
private var productRepository: ProductRepository?
private var productRecommander: ProductRecommander?
private var popularProductService: PopularProductService?
// 직접 생성x
// init() {
// self.productRepository = DBProductRepository()
// self.productRecommander = DaaraRecommnder()
// self.popularProductService = ErpPopularProductService()
// }
init(_ productRepository: ProductRepository, _ productRecommander: ProductRecommander, _ popularProductService: PopularProductService) {
self.productRepository = productRepository
self.productRecommander = productRecommander
self.popularProductService = popularProductService
}
func getDetailInfo() {
productRepository?.fetchDetailInfo()
}
func recommandItem() {
productRecommander?.fetchItems()
}
func getTopItem() {
popularProductService?.fetchTopItem()
}
}
// 하위 기능을 추상화한 타입 1
protocol ProductRepository {
func fetchDetailInfo()
}
// 하위 기능을 추상화한 타입 2
protocol ProductRecommander {
func fetchItems()
}
// 하위 기능을 추상화한 타입 3
protocol PopularProductService {
func fetchTopItem()
}
// 저수준 모듈
class DBProductRepository: ProductRepository {
func fetchDetailInfo() {
// ...
}
}
class DaaraRecommnder: ProductRecommander {
func fetchItems() {
// ...
}
}
class ErpPopularProductService: PopularProductService {
func fetchTopItem() {
// ...
}
}
답변을 작성해보세요.
0
0
0
최범균
지식공유자2018.08.07
전체적으로 느낌은 맞는데 ProductDataService 의 "상품 정보 조회" 기능은 아래와 같으므로
- 개별 상품 정보 조회
- 해당 상품과 관련된 추천 상품 구함
- 추천 상품 개수에 따라 인기 상품 구함
ProductDataService 에 getDetailInfo(), recommandItem(), getTopItem() 메서드가 따로 존재한다기 보다는 아래와 같이 getDetailInfo() 메서드를 구현하게 됩니다.(자바 코드로 표시해봅니다.)
public class ProductDataService { private ProductRepository productRepository;
private ProductRecommender productRecommender;
private PopularProductService popularProductService;
public ProductInfo getDetailInfo(String prodId) {
Product prod = productRepository.findOne(prodId);
List<RecommendProd> recProds = productRecommender.getRecommandProds(prodId);
List<SuggestProd> suggProds = toSuggestProds(recProds);
if (suggProds .length() < 5) {
List<TopProd> topProds = popularProductService.getTopProds(
prod.getCategory(), 5 - suggProds.length());
suggProds.addAll( toSuggestProds(topProds) );
}
return ProductInfo(prod, suggProds);
}
private List<SuggestProd> toSuggestProds(List<RecommendProd> recProds) { ... }
private List<SuggestProd> toSuggestProds(List<TopProd> topProds) { ... }
...
그리고 용어를 Product로 사용하기로 했다면 (ProductDataService 등), 추천 기능을 정의한 인터페이스나 인기 상품을 가져오는 인터페이스의 메서드도 Item이 아니라 Product라는 용어를 사용하는 게 좋을 듯 합니다.
답변 3