数据对象转换 - 实例方法与静态方法

时间:2016-10-24 06:11:39

标签: java static-methods data-conversion

假设有两个对象,例如一个表示公共API(JSON),另一个表示模型(JPA实体)。它们有一些差异,但大多数时间字段都很常见。

class A {
    String name;
}

class B {
    String name;
}

请注意,为简单起见,我保持这些类非常简单。

我们必须将一个转换为另一个,以使此设计正常工作。

一方面我们有实例方法。这似乎是直观的方法。我们已经有了一个对象,所以实例方法似乎是逻辑解决方案。访问领域很容易。它也易于阅读和理解代码。它将一个物体与另一个物体联系在一起,但无论如何它们都是一对物。

static class A {
    String name;

    B toB() {
        B b = new B();
        b.setName(name);
        return b;
    }
}

另一种方法是使用静态方法。这似乎更像是一个建设者模式。对象是基于依赖性构建的。如果需要,转换方法可能会过载并使用不同的输入,这增加了灵活性。然而,静态方法通常不适用于OOP范例。

static class A {
    String name;

    static A from(B b) {
        A a = new A();
        a.setName(b.getName());
        return a;
    }
}

现在,团队之间正在讨论哪种方法在OOP方面更好?他们中的任何一个都可以被视为最佳实践吗?或者我们应该采用其他解决方案?

简单地说 - 在这种情况下,最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

您正在考虑这样一种情况,即您有两个类似(并且部分可互换)的类,但每个类更适合特定用例的需求。这非常适用于"阵列与收藏"话题。在JDK中,您可以获得便于转换的辅助类(utils):请参阅java.util.Arrays.asList()

这就是我的方式 - 创建一个单独的类来进行转换。这样你就不会把这些类耦合起来,你可以进一步扩展转换选项(即到C类),创建"可插拔"转换代表等对我来说听起来更灵活。

答案 1 :(得分:0)

第二个将是很好的方法,因为它遵循设计模式并允许灵活性