我们的应用程序源代码中有很多地方,其中一个类有许多具有相同名称和不同参数的方法。这些方法始终具有“上一个”方法的所有参数,再加上一个。
这是经过长期发展(遗留代码)和这种想法(我相信)的结果:
“ 有一个方法M做A,我需要做A +B。好吧,我知道...我将向M添加一个新参数,为此创建一个新方法,将代码从M移到新方法使用一个以上的参数,在那儿执行A + B,然后使用新参数的默认值从M调用新方法。 ”
这是一个示例(类似于Java的语言):
class DocumentHome {
(...)
public Document createDocument(String name) {
// just calls another method with default value of its parameter
return createDocument(name, -1);
}
public Document createDocument(String name, int minPagesCount) {
// just calls another method with default value of its parameter
return createDocument(name, minPagesCount, false);
}
public Document createDocument(String name, int minPagesCount, boolean firstPageBlank) {
// just calls another method with default value of its parameter
return createDocument(name, minPagesCount, false, "");
}
public Document createDocument(String name, int minPagesCount, boolean firstPageBlank, String title) {
// here the real work gets done
(...)
}
(...)
}
我觉得这是错误的。不仅我们不能一直这样添加新参数,而且由于方法之间的所有依赖关系,使得代码难以扩展/更改。
这里有几种方法可以更好地做到这一点:
介绍一个参数对象:
class DocumentCreationParams { String name; int minPagesCount; boolean firstPageBlank; String title; (...) } class DokumentHome { public Document createDocument(DocumentCreationParams p) { // here the real work gets done (...) } }
DocumentHome
在调用之前将参数设置为对象createDocument()
@In DocumentHome dh = null; (...) dh.setName(...); dh.setMinPagesCount(...); dh.setFirstPageBlank(...); Document newDocument = dh.createDocument();
将工作分为不同的方法,并根据需要调用它们:
@In DocumentHome dh = null; Document newDocument = dh.createDocument(); dh.changeName(newDocument, "name"); dh.addFirstBlankPage(newDocument); dh.changeMinPagesCount(new Document, 10);
我的问题:
- 所描述的问题真的有问题吗?
- 您如何看待建议的解决方案?根据您的经验,您更喜欢哪一个?
- 您能想到其他解决方案吗?