Сообщение Re: Уменьшить Cognitive Complexity метода. рефакторинг. от 25.09.2018 9:31
Изменено 25.09.2018 9:36 omgOnoz
Re: Уменьшить Cognitive Complexity метода. рефакторинг.
Здравствуйте, HAXT, Вы писали:
К самому коду есть претензии:
Сложность: все проверки if выполняются на каждой итерации цикла, хотя очевидно что достаточно их выполнить 1 раз (до цикла).
Стиль:
Что это вообще такое ORDER_STATE_DESC.get?
По сути просится, что-то вроде chain consumer-а:
К самому коду есть претензии:
Сложность: все проверки if выполняются на каждой итерации цикла, хотя очевидно что достаточно их выполнить 1 раз (до цикла).
Стиль:
if (request.getColumns().contains(ExportColumnEnum.STATUS)) {
csvBuilder.addNextColumnValue(isNull(o.getOrderState()) ? "" : ORDER_STATE_DESC.get(o.getOrderState()));
}
if (request.getColumns().contains(ExportColumnEnum.CUSTOMER)) {
String name = nonNull(o.getCustomer()) ? o.getCustomer().getName() : "";
csvBuilder.addNextColumnValue(name);
}Что это вообще такое ORDER_STATE_DESC.get?
По сути просится, что-то вроде chain consumer-а:
private void fillCvsColumnsValues(ExportOrderRequestDto request, ZoneId zoneId, DateTimeFormatter dateFormat,
CsvBuilder csvBuilder, PageDto<IndexedDraftOrderDto> searchOrders) {
Consumer<IndexedDraftOrderDto> processor = t -> {};
if (request.getColumns().contains(ExportColumnEnum.ORDER_CODE)) {
processor = processor.andThen((o) -> csvBuilder.addNextColumnValue(o.getOrderCode()));
}
if (request.getColumns().contains(ExportColumnEnum.STATUS)) {
processor = processor.andThen((o) -> csvBuilder.addNextColumnValue(isNull(o.getOrderState()) ? "" : ORDER_STATE_DESC.get(o.getOrderState())));
}
if (request.getColumns().contains(ExportColumnEnum.CUSTOMER)) {
processor = processor.andThen((o) -> csvBuilder.addNextColumnValue(nonNull(o.getCustomer()) ? o.getCustomer().getName() : ""));
}
if (request.getColumns().contains(ExportColumnEnum.ANIMAL_COUNT)) {
processor = processor.andThen((o) -> csvBuilder.addNextColumnValue(o.getNumberOfAnimals()));
}
if (request.getColumns().contains(ExportColumnEnum.SAVED)) {
processor = processor.andThen((o) -> csvBuilder.addNextColumnValue(formatDate(o.getSavedDate(), zoneId, dateFormat)));
}
if (request.getColumns().contains(ExportColumnEnum.PRODUCT)) {
processor = processor.andThen((o) -> {
List<String> products = Optional.ofNullable(o.getProducts()).orElse(Collections.emptyList()).stream()
.map(IndexedProductDto::getProductName)
.collect(Collectors.toList());
csvBuilder.addNextColumnValue(products);
});
}
if (request.getColumns().contains(ExportColumnEnum.MARKET)) {
processor = processor.andThen((o) -> csvBuilder.addNextColumnValue(o.getMarket()));
}
processor.andThen(o -> csvBuilder.endRow());
Arrays.asList(searchOrders.getContent()).forEach(processor);
}Re: Уменьшить Cognitive Complexity метода. рефакторинг.
Здравствуйте, HAXT, Вы писали:
К самому коду есть претензии:
Сложность: все проверки if выполняются на каждой итерации цикла, хотя очевидно что достаточно их выполнить 1 раз (до цикла).
Стиль:
Что это вообще такое ORDER_STATE_DESC.get?
Для начала просится, что-то вроде chain consumer-а:
К самому коду есть претензии:
Сложность: все проверки if выполняются на каждой итерации цикла, хотя очевидно что достаточно их выполнить 1 раз (до цикла).
Стиль:
if (request.getColumns().contains(ExportColumnEnum.STATUS)) {
csvBuilder.addNextColumnValue(isNull(o.getOrderState()) ? "" : ORDER_STATE_DESC.get(o.getOrderState()));
}
if (request.getColumns().contains(ExportColumnEnum.CUSTOMER)) {
String name = nonNull(o.getCustomer()) ? o.getCustomer().getName() : "";
csvBuilder.addNextColumnValue(name);
}Что это вообще такое ORDER_STATE_DESC.get?
Для начала просится, что-то вроде chain consumer-а:
private void fillCvsColumnsValues(ExportOrderRequestDto request, ZoneId zoneId, DateTimeFormatter dateFormat,
CsvBuilder csvBuilder, PageDto<IndexedDraftOrderDto> searchOrders) {
Consumer<IndexedDraftOrderDto> processor = t -> {};
if (request.getColumns().contains(ExportColumnEnum.ORDER_CODE)) {
processor = processor.andThen((o) -> csvBuilder.addNextColumnValue(o.getOrderCode()));
}
if (request.getColumns().contains(ExportColumnEnum.STATUS)) {
processor = processor.andThen((o) -> csvBuilder.addNextColumnValue(isNull(o.getOrderState()) ? "" : ORDER_STATE_DESC.get(o.getOrderState())));
}
if (request.getColumns().contains(ExportColumnEnum.CUSTOMER)) {
processor = processor.andThen((o) -> csvBuilder.addNextColumnValue(nonNull(o.getCustomer()) ? o.getCustomer().getName() : ""));
}
if (request.getColumns().contains(ExportColumnEnum.ANIMAL_COUNT)) {
processor = processor.andThen((o) -> csvBuilder.addNextColumnValue(o.getNumberOfAnimals()));
}
if (request.getColumns().contains(ExportColumnEnum.SAVED)) {
processor = processor.andThen((o) -> csvBuilder.addNextColumnValue(formatDate(o.getSavedDate(), zoneId, dateFormat)));
}
if (request.getColumns().contains(ExportColumnEnum.PRODUCT)) {
processor = processor.andThen((o) -> {
List<String> products = Optional.ofNullable(o.getProducts()).orElse(Collections.emptyList()).stream()
.map(IndexedProductDto::getProductName)
.collect(Collectors.toList());
csvBuilder.addNextColumnValue(products);
});
}
if (request.getColumns().contains(ExportColumnEnum.MARKET)) {
processor = processor.andThen((o) -> csvBuilder.addNextColumnValue(o.getMarket()));
}
processor.andThen(o -> csvBuilder.endRow());
Arrays.asList(searchOrders.getContent()).forEach(processor);
}