Информация об изменениях

Сообщение Re: Уменьшить Cognitive Complexity метода. рефакторинг. от 02.10.2018 11:04

Изменено 02.10.2018 16:51 anton_t

Re: Уменьшить Cognitive Complexity метода. рефакторинг.
Здравствуйте, HAXT, Вы писали:

HAX>Коллеги, подскажите пожалуйста способы, которыми можно уменьшить когнитивную сложность метода, средствами Java 8

HAX>Хотелось бы какое то элегантное решение, может быть предикатами или лямбдами переделать. Есть какие идеи ?

Как-то так:

 private void addColumn(ExportOrderRequestDto request, ExportColumnEnum column, Supplier<Object> supplier) {
            if (request.getColumns().contains(column)) {
                csvBuilder.addNextColumnValue(supplier.get());
            }   
 }
 
 private void fillCvsColumnsValues(ExportOrderRequestDto request, ZoneId zoneId, DateTimeFormatter dateFormat,
                                      CsvBuilder csvBuilder, PageDto<IndexedDraftOrderDto> searchOrders) {
        for (IndexedDraftOrderDto o : searchOrders.getContent()) {
            addColumn(request, ExportColumnEnum.ORDER_CODE, () -> o.getOrderCode());
            addColumn(request, ExportColumnEnum.STATUS, () -> o.getOrderState()) ? "" : ORDER_STATE_DESC.get(o.getOrderState()));
            addColumn(request, ExportColumnEnum.CUSTOMER, () -> o.getOrderState()) ? "" : ORDER_STATE_DESC.get(o.getOrderState()));
            addColumn(request, ExportColumnEnum.ANIMAL_COUNT, () -> o.getNumberOfAnimals());
            addColumn(request, ExportColumnEnum.SAVED, () -> formatDate(o.getSavedDate(), zoneId, dateFormat));
            addColumn(request, ExportColumnEnum.PRODUCT, () -> 
                                                Optional.ofNullable(o.getProducts()).orElse(
                                                  Collections.emptyList()).stream()
                                                    .map(IndexedProductDto::getProductName)
                                                    .collect(Collectors.toList()));
            addColumn(request, ExportColumnEnum.MARKET, () -> o.getMarket());

            csvBuilder.endRow();
        }


Код не компилировал, да и доступа к твоим исходникам у меня нет, так что может понадобиться доработка.
Re: Уменьшить Cognitive Complexity метода. рефакторинг.
Здравствуйте, HAXT, Вы писали:

HAX>Коллеги, подскажите пожалуйста способы, которыми можно уменьшить когнитивную сложность метода, средствами Java 8

HAX>Хотелось бы какое то элегантное решение, может быть предикатами или лямбдами переделать. Есть какие идеи ?

Как-то так:

 private void addColumn(ExportOrderRequestDto request, ExportColumnEnum column, Supplier<Object> supplier) {
            if (request.getColumns().contains(column)) {
                csvBuilder.addNextColumnValue(supplier.get());
            }   
 }
 
 private void fillCvsColumnsValues(ExportOrderRequestDto request, ZoneId zoneId, DateTimeFormatter dateFormat,
                                      CsvBuilder csvBuilder, PageDto<IndexedDraftOrderDto> searchOrders) {
        for (IndexedDraftOrderDto o : searchOrders.getContent()) {
            addColumn(request, ExportColumnEnum.ORDER_CODE, () -> o.getOrderCode());
            addColumn(request, ExportColumnEnum.STATUS, () -> o.getOrderState()) ? "" : ORDER_STATE_DESC.get(o.getOrderState()));
            addColumn(request, ExportColumnEnum.CUSTOMER, () -> o.getOrderState()) ? "" : ORDER_STATE_DESC.get(o.getOrderState()));
            addColumn(request, ExportColumnEnum.ANIMAL_COUNT, () -> o.getNumberOfAnimals());
            addColumn(request, ExportColumnEnum.SAVED, () -> formatDate(o.getSavedDate(), zoneId, dateFormat));
            addColumn(request, ExportColumnEnum.PRODUCT, () -> Optional.ofNullable(o.getProducts())
                                                    .orElse(Collections.emptyList()).stream()
                                                    .map(IndexedProductDto::getProductName).collect(Collectors.toList()));
            addColumn(request, ExportColumnEnum.MARKET, () -> o.getMarket());

            csvBuilder.endRow();
        }


Код не компилировал, да и доступа к твоим исходникам у меня нет, так что может понадобиться доработка.