如果你使用
Java8,我建议使用DTO来建立域转换器模式,如建议
here
下面是一个实现示例:
GenericConverter
public interface GenericConverter extends Function {
default O convert(final I input) {
O output = null;
if (input != null) {
output = this.apply(input);
}
return output;
}
default List convert(final List input) {
List output = new ArrayList();
if (input != null) {
output = input.stream().map(this::apply).collect(toList());
}
return output;
}
}
ConverterDTO
public class AccountCreateRequestConverter implements GenericConverter {
@Override
public AccountOutput apply(AccountCreateRequest input) {
AccountOutput output = new AccountOutput();
output.setEmail(input.getEmail());
output.setName(input.getName());
output.setLastName(input.getLastName());
output.setPassword(input.getPassword());
return output;
}
}
消费者
消费者阶层:
class Consumer {
@Inject
AccountCreateRequestConverter accountCreateInputConverter;
void doSomething() {
service.registerAccount(accountCreateInputConverter.apply(input));
}
}
这种模式的优势来自于易于使用,因为您可以传递单个实体或实体列表,其中可以使用转换器父类中的专用转换器来转换其他嵌套DTO.
像这样的东西:
嵌套集合DTO转换器示例
class ParentDTOConverter {
@Inject
ChildDTOConverter childDTOConverter;
void doSomething() {
@Override
public ParentDTOOutput apply(ParentDTOInput input) {
ParentDTOOutput output = new ParentDTOOutput();
output.setChildList(childDTOConverter.convert(input.getChildList()));
}
}
}