【问题标题】:Generic DTO converter Pattern通用 DTO 转换器模式
【发布时间】:2013-07-01 21:11:44
【问题描述】:

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

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

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

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

【问题讨论】:

  • 存在解决问题的模式。你想解决什么问题?

标签: java dto


【解决方案1】:

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

下面是一个实现示例:

通用转换器

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

    }

}

【讨论】:

    【解决方案2】:

    有许多不同的解决方案。你可以在这里找到关于它的讨论 Object Conversion Pattern

    【讨论】:

      【解决方案3】:

      我不太确定您在这里尝试做什么,但纯粹基于您编写的内容,我会说创建一个由您的所有 DTO 实现的接口,可能带有通用参数。

      【讨论】:

        猜你喜欢
        • 2018-06-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-10
        • 2019-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        相关资源
        最近更新 更多