假设我们有这样的方法
public static IThing getTheThing() {
return internalThingGetter();
}
并且我们希望出于调试或单元测试的目的,引入一种轻量级策略来手动覆盖它。
private static IThing _thingManualOverride;
public static IThing getTheThing() {
if (/*some condition*/)
return _thingManualOverride;
else
return internalThingGetter();
}
是检查 _thingManualOverride != null
还是引入一个新的 bool 值并检查(例如 _shouldOverride
)更好?
或者,这里有没有更坚实的模式可以使用?
编辑:要满足的一些目标:
- 假设保持界面很重要。许多代码使用此静态方法,更改它是一个不错的目标,但代价高昂。
- 这两项检查都是“正确的”,因为如果覆盖为
null
,我们可以安全地假设默认类(class)是正确的。
最佳答案
如果选择 _thingManualOverride != null
。您可以检查其他字段,假设一个名为“_IsThingManualOverrideSet”的 bool 值,但由于程序员的错误,他们可能会给出冲突的值:
_thingManualOverride = null;
_IsThingManualOverrideSet = true; // <-- oops!
所以检查值本身是最好的方法。
关于c# - 要从工厂返回 "manual override"值,是检查 null 还是 bool 开关更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16320479/