编写返回void的方法是一个好习惯吗?

Vam*_*ani 10 java return return-value void

我正在研究一个由复杂的对象组合驱动的java编码的复杂企业应用程序.例如:在特定情况下,要执行操作,这是流程:

login() -> 
Followed by defined sequence of 10 to 20 method calls in different classes -> 
Followed by a logout()
Run Code Online (Sandbox Code Playgroud)

在框架内,几乎所有操作(包括登录,注销和许多10到20个方法调用)都没有返回类型.任何错误的行为都由框架处理.说,在登录

public void login(){
try{
 //login actions
 //chained sequence of calls

}catch(){
 // framework handling exceptions and other rollback options
}
}
Run Code Online (Sandbox Code Playgroud)

中间10到20个动作是对框架的不同层次结构的不同对象的方法调用.

随机类看起来像这样:

class someobject{

def variable

void action1(){ do something on variable }
void action2(){ do something on variable }
...
}
Run Code Online (Sandbox Code Playgroud)

变量经常改变状态,这些动作只有一个我觉得很烦人的框架定义的序列.

我会说,或许如果有适当的返回类型或者至少有一些这样的方法,就像在布尔的情况下那样login(),生活将会轻松得多.由于对一系列空隙返回功能的严格遵守,我发现很难通过调试来理解流程,单元测试也成了我的噩梦.

所以现在,我的印象是,编写返回内容的函数总是更好,特别是当涉及一系列操作时.那么,这是一个安全的推定吗?我想对此发表意见.如果我错了,请纠正我.

Ste*_*end 6

方法的最基本的可测试性是通过其返回码。在login您需要(如您所述)的情况下,可以测试您现在是否已登录,并且boolean返回显然是一种方法。否则,您必须检查某些属性,这似乎不必要地是非原子的且复杂的(尽管出于其他原因可能需要)。

对我而言,此论点扩展到任何有意义的方法。使用void返回码非常普遍,但这更多是由于过时的习惯,而不是出于良好的设计原因。简单的属性设置器是一个反例,我敢肯定还有其他一些。

  • 如果您喜欢函数式编程(我是),那么我会更进一步,说void方法是可变状态的标志-这很糟糕。 (2认同)