簡體   English   中英

Java的Crude Refactor方法

[英]JAVA Refactor methods for crud

我有一個名為Travel的實體,其中包含成本中心列表,我創建了一個代碼來處理成本中心的CRUD操作

protected void assignCostCenter(CostCenterDTO costCenterDTO, Travel travel, Long detailsId) throws BusinessException {
    CostCenter costCenter = null;
    if (costCenterDTO.getCostCenters() != null) {
        Center center = commonDao.find(costCenterDTO.getCostCenters().getId());
        costCenter = costCenterDTOMapper.mapToDTO(costCenterDTO.getCostCenters(), travel, detailsId, center);
        if (costCenter != null && !travel.getCostCenters().contains(costCenter)) {
            travel.getCostCenters().add(costCenter);
        }
    } else {
        travel.setCostCenters(travel.getCostCenters().stream().filter(costCenter1 -> !(costCenter1.getDetailId().equals(detailsId))).collect(Collectors.toList()));
    }
}

而在映射器中

 public CostCenter mapToCostCenter(CostCenterDTO costCenterDTO, Travel travel, Long claimDetail, Center center) throws BusinessException {
        CostCenter costCenter = new CostCenter();
        CostCenter costCenterToUpdate = travel.getCostCenters()
                .stream()
                .filter(costCenter1 -> costCenter1.getDetailId().equals(claimDetail))
                .findFirst()
                .orElse(null);
        if (costCenterToUpdate == null) {
            costCenter.setCenter(center);
            costCenter.setTravel(travel);
            costCenter.setDetailId(claimDetail);
        } else {
            costCenterToUpdate.setCenter(center);
            return costCenterToUpdate;
        }
        return costCenter;
    }

功能是,如果分配了新的CostCenter,我將從分配的db獲取中心,然后將其傳遞給mapper中的mapper,然后調用travel.getCostCenters來查看是否沒有已經分配了具有相同詳細信息ID的costCenter(如果有的話),如果有的話,我只是更新它是不是我創建新的並返回,如果不存在,則添加到列表中,如果CostCenterDTO為null,那么我通過detailId從列表costCenter中刪除,但是我的問題是如何重構它,因為它看起來不整潔?

我在這里看到的關於可讀性的一件事:違反SLA原則。

含義:在ifs中不包含ifs 確實有幫助。 相反,您編寫了一些小的輔助方法來完成這些工作。 這樣每個方法只包含“相同”抽象層的元素。

除此之外; 在樣式級別上:我更喜歡 “返回”而不是“其他”; 喜歡:

 if (costCenterToUpdate == null) {
   return updateCostCenter(center, travel, claimDetail);   
 }

 costCenterToUpdate.setCenter(center);
 return costCenterToUpdate;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM