[英]Structuring a class
我有几种方法需要顺序运行。 他们都生活在同一个阶级。 这样构造它们更好吗?
public class Test{
public Test(){
foo1();
}
private void foo1(){
//do stuff
foo2();
}
private void foo2(){
//do stuff
foo3();
}
private void foo3(){
//do stuff
}
}
或这个。
public class Test{
public Test(){
doFoo();
}
private void doFoo(){
foo1();
foo2();
foo3();
}
private void foo1(){
//do stuff
}
private void foo2(){
//do stuff
}
private void foo3(){
//do stuff
}
}
哪种方法更清楚? 我倾向于第二个示例,但是我不确定具有仅调用其他方法的方法是否是最佳实践。
我认为这取决于操作。 如果操作foo2是foo1的一部分,则应从foo1调用foo2。
如果foo1和foo2是无关的,只是foo操作的一部分,则从foo中调用这两个。
这取决于方法的语义,即调用层次结构更清晰,因此更易于理解。
由于多个原因,第二个示例更好。
首先,您可以编写单元测试来测试foo1
, foo2
和foo3
。 使用第一种方法,您只能对foo1
进行单元测试。
第二,如果将来您必须更改呼叫顺序,则第二种解决方案更好。
这完全取决于这些方法的作用。
如果确实需要依次执行这三个步骤,则版本2更好。
但是,如果它们是“嵌套”步骤,而foo2
是需要在foo1
完成的一部分,那么版本1更好。
第二种情况的示例: writeJavaBeanToFile
将bean转换为Map,然后调用writeJavaMapToFile
,后者将Map转换为String并调用writeStringToFile
。
我可以看到这两种方法各有利弊。 就可读性而言,第二个示例更容易理解。 有一个示例,尽管第一个可能有用。
public class Test{
public Test(){
foo1();
}
private int foo1(){
//do stuff
if(something went wrong) return -1;
foo2();
return 0;
}
private int foo2(){
//do stuff
if(something went wrong) return -1;
foo3();
return 0;
}
private int foo3(){
//do stuff
if(something went wrong) return -1;
return 0;
}
}
根据您希望执行foo3
而定,无论是否发生错误,第二个示例都会更好。 如果仅在foo2
成功的情况下执行foo3
则第一个方法可能会有用。
您应该遵循第二种方法,这也是一种模式-门面模式。 您基本上想按顺序执行3个操作,如果将这3个方法映射为1个方法,则调用会变得更加简单。 这也是外观模式的作用-简化了调用界面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.