【问题标题】:convert java domain model from domain A to domain B将java域模型从域A转换为域B
【发布时间】:2013-08-06 07:26:39
【问题描述】:

我有一个域模型 A,我想将其转换为另一个域模型 B。因此,对于每个模型元素,我需要将其转换为 B 的一个或多个元素。

域 A 看起来非常简单,如下所示:

public class Model
{
    public List<ModelElement> elements;
}

public class ModelElement
{
    public SubElement subElement;
}

public class SubElement
{
    public String someData;
}

域 B 的样子

public class Layout
{
    public List<Layer> layers;
}

public class Layer
{
    public LayerData layerData;
}

public class LayerData
{
    public int layerNumber;
    public String name;
}

这真的很简单,我的模型有点复杂,但为了解释我认为已经足够了。

所以我的问题是,什么是转换器的好方法。

我想写一个类,它遍历模型并转换每个元素。到最后我有一个巨大的转换器类,这不是很好。

我的另一种方法是建立一个工厂,为域 A 的每个元素提供一个特定的转换器。然后每个转换器可以调用工厂来获取子元素的转换器。不幸的是,我需要一些元素转换附加数据。因此,要在某些转换器中使用它,我必须将它们传递给所有上层转换器,这听起来也不是很好。

有什么好的方法呢?

感谢您的帮助 西蒙

【问题讨论】:

    标签: java dns transform converter


    【解决方案1】:

    如果您的数据模型是分层且有限的,我会采用第一种方法,但将其职责划分为多个类。让主类发布转换所需的数据。然后它为根(模型/布局)调用一个转换器类,该类转换并调用子转换器(模型元素/层级)等等。诀窍是始终传递对主类的引用,它将像信封或数据存储一样工作到转换器。通过这样做,您将获得具有单一职责的良好解耦设计:提供数据、转换单个类等等。

    这只是我要设计的草图。鉴于信息,这是我能画的最好的。您可能想要对其进行调整并添加一些抽象(例如,减少信封类数据发布的接口)。

    【讨论】:

      【解决方案2】:

      您可能想查看DOZER。该库将允许字段的通配符转换(如果它们共享相同的名称)并且还允许自定义转换器。

      【讨论】:

        猜你喜欢
        • 2018-03-09
        • 2012-03-04
        • 1970-01-01
        • 2015-07-15
        • 2018-08-31
        • 2019-10-05
        • 2016-01-21
        • 2012-06-21
        • 2017-03-23
        相关资源
        最近更新 更多