首先,我说这不是我的代码也不是我的同事的代码。几年前,当我们的公司规模较小时,我们有一些我们需要做的项目,但我们没有能力,因此将它们外包了。现在,我一般都不会反对外包或承包商,但是他们产生的代码库是大量的WTF。话虽这么说,它确实(大部分)有效,所以我认为它在我所见过的外包项目中排名前10%。
随着我们公司的成长,我们尝试将更多的内部开发工作带入公司。这个特殊的项目落在我的腿上,所以我一直在检查,清理,添加测试等。
我看到有一种模式经常重复出现,而且看起来如此令人恐惧,以至于我想知道是否存在某种原因,而我只是看不到它。模式是一个没有公共方法或成员的对象,只是一个公共构造函数,它可以完成对象的所有工作。
例如,(如果很重要,代码是Java的,但是我希望这是一个更普遍的问题):
public class Foo {
private int bar;
private String baz;
public Foo(File f) {
execute(f);
}
private void execute(File f) {
// FTP the file to some hardcoded location,
// or parse the file and commit to the database, or whatever
}
}
如果您想知道,这种类型的代码通常以以下方式调用:
for(File f : someListOfFiles) {
new Foo(f);
}
现在,我很久以前就被告知,在循环中实例化对象通常不是一个好主意,而构造函数应该做最少的工作。查看此代码,似乎最好删除构造函数并创建execute
一个公共静态方法。
我确实问承包商为什么要这样做,我得到的答复是“我们可以根据需要进行更改”。这真的没有帮助。
无论如何,是否有任何理由以任何编程语言来做类似的事情,或者这仅仅是向Daily WTF提交的另一份文件?
public static void main(string[] args)
并听说过对象的开发人员编写的,然后尝试将它们融合在一起。