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

Data objects conversion - instance method vs static method

假设有两个对象,例如。一个代表 public 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 个 class 相似(并且部分可互换),但每个都更适合特定用例的需求。这几乎适用于 "Array vs. Collection" 主题。在 JDK 中,您将获得有助于转换的助手 classes(实用程序):请参阅 java.util.Arrays.asList().

这就是我要采用的方式 - 创建一个单独的 class 来进行转换。这样你就不会耦合 classes 并且你可以进一步扩展转换选项(即到 class C),创建 "pluggable" 转换委托等。听起来是一个更灵活的选项对我来说。