Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用空对象模式时检查无效状态_C#_Design Patterns_Null Object Pattern - Fatal编程技术网

C# 使用空对象模式时检查无效状态

C# 使用空对象模式时检查无效状态,c#,design-patterns,null-object-pattern,C#,Design Patterns,Null Object Pattern,当使用空对象模式时,如何“检查”某个情况是否无效? 例如 当在存储库中找不到项目时,向用户显示消息“not found” 我必须做一个荣耀的空检查吗 如果obj.equals(新的NullObject()){showNotFound();} 如果obj.ID.equals(无效的_ID){showNotFound();} 这些技术似乎违背了空对象模式本身的目的在我看来,你是对的。如果您需要这种功能,只需使用null,并执行null检查并响应null状态 就我个人而言,我认为只有在“空”值有意义的

当使用空对象模式时,如何“检查”某个情况是否无效? 例如 当在存储库中找不到项目时,向用户显示消息“not found”

我必须做一个荣耀的空检查吗

  • 如果obj.equals(新的NullObject()){showNotFound();}
  • 如果obj.ID.equals(无效的_ID){showNotFound();}

  • 这些技术似乎违背了空对象模式本身的目的

    在我看来,你是对的。如果您需要这种功能,只需使用null,并执行null检查并响应null状态


    就我个人而言,我认为只有在“空”值有意义的情况下,这种方法才真正有用,并且您可以使用它来运行,从而避免空检查。如果您需要null值(或无效值)语义,那么null是有意义的(如果您忘记检查它,将抛出异常,而不是静默失败)。

    问题是您在没有中立行为的场景中使用null对象模式。除了Matthew所说的,只有当您希望调用操作而不担心引用为null时,使用此模式才有意义

    很好地总结了一下:

    我最近遇到了这个问题 使用空对象模式(请参见 NullObjectAnderFactoring)。我的意见 如果应用程序代码需要 检查它是否正在使用NullObject 否则,该系统将不再有效 使用空对象模式, 因为NullObject类已被删除 从单纯的“提升” 实现细节,以成为 应用领域中的概念


    空对象模式的目的本质上是避免当您想要对可能为空的值调用方法时必须进行空检查。但是,由于您特别希望将null作为一种特殊情况来处理,因此无法绕过null检查


    进行空检查并不一定会破坏空对象模式的目的,因为它可以帮助您避免程序中其他地方不必要的空检查。

    以这种方式使用空对象不是空对象模式,如果您确实想使用该模式,则可以。例如,如果您的对象具有Name属性,只需显示该属性,其中null对象将您的“not found”消息显示为其名称。。。但它可能不适合您的工作方式。

    使用Maybe monad而不是Null对象。