我有一个方法可以执行多项任务。它是应用程序业务逻辑的一部分,但由于许多if-then
和try-catch
块以及许多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
中,因为部分复杂性来自于已完成的测试。这使得子方法的内聚性很差。答案 0 :(得分:7)
如果您拥有很多的局部变量,那么将私有类存储在一起可能是有意义的,甚至可能会这样做:
MyReport report = new MyReport(); // or MyReport.doCreateReport(); if it makes more sense
report.send();
report.warnIfErrors();
同样,这实际上取决于该功能目前是否足以保证这样的功能。
如果您只是将这些常见变量作为参数传递而不需要大量参数列表,那么就这样做。
答案 1 :(得分:2)
答案 2 :(得分:1)