gpt4 book ai didi

c# - 尝试重构为 Null 对象模式,但最终结果似乎更糟

转载 作者:行者123 更新时间:2023-11-30 12:51:19 25 4
gpt4 key购买 nike

我正在重构一个大类,该类在各处都对 null 进行了大量检查,以使用 null 对象模式。到目前为止,这是一个几乎平稳的变化,但我对最终结果有几个问题,我想知道是否有更好或不同的方法,或者甚至回到原来的方式。

最大的问题是我有以下代码:

IMyObject myObject = GetMyObject();
if(myObject != null && !myObject.BooleanProperty)
DoSomething();

如您所见,我可能可以从此条件中删除空检查,但我有一个 bool 属性,如果设置为默认值,它将执行一段代码。如果我总是返回 true,我可能会引入细微的错误,这些错误很难找到并消除。

另一个问题是我不得不像这样从 null 修改支票:

if(myObject.GetType() != typeof(MyNullObject))
return false;

DoSomething();

这太丑陋了,因为现在我必须检查类型,而不是只检查 null。这种情况在类中发生了 3 次,因为我没有返回对象的属性之一或执行它的方法之一,所以我必须进行此检查。

最后,对象有几个不可为空的 DateTime 属性,架构师不希望它们可以为空。同样,通过将 MinDate 值设置为默认值,一些讨厌的错误可能会爬入代码。

就是这样。在这种情况下,空对象模式是否比散布在各处的意大利式空检查更糟糕?有没有更好的方法来实现这一目标?

感谢您的回答。

最佳答案

重构您的代码是否更好,以便 DoSomething()是空对象上的方法并简单地实现为无操作? Null Object 的另一种替代方法是 Maybe<T> .它使 null 检查更具可读性并使调用代码更安全。

关于c# - 尝试重构为 Null 对象模式,但最终结果似乎更糟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7250097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com