为什么构造函数是邪恶的?

ash*_*999 2 c# java constructor

我记得读过一篇关于构造者是邪恶的文章(但不能放置它).作者提到构造函数是一种特殊的方法; 但有限制(例如他们不能有返回值).

建设者是邪恶的吗?没有构造函数并且依赖于类似的方法Initialize以及成员变量的默认值是否更好?

(如果你必须确定一种语言,你的答案可以特定于C#或Java.)

Ern*_*ill 6

听起来像Allen Holub.有人可能会说,构造函数只是为了驱动网络流量是邪恶的 :)它们并不比任何其他语言构造更邪恶.他们有好的和坏的影响.当然你无法消除它们 - 没有它们就无法构建物体!

但是,你可以做什么,这就是艾伦正在制作的情况,你是否可以限制你对它们的实际调用,而是在合情合理的情况下支持像你这样的工厂方法Initialize.原因很简单:它减少了类之间的耦合,并且在测试期间或应用程序发展过程中更容易将一个类替换为另一个类.

想象一下,如果你的应用程序有类似的东西

DatabaseConnection dc = new OracleDatabaseConnection(connectionString);
dc.query("...");
Run Code Online (Sandbox Code Playgroud)

并且假设这发生在应用程序的一百个位置.现在,你如何对任何这样做的类进行单元测试?当你切换到Mysql省钱时会发生什么?

但如果你这样做:

DatabaseConnection dc = DatabaseConnectionFactory.get(connectionString);
dc.query("...");
Run Code Online (Sandbox Code Playgroud)

然后要更新您的应用程序,您只需要更改DatabaseConnectionFactory.get()返回的内容,并且可以通过配置文件进行控制.避免显式使用构造函数可以使代码更加灵活.

编辑:我找不到"施工人员"的文章,但这里的延伸是邪恶的,而这里的他的吸气剂和制定者是邪恶的.