서비스 계층 다이어트 시키기

    private void makeNewMonthlySalesSum(Supp supp, Date date) {
        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;
    }

서비스 클래스에 있는 배치 작업 용 메소드들 입니다. 종합 정보를 생성하는데 상세 정보와 함께 묶어서 작업을 하고 있는데 코드가… 참… 거시기 합니다. 클래스에 들어있는 코드의 절반을 이 두 개의 메소드가 잡아먹고 있었습니다.

자세히 보니까 어떤 객체에서 값들을 꺼내서 다른 객체에 전달하는 일들이 전부 입니다. 흠… 옮길 수 있겠다!! 라는 생각이 젤 먼저 들었습니다. 잠시 뒤.. 오.. 당연히 옮겨야 되겠는데? 사실 저렇게 세팅해주는 일이 원래 저 서비스 클래스가 할 일은 아니니까… 걍 자기가 알아서 값들 세팅하면 되지 왜 서비스 계층이 저렇게 일일히 세팅하게 했을까나;; ㅠ.ㅜ (제가 코딩한 겁니다.ㅋㅋ)

그래서 코드를 고쳤습니다.

    private void makeNewMonthlySalesSum(Supp supp, Date date) {
        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 가량 줄일 수 있었습니다. 야호~

서비스 계층은 가볍게 도메인 계층은 두툼하게…
자기가 할 일은 자기가 하자.

Leave a Reply

Your email address will not be published. Required fields are marked *