使用Null Object模式时,如果情况无效,您将如何“检查”? 例如 如果在存储库中找不到任何项目,则向用户显示“未找到”消息。
我必须做一个美化的空检查吗?
这些技术似乎打败了Null Object模式本身的目的
答案 0 :(得分:5)
问题是您在没有中性行为的场景中使用Null对象模式。除了马修所说的,使用这种模式只有在想要调用操作时才有意义,而不必担心引用为空。
c2.com wiki总结得很好:
我最近遇到过这个问题 使用null对象模式(请参阅 NullObjectAndRefactoring)。我的看法 如果应用程序代码需要 检查它是否使用NullObject 或不,那么系统不再 完全使用null对象模式, 因为NullObject类已经存在 从一个单纯的“提升” 实现细节成为一个 应用领域中的概念。
答案 1 :(得分:2)
在我看来,你是对的。如果您需要这种功能,只需使用null,并执行null检查并响应您的null状态。
就个人而言,我真的觉得这个有用的地方是'空'值是有意义的,你可以运行它,因此避免空检查。如果您需要空值(或无效值)语义,那么null是有意义的(如果您忘记检查它,将抛出异常,而不是默默地失败)。
答案 2 :(得分:1)
Null对象模式的目的主要是避免在想要调用可能为null的值的方法时进行空检查。但是因为你特别想要将null作为特殊情况来处理,所以无法绕过null检查。
进行空检查并不一定会破坏Null对象模式的目的,因为它可以帮助您避免程序中其他地方进行不必要的空值检查。
答案 3 :(得分:1)
以这种方式使用null对象不是Null对象模式,如果你确实想要使用模式,那么就可以。例如,如果您的对象具有Name属性,则只显示该对象,其中null对象将“未找到”消息显示为其名称...但它可能不适合您的工作方式。