Сообщение Re: Уменьшить Cognitive Complexity метода. рефакторинг. от 14.09.2018 5:04
Изменено 14.09.2018 5:09 Artem Korneev
Re: Уменьшить Cognitive Complexity метода. рефакторинг.
Здравствуйте, HAXT, Вы писали:
HAX>Хотелось бы какое то элегантное решение, может быть предикатами или лямбдами переделать. Есть какие идеи ?
Ну сходу пока вот что-то такое получилось.
Вместо "ValueType" нужно подставить тип записи. Я так предполагаю, что там String, но не уверен — там в одном месте идет List<String>, поэтому вписал как ValueType.
zoneId и dataFormat воткнул как есть — я не знаю, откуда оно приходит, но их нужно будет отправить туда, где определяются правила распаковки данных — в инициализатор dataSources.
HAX>Хотелось бы какое то элегантное решение, может быть предикатами или лямбдами переделать. Есть какие идеи ?
Ну сходу пока вот что-то такое получилось.
Вместо "ValueType" нужно подставить тип записи. Я так предполагаю, что там String, но не уверен — там в одном месте идет List<String>, поэтому вписал как ValueType.
zoneId и dataFormat воткнул как есть — я не знаю, откуда оно приходит, но их нужно будет отправить туда, где определяются правила распаковки данных — в инициализатор dataSources.
List<String> getProduct(IndexedDraftOrderDto o) {
return Optional.ofNullable(o.getProducts()).orElse(Collections.emptyList()).stream()
.map(IndexedProductDto::getProductName)
.collect(Collectors.toList());
}
Map<String, Function<IndexedDraftOrderDto, ValueType>> dataSources = new HashMap<> {{
put(ExportColumnEnum.ORDER_CODE, (o) -> o.getOrderCode());
put(ExportColumnEnum.STATUS, (o) -> isNull(o.getOrderState()) ? "" : ORDER_STATE_DESC.get(o.getOrderState()));
put(ExportColumnEnum.CUSTOMER, (o) -> nonNull(o.getCustomer()) ? o.getCustomer().getName() : "");
put(ExportColumnEnum.ANIMAL_COUNT, (o) -> o.getNumberOfAnimals());
put(ExportColumnEnum.SAVED, (o) -> formatDate(o.getSavedDate(), zoneId, dateFormat));
put(ExportColumnEnum.PRODUCT, (o) -> getProduct(o));
put(ExportColumnEnum.MARKET, (o) -> o.getMarket());
}}
private void fillCvsColumnsValues(ExportOrderRequestDto request, CsvBuilder csvBuilder, PageDto<IndexedDraftOrderDto> searchOrders) {
var columns = request.getColumns();
for (IndexedDraftOrderDto o: searchOrders.getContent()) {
dataSources.forEach((column, extractor) -> {
if (columns.contains(column)) {
csvBuilder.addNextColumnValue(extractor.apply(o));
}
}
}
csvBuilder.endRow();
}
Re: Уменьшить Cognitive Complexity метода. рефакторинг.
Здравствуйте, HAXT, Вы писали:
HAX>Хотелось бы какое то элегантное решение, может быть предикатами или лямбдами переделать. Есть какие идеи ?
Ну сходу пока вот что-то такое получилось.
zoneId и dataFormat воткнул как есть — я не знаю, откуда оно приходит, но их нужно будет отправить туда, где определяются правила распаковки данных — в инициализатор dataSources.
HAX>Хотелось бы какое то элегантное решение, может быть предикатами или лямбдами переделать. Есть какие идеи ?
Ну сходу пока вот что-то такое получилось.
zoneId и dataFormat воткнул как есть — я не знаю, откуда оно приходит, но их нужно будет отправить туда, где определяются правила распаковки данных — в инициализатор dataSources.
List<String> getProduct(IndexedDraftOrderDto o) {
return Optional.ofNullable(o.getProducts()).orElse(Collections.emptyList()).stream()
.map(IndexedProductDto::getProductName)
.collect(Collectors.toList());
}
Map<String, Function<IndexedDraftOrderDto, String>> dataSources = new HashMap<> {{
put(ExportColumnEnum.ORDER_CODE, (o) -> o.getOrderCode());
put(ExportColumnEnum.STATUS, (o) -> isNull(o.getOrderState()) ? "" : ORDER_STATE_DESC.get(o.getOrderState()));
put(ExportColumnEnum.CUSTOMER, (o) -> nonNull(o.getCustomer()) ? o.getCustomer().getName() : "");
put(ExportColumnEnum.ANIMAL_COUNT, (o) -> o.getNumberOfAnimals());
put(ExportColumnEnum.SAVED, (o) -> formatDate(o.getSavedDate(), zoneId, dateFormat));
put(ExportColumnEnum.PRODUCT, (o) -> getProduct(o));
put(ExportColumnEnum.MARKET, (o) -> o.getMarket());
}}
private void fillCvsColumnsValues(ExportOrderRequestDto request, CsvBuilder csvBuilder, PageDto<IndexedDraftOrderDto> searchOrders) {
var columns = request.getColumns();
for (IndexedDraftOrderDto o: searchOrders.getContent()) {
dataSources.forEach((column, extractor) -> {
if (columns.contains(column)) {
csvBuilder.addNextColumnValue(extractor.apply(o));
}
}
}
csvBuilder.endRow();
}