数据对象转换——实例方法vs静态方法



假设有两个对象,例如,一个代表公共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;
    }
}

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

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

您正在考虑这样一种情况:您有两个相似的类(并且部分可互换),但是每个类都更适合特定用例的需要。这非常适用于"数组与集合"主题。在JDK中,你有帮助类(utils)来促进转换:参见java.util.Arrays.asList()

这就是我要用的方法-创建一个单独的类来进行转换。这样你就不会耦合类,你可以进一步扩展转换选项(即到类C),创建"可插入的"转换委托,等等。

第二种方法比较好,因为它遵循设计模式并允许灵活性

最新更新