[英]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.