数据对象转换——实例方法与静态方法
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" 转换委托等。听起来是一个更灵活的选项对我来说。
假设有两个对象,例如。一个代表 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" 转换委托等。听起来是一个更灵活的选项对我来说。