【问题标题】:Design pattern for converting one model to another model将一个模型转换为另一个模型的设计模式
【发布时间】:2012-10-25 14:09:18
【问题描述】:

基本上,我的应用程序中有许多对象,我必须在发送请求之前将它们转换为另一个第三方对象。收到响应后,我必须将这些对象转换回我的应用程序支持的对象。

我可以使用什么模式在 Java 中将一个模型对象转换为另一个?

【问题讨论】:

标签: java design-patterns


【解决方案1】:

我认为这没有特定的模式,但您只需要一个“转换器”或“翻译器”类来接收一个对象并返回另一个对象:

MyObject convert(ThirdPartyObject obj);
ThirdPartyObject convert(MyObject obj);

【讨论】:

    【解决方案2】:

    适配器或外观模式应该可以解决您的问题:

    适配器: http://www.youtube.com/watch?v=TriX8OiEhOU

    立面: http://www.youtube.com/watch?v=WLjvNpP6yeQ

    【讨论】:

    • 为什么Facade模式能解决他的问题? "provide a simplified interface to a larger body of code"不是用的那种模式吗?我认为您不应该将转换逻辑放在外观中。
    • Adapter 也是一种矫枉过正的做法,仅当您需要在基础模型中更改数据以反映在新模型中时才应使用该适配器。转换器类也有助于分离职责。
    【解决方案3】:

    AdapterFacade 是结构模式。您没有任何模式可以满足对象转换

    在创建模式方面,Builder 是您能想到的一种模式。

    Builder 模式通常用于构建带有强制和可选参数的对象。但是你可以通过构建必要的对象来微调它。

    你也可以在没有模式的情况下解决问题。您可以使用对象组合编写自己的方法来转换对象

    通过代码示例查看相关的 SE 问题:

    How to prune an object of some of its fields in Java?

    【讨论】:

      【解决方案4】:

      您可能正在寻找适配器模式:http://en.wikipedia.org/wiki/Adapter_pattern

      【讨论】:

      • 是的,我可以,但就我而言,我只有两个简单的 POJO,没有接口。没有其他模式或更好的方式来进行转换吗?
      • 您可以看一下代理模式,但实际上这取决于您的偏好和环境。
      【解决方案5】:

      确定对象的上下文有点困难,但是看看汇编器模式,虽然从技术上讲不是设计模式。 Assembler 类用于从一个对象映射到另一个对象,特别是当一个对象是 DTO(有点像您的响应对象)到 Domain 对象时。 Dozer 框架可以帮助您完成其中一些繁琐的转换。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-14
        • 2015-05-22
        • 1970-01-01
        • 2015-12-11
        • 1970-01-01
        • 2012-12-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多