У меня проблема с разделением моего класса на более мелкие части. У нас плохая ситуация, когда Dto содержит 30 различных Dtos. Теперь нам нужно это отображение selectDto, которое также заставляет нас создать 30 различных классов отображения. (Мы также используем mapstruct в проекте, этот сценарий отличается от того, который может обрабатывать mapstruct) *
Теперь, где начинается моя проблема:
Я сделал все отображения в соответствующем классе. В базе selectDto у меня в конструкторе 26 картографов, что ужасно:
SonarLint: конструктор имеет 26 параметров, что превышает 7 разрешенных
Я думаю, как расколоть такой сценарий, но я не мог найти способ. Есть предложения?
Мой конструктор, содержащий 26 параметров:
AssignedSelectMapper(AssignedOpDtoMapper assignedOpDtoMapper,
AssignedOrderDtoMapper assignedOrderDtoMapper
// many more constructor parameters
) {
this.assignedOptionCodeDtoMapper = assignedOptionCodeDtoMapper;
this.assignedOrderCriteriaDtoMapper = assignedOrderCriteriaDtoMapper;
// all settings
}
моя публичная функция для сопоставления, которая вызывает частные функции для каждого сопоставления:
public List<AssignedSelect> assignSelectFrom(SelectDto selectDto) {
Objects.requireNonNull(selectionDto, "selectionDto can not be NULL");
List<AssignedSelect> assignedSelects= new ArrayList<>();
assignedSelects.addAll(this.mapOps(selectionDto.getOps()));
assignedSelects.addAll(this.mapOra(selectionDto.getOra()));
assignedSelects.addAll(this.mapOrs(selectionDto.getOrs()));
assignedSelects.addAll(this.mapSs(selectionDto.getSs()));
assignedSelects.addAll(this.mapDels(selectionDto.getDels()));
assignedSelects.addAll(this.mapMs(selectionDto.getMs()));
assignedSelects.addAll(this.mapBrs(selectionDto.getBrs()));
assignedSelects.addAll(this.mapEqs(selectionDto.getEqs()));
assignedSelects.addAll(this.mapPaints(selectionDto.getPaints()));
assignedSelects.addAll(this.mapBas(selectionDto.getBas()));
// more ...
// and more...
return assignedSelects;
}
// пример моей приватной функции, которая вызывает соответствующий маппер, где все мои приватные функции состоят из разного рода классов, таких как OptionCodeDto. Они не выходят из одного интерфейса / класса и не могут.
private List<AssignedSelectionCriteria> mapOps(List<OptionCodeDto> optionCodeDtos) {
return this.assignedOpDtoMapper.mapCriterias(opDtos);
}
// а вот обратное отображение. Который мне нужен другой тип класса из моего отображения возвращаемого типа
// this is my public function for mapping.
public void assignSelectionTo(SelectionDto selectionDto,
List<AssignedSelectionCriteria> assignedSelectionCriterias) {
setOptionCodes(selectionDto, copyCriterias);
setOrderCriteria(selectionDto, copyCriterias);
// many more
}
и это частная функция обратного отображения, которая для каждого класса отображения возвращает различные виды dto, такие как OptionCodeDto, где ни один из этих Dto не выходит из одного класса.
private void setOptionCodes(SelectionDto selectionDto, List<AssignedSelectionCriteria> assignedSelectionCriterias) {
// this is where I have trouble, each mapping returns different Dto's
List<OptionCodeDto> optionCodeDtos =
this.assignedOptionCodeDtoMapper.mapAssignedCriterias(assignedSelectionCriterias;
selectionDto.setOptionCodes(optionCodeDtos);
}