对象转换的设计模式和约定
Design patterns and conventions for object conversion
在对象转换方面,以下两种方法的首选方法是什么?
使用 asX() 方法进行对象转换
public class Foo {
int foo;
public Bar asBar() {
return new Bar(foo);
}
}
class Bar {
int bar;
public Bar(int bar) {
this.bar = bar;
}
}
使用构造函数进行对象转换
public class Foo {
int foo;
}
class Bar {
int bar;
public Bar(int bar) {
this.bar = bar;
}
public Bar(Foo foo) {
this.bar = foo.foo;
}
}
我不确定这两种方法(关于可维护性、可伸缩性 et.c)与另一种相比的优点。什么是既定标准?
正如 Paul Boddington 在评论中指出的那样,我承认这个问题非常广泛,但希望在这个问题结束之前进行一些有用的讨论。
我看到很多使用并且我个人喜欢的是很多 JDK 本身使用的样式,它涉及目标 class 中的静态工厂方法。最终目标是让代码易于阅读。
例如:
Integer.fromString("42")
从 OP 中的示例借出:
public class Foo {
int foo;
}
class Bar {
int bar;
public static Bar fromFoo(Foo foo) {
return new Bar(foo.foo);
}
public Bar(int bar) {
this.bar = bar;
}
}
这样就可以从 Foo
创建 Bar
并且代码在这样做时可读性很好:
Bar bar = Bar.fromFoo(foo);
它读起来几乎像英语,而不是 COBOL!
在对象转换方面,以下两种方法的首选方法是什么?
使用 asX() 方法进行对象转换
public class Foo {
int foo;
public Bar asBar() {
return new Bar(foo);
}
}
class Bar {
int bar;
public Bar(int bar) {
this.bar = bar;
}
}
使用构造函数进行对象转换
public class Foo {
int foo;
}
class Bar {
int bar;
public Bar(int bar) {
this.bar = bar;
}
public Bar(Foo foo) {
this.bar = foo.foo;
}
}
我不确定这两种方法(关于可维护性、可伸缩性 et.c)与另一种相比的优点。什么是既定标准?
正如 Paul Boddington 在评论中指出的那样,我承认这个问题非常广泛,但希望在这个问题结束之前进行一些有用的讨论。
我看到很多使用并且我个人喜欢的是很多 JDK 本身使用的样式,它涉及目标 class 中的静态工厂方法。最终目标是让代码易于阅读。
例如:
Integer.fromString("42")
从 OP 中的示例借出:
public class Foo {
int foo;
}
class Bar {
int bar;
public static Bar fromFoo(Foo foo) {
return new Bar(foo.foo);
}
public Bar(int bar) {
this.bar = bar;
}
}
这样就可以从 Foo
创建 Bar
并且代码在这样做时可读性很好:
Bar bar = Bar.fromFoo(foo);
它读起来几乎像英语,而不是 COBOL!