서비스 계층 다이어트 시키기
MonthlySalesSum monthlySalesSum = new MonthlySalesSum();
monthlySalesSum.setDate(date);
monthlySalesSum.setSupp(supp);
this.dao.add(monthlySalesSum);
MonthlySalesSumDetail detail = null;
for (Branch branch : branchDao.getBranchBySupp(supp.getId())) {
DTO dto = this.dao.makeMonthlySalesSumDTO(branch, date);
detail = makeNewMonthlySalesSumDetail(dto, branch, date);
monthlySalesSum.addSalesCount(detail.getSalesCount());
monthlySalesSum.addSellingQty(detail.getSellingQty());
monthlySalesSum.addProfit(detail.getTotalProfit());
monthlySalesSum.addSuppUnitPrice(detail.getTotalSuppUnitPrice());
monthlySalesSum.addSuppUnitPriceWithoutText(detail.getTotalSuppUnitPriceWithoutTex());
if(detail.getSalesCount() > 0){
detail.setMonthlySalesSum(monthlySalesSum);
monthlySalesSumDetailDao.add(detail);
}
}
}
private MonthlySalesSumDetail makeNewMonthlySalesSumDetail(DTO dto, Branch branch, Date date) {
MonthlySalesSumDetail detail = new MonthlySalesSumDetail();
detail.setBranch(branch);
detail.setDate(date);
if (dto != null) {
detail.setSalesCount(dto.getSalesCount());
detail.setSellingQty(dto.getSellingQty());
detail.setTotalProfit(dto.getTotalProfit());
detail.setTotalSuppUnitPrice(dto.getTotalSuppUnitPrice());
detail.setTotalSuppUnitPriceWithoutTex(dto.getTotalSuppUnitPriceWithoutTex());
}
return detail;
}
서비스 클래스에 있는 배치 작업 용 메소드들 입니다. 종합 정보를 생성하는데 상세 정보와 함께 묶어서 작업을 하고 있는데 코드가... 참... 거시기 합니다. 클래스에 들어있는 코드의 절반을 이 두 개의 메소드가 잡아먹고 있었습니다.
자세히 보니까 어떤 객체에서 값들을 꺼내서 다른 객체에 전달하는 일들이 전부 입니다. 흠... 옮길 수 있겠다!! 라는 생각이 젤 먼저 들었습니다. 잠시 뒤.. 오.. 당연히 옮겨야 되겠는데? 사실 저렇게 세팅해주는 일이 원래 저 서비스 클래스가 할 일은 아니니까... 걍 자기가 알아서 값들 세팅하면 되지 왜 서비스 계층이 저렇게 일일히 세팅하게 했을까나;; ㅠ.ㅜ (제가 코딩한 겁니다.ㅋㅋ)
그래서 코드를 고쳤습니다.
MonthlySalesSum monthlySalesSum = new MonthlySalesSum();
monthlySalesSum.setDate(date);
monthlySalesSum.setSupp(supp);
this.dao.add(monthlySalesSum);
MonthlySalesSumDetail detail = null;
for (Branch branch : branchDao.getBranchBySupp(supp.getId())) {
DTO dto = this.dao.makeMonthlySalesSumDTO(branch, date);
detail = makeNewMonthlySalesSumDetail(dto, branch, date);
monthlySalesSum.applyDetail(detail);
if(detail.getSalesCount() > 0){
detail.setMonthlySalesSum(monthlySalesSum);
monthlySalesSumDetailDao.add(detail);
}
}
}
private MonthlySalesSumDetail makeNewMonthlySalesSumDetail(DTO dto, Branch branch, Date date) {
MonthlySalesSumDetail detail = new MonthlySalesSumDetail();
detail.setBranch(branch);
detail.setDate(date);
if (dto != null)
detail.setByDTO(dto);
return detail;
}
코드를 1/3 가량 줄일 수 있었습니다. 야호~
서비스 계층은 가볍게 도메인 계층은 두툼하게...
자기가 할 일은 자기가 하자.