我有一个方法可以完成多项任务。它是应用程序业务逻辑的一部分,但由于有许多 if-then
和 try-catch
block 以及许多 log<,因此可读性很差
调用。
public class MyClass {
boolean createReport, sendReport, warnIfErrors;
public void archiveAll() {
if (createReport) {
//... ...
}
if (sendReport) {
//... ...
}
if (warnIfErrors) {
//... ...
}
}
想法是将任务移动到临时方法中,并有一个一目了然的“archiveAll”方法:
public void archiveAll() {
doCreateReport();
doSendReport();
doWarnIfErrors();
}
但是在这样做的同时,出现了两个问题:
- 如果所有方法都使用一个局部变量,我会把它作为类字段移动,但这不是好的设计
- 我也想将测试
if (createReport)
移到方法doCreateReport
中,因为部分复杂性源自已完成的测试。不过,这会使子方法的内聚性很差。
最佳答案
如果您有很多在它们之间共享的局部变量,那么创建一个私有(private)类来将它们存储在一起可能是有意义的,甚至可以这样做:
MyReport report = new MyReport(); // or MyReport.doCreateReport(); if it makes more sense
report.send();
report.warnIfErrors();
同样,这实际上取决于函数当前是否足够大以保证这样的东西。
如果您可以只将这些公共(public)变量作为参数传递而无需大量参数列表,那么就这样做吧。
关于java - 降低方法的复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6169162/