Сложность и стиль кода в каждом цикле для проверки входных данных перед передачей

См. Следующий фрагмент кода.

Для меня это выглядит слишком сложным и не кажется оптимальным решением этой проблемы. Но, честно говоря, другого решения не нахожу. Сопоставление с другими объектами должно разделять входные данные каждого слоя. Кроме того, каждый объект проверяется в соответствующем конструкторе, что приводит к положительному эффекту, заключающемуся в том, что только действительные данные предоставляются конкретным методам службы или репозитория.

Мои основные опасения:

  1. Слишком много continue внутри цикла

  2. Чрезмерное использование Set

  3. Выглядит сложным

    final List<UUID> providedIds = providedDTOS.stream().filter(PredicateUtils.distinctBy(InputDTO::getId)).map(SubDTO::getSubId).collect(Collectors.toList());
    final Map<UUID, EntityProj> entityProjMap = serviceOne.getEntitiesByIds(providedIds).stream().filter(Objects::nonNull)
            .collect(Collectors.toMap(EntityProj::getId, entityProj -> entityProj));
    
    final Set<SubTransferData> subTransferDataList = new HashSet<>();
    final Set<UUID> fail = new HashSet<>();
    final Set<UUID> dup = new HashSet<>();
    final Set<UUID> seen = new HashSet<>();
    
    for (InputDTO dto : providedDTOS) {
        if (Objects.isNull(dto.getDate())) {
            log.error("someError");
            fail.add(dto.getId());
            continue;
        }
    
        Optional<EntityProj> entity = Optional.ofNullable(entityProjMap.get(dto.Id()));
        if (entity.isEmpty()) {
            log.error("somerror");
            fail.add(dto.getId());
            continue;
        }
    
        if (!seen.add(dto.getId())) {
            log.warn("warning that seen");
            dup.add(dto.getId());
            continue;
        }
    
        final SubTransferData transferData = new transferData(params);
    
        subTransferDataList.add(transferData);
    }
    
    if (subTransferDataList.isEmpty()) {
        log.warn("warning that nothing left");
        return new ResultObj(fail, dup, Set.of());
    }
    
    final TransferData transferData = new TransferData(someProvidedId, subTransferDataList);
    final TransferResult result = repo.transferMyData(transferData);
    fail.addAll(result.getFail());
    duo.addAll(result.getDups());
    
    return new ResultObj(fail, dup, result.getStored());
    

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *