我有一个把我的类分成小部分的问题。我们有一个糟糕的情况,一个Dto持有30个不同的Dtos。现在我们需要这个selectDto的映射,这也迫使我们制作30个不同的映射类。(我们在项目中还使用mapstruct,这种情况不同于mapstruct可以处理的情况)
现在我的问题开始了:
我把所有的映射都放在了相应的类中。在base selectDto中,我的构造函数中有26个mapper,这太可怕了:
SonarLint: 构造函数有26个参数,大于7个获授权的参数。
我想出了一种分割这种场景的方法,但是我找不到好的方法。有什么建议吗?
我的构造函数拥有26个参数:
现在我的问题开始了:
我把所有的映射都放在了相应的类中。在base selectDto中,我的构造函数中有26个mapper,这太可怕了:
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);
}
List<OptionCodeDto> optionCodeDto
作为参数,还是类型可能不同? - davidxxx