Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通用DTO转换器模式_Java_Dto - Fatal编程技术网

Java 通用DTO转换器模式

Java 通用DTO转换器模式,java,dto,Java,Dto,我有很多DTO对象。每个dto类都有方法 convertDTO(实体) convertdolist(列表实体) 我想为我的dto对象转换器使用设计模式。我可以使用哪种设计模式?如何使用 推土机框架很好。但我想写一个通用模式 有许多不同的解决方案。你可以在这里找到关于它的讨论 我不太清楚您在这里想做什么,但纯粹基于您编写的内容,我会说,制作一个由所有DTO实现的接口,可能带有通用参数。如果您使用Java8,我建议按照建议使用DTO到域转换器模式 下面是一个实现示例: 通用转换器 public

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

  • convertDTO(实体)
  • convertdolist(列表实体)
我想为我的dto对象转换器使用设计模式。我可以使用哪种设计模式?如何使用


推土机框架很好。但我想写一个通用模式

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

我不太清楚您在这里想做什么,但纯粹基于您编写的内容,我会说,制作一个由所有DTO实现的接口,可能带有通用参数。

如果您使用Java8,我建议按照建议使用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;
    }
}
此模式的优势在于易于使用,因为您可以传递单个实体或一组实体,其中可以有其他嵌套的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()));
        }

    }

}

模式的存在是为了解决问题。你想解决什么问题?
class Consumer {

    @Inject
    AccountCreateRequestConverter accountCreateInputConverter;

    void doSomething() {

        service.registerAccount(accountCreateInputConverter.apply(input));

    }

}
class ParentDTOConverter {

    @Inject
    ChildDTOConverter childDTOConverter;

    void doSomething() {

        @Override
        public ParentDTOOutput apply(ParentDTOInput input) {
            ParentDTOOutput output = new ParentDTOOutput();
            output.setChildList(childDTOConverter.convert(input.getChildList()));
        }

    }

}