gpt4 book ai didi

java - 通用 DTO 转换器模式

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:06:15 24 4
gpt4 key购买 nike

我有很多 DTO 对象。每个 dto 类都有方法

  • convertDTO(Entity entity)
  • convertDTOList(List<Entity> entity)

我想为我的dto 对象转换器 使用设计模式。我可以使用哪种设计模式以及如何使用?

Dozer 框架很好。但我想写一个通用模式。

最佳答案

如果您使用 Java8,我建议按照建议使用 DTO 到域转换器模式 here

下面是一个实现示例:

通用转换器

public interface GenericConverter<I, O> extends Function<I, O> {

default O convert(final I input) {
O output = null;
if (input != null) {
output = this.apply(input);
}
return output;
}

default List<O> convert(final List<I> input) {
List<O> output = new ArrayList<O>();
if (input != null) {
output = input.stream().map(this::apply).collect(toList());
}
return output;
}
}

ConverterDTO

public class AccountCreateRequestConverter implements GenericConverter<AccountCreateRequest, AccountOutput> {

@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()));
}

}

}

关于java - 通用 DTO 转换器模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17413788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com