假设有两个对象,例如一个表示公共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方面更好?他们中的任何一个都可以被视为最佳实践吗?或者我们应该采用其他解决方案?
简单地说 - 在这种情况下,最好的方法是什么?
答案 0 :(得分:1)
您正在考虑这样一种情况,即您有两个类似(并且部分可互换)的类,但每个类更适合特定用例的需求。这非常适用于"阵列与收藏"话题。在JDK中,您可以获得便于转换的辅助类(utils):请参阅java.util.Arrays.asList()
。
这就是我的方式 - 创建一个单独的类来进行转换。这样你就不会把这些类耦合起来,你可以进一步扩展转换选项(即到C类),创建"可插拔"转换代表等对我来说听起来更灵活。
答案 1 :(得分:0)
第二个将是很好的方法,因为它遵循设计模式并允许灵活性