Re: Уменьшить Cognitive Complexity метода. рефакторинг.
От: jusf  
Дата: 20.09.18 06:10
Оценка:
Привет.
Можно сделать так:
    private void fillCvsColumnsValues(ExportOrderRequestDto request, ZoneId zoneId, DateTimeFormatter dateFormat,
                                      CsvBuilder csvBuilder, PageDto<IndexedDraftOrderDto> searchOrders) {

        ReportBuilder builder = new ReportBuilder(csvBuilder, request);

        for (IndexedDraftOrderDto o : searchOrders.getContent()) {

            builder.addNextColumnValue(ExportColumnEnum.ORDER_CODE, o::getOrderCode);

            builder.addNextColumnValue(ExportColumnEnum.STATUS, () ->
                    nonNull(o.getOrderState()) ? ORDER_STATE_DESC.get(o.getOrderState()) : "");

            builder.addNextColumnValue(ExportColumnEnum.CUSTOMER, () ->
                    nonNull(o.getCustomer()) ? o.getCustomer().getName() : "");

            builder.addNextColumnValue(ExportColumnEnum.ANIMAL_COUNT, o::getNumberOfAnimals);

            builder.addNextColumnValue(ExportColumnEnum.SAVED, () ->
                    formatDate(o.getSavedDate(), zoneId, dateFormat));

            builder.addNextColumnValue(ExportColumnEnum.PRODUCT, () ->
                    ofNullable(o.getProducts()).orElse(Collections.emptyList()).stream()
                            .map(IndexedProductDto::getProductName)
                            .collect(Collectors.toList()));

            builder.addNextColumnValue(ExportColumnEnum.MARKET, o::getMarket);

            builder.endRow();
        }
    }

    class ReportBuilder {
        private CsvBuilder csvBuilder;
        private ExportOrderRequestDto request;

        public ReportBuilder(CsvBuilder csvBuilder, ExportOrderRequestDto request) {
            this.csvBuilder = csvBuilder;
            this.request = request;
        }

        public <T> void addNextColumnValue(ExportColumnEnum exportColumn, Supplier<T> supplier) {
            if (request.getColumns().contains(exportColumn)) {
                csvBuilder.addNextColumnValue(supplier.get());
            }
        }

        public void endRow() {
            csvBuilder.endRow();
        }
    }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.