【发布时间】:2016-01-12 16:11:51
【问题描述】:
我在日常编码中发现了一个反复出现的模式,如下所示:
var foo = new Foo();
foo.Initialize(params);
foo.DoSomething();
在这些情况下,foo.Initialize 是绝对需要的,以便它实际上可以DoSomething,否则某些foo 属性仍将是null/非初始化。
它有规律吗?如何安全地确定DoSomething 只会/总是被称为之后 Initialize?如果没有,如何继续:我应该引发异常,静默忽略它,检查一些标志...?
【问题讨论】:
-
可以在构造函数中执行初始化逻辑吗?有一个单独的方法来完成对象的构造似乎很愚蠢。
-
@David 我读过一些关于“构造函数中没有真正的工作”、“构造函数中没有
new”的文章,这些让我有点不愿意做所有必须做的事情.替代方案似乎是放松类的合同(它不会一直准备好工作),但不知道这种放松应该/将如何完成...... -
“构造函数中没有
new”实际上更多的是依赖管理问题,而不是“工作量太大”。您需要了解为什么某些事情不被推荐以及它们会带来什么问题,然后选择最适合您情况的解决方案。教条是最糟糕的决策者。
标签: oop language-agnostic