问题标签 [null-object-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1039 浏览

ruby - Ruby nil 类对象

如何在 ruby​​ 中创建一个对象,该对象将在类似于 nil 的逻辑表达式中被评估为 false?

我的意图是启用对其他对象的嵌套调用,其中某个值通常位于链的一半nil,但允许所有调用继续 - 返回我的类似 nil 的对象而不是nil它本身。该对象将返回自己以响应它不知道如何处理的任何接收到的消息,并且我预计我将需要实现一些覆盖方法,例如nil?.

例如:

如果buzzof 的属性fizz不可用,我将返回我的类似 nil 的对象,该对象将一直接受调用直至bar返回自身。最终,上面的陈述应该评估为假。

编辑:

基于以下所有出色的答案,我得出以下结论:

这允许像这样一些卑鄙的技巧:

显然,您可以将这个块透明地包装在某个函数调用/类/模块/任何地方。

0 投票
3 回答
726 浏览

java - LinkedList 中的空对象设计模式

我正在尝试使用空对象设计模式在列表的开头和结尾实现与空对象的双重链接。所以一个空列表将包含两个空对象。所以我写了这段代码这是否遵循空对象设计模式?如果不是我怎么能做到这一点。任何建议将不胜感激。

更新代码-

0 投票
2 回答
2619 浏览

c# - 可以将null插入Cache吗?

我在我的 ASP.NET 网站中积极使用缓存。

但是,从 db 请求的某些对象确实不存在。例如,我通过查看表中的记录来检查特定Discount产品是否存在。没有记录意味着没有折扣。ProductId=@ProductIdProductsDiscount

您认为将null折扣对象放入缓存中是个好主意吗?

或者我最好发明一些更好的东西(例如使用空对象模式)。事实上,我不太喜欢开始使用空对象模式的想法,因为它需要进行大量的重新设计,我至少现在想避免这种情况。

谢谢。欢迎任何想法。

PS事实上,当我尝试调用时,我什至不能将空对象放入缓存中:

我收到:

值不能为空。

PPS 为什么 MSDN 对这种行为只字未提?

0 投票
5 回答
2671 浏览

c# - C# 中的通用空对象模式

我想知道是否有任何方法可以在 C# 中实现通用空对象模式。通用空对象是所有引用类型的子类,就像Nothing在 Scala 中一样。这好像是

但它无法编译,我不知道如何实现T提供默认行为或抛出异常的方法。以下是一些想法:

  1. 使用反射?
  2. 创建时使用表达式树Nothing<T>?它可能看起来像起订量。另一个问题来了:在产品代码中使用mock framework/library可以吗?
  3. 使用动态类型?

我知道也许我应该为特定类型实现特定的空对象。我只是想知道是否有任何解决方案。

有什么建议吗?谢谢。

0 投票
3 回答
372 浏览

c++ - c++ 具有空对象模型的双向链表

我正在尝试使用空对象模型创建一个双向链表。到目前为止,我已经实现了将节点添加到列表开头的方法和显示节点的方法。我的问题是显示功能总是显示0。谁能指出我哪里出了问题以及如何解决?另外,我在这里正确实现空对象模型是否正确?

注意:这是一个学校作业。请不要在没有解释的情况下发布解决方案。我想学习和理解这里发生了什么。

编辑:修复显示问题后,我有另一个:当使用空列表或具有节点的列表调用 getHead() 或 getTail() 时,它一直想使用节点类中的 self(),而不是 nullNode 类(在空列表的情况下)或 elementNode 类(在具有节点的列表的情况下)。我被困在如何解决这个问题上。

如果我打印出 container.getNext() 和 container 的地址(对于一个空列表),两个地址是相同的,所以不应该将 ->self() 添加到最后调用 nullNode 类中的 self() 方法吗?

0 投票
2 回答
3414 浏览

asp.net-mvc-3 - Public ActionResult Delete(int id, brand brand) - Null 品牌对象(MVC3 和实体框架)

我正在使用实体框架学习 MVC 3,但我的控制器中的删除操作结果方法存在问题。我有两种用于删除的 ActionResult 方法,一种使用 [HttpPost] 向数据库提交数据,另一种用于使用基于 ID 的正确记录填充视图。

我的问题是我的参数中有一个空对象,所以当我尝试提交删除事务时,它看不到正确的值,因为我有带有空值的空对象。

这是带有空对象的代码:

品牌为空,我不明白为什么。例如

编辑 actionresult 中的品牌参数在对象中有数据,而不是空值。

有谁知道如何解决这一问题?谢谢。

0 投票
2 回答
396 浏览

reflection - Groovy NullObject 是否应该为空?

这个例子可以很容易地在 groovy 控制台中测试。

var a 被评估为非空,而 b 被评估为空。

两者都是 org.codehaus.groovy.runtim.NullObject 的实例

有谁知道为什么?

在处理反射代码时这是一件棘手的事情。

0 投票
2 回答
208 浏览

design-patterns - 空对象设计模式的行为问题

我想分享我的一些想法并提出一些问题空对象设计模式应该实现具有中性行为的类。所以,如果我需要实现接口:

可能,我将使用下一个实现:

美好的。

但是,当我需要实现下一个接口时,我应该使用哪种策略:

IsTasty - 没有“中性”行为。我应该如何在 NullProduct 类中实现它?返回真或假。没有那么清楚。

更糟糕的是,如果接口有一些属性:

和实施:

为什么?因为,如果某些用户会得到对象,就像这里:

和用户尝试做:

用户会得到奇怪的结果。用户记得,他设定了 8 美元的价格,但现在价格为 0。通货膨胀?

在 UnitTest 中同样的问题。

现在,我不想通过询问对象是否为空对象来违反 OCP。

你如何解决问题?

0 投票
1 回答
108 浏览

ruby-on-rails - nil 的未定义方法:NilClass 重构?

在交易中,有时客户没有,service_id因为他们没有向购物车添加额外的服务。问题是,transactions索引页面返回undefined method 'name' for nil:NilClass在线

有什么办法比

我找到了这篇NULL OBJECT PATTERN文章。不太明白它如何应用于我的场景。

0 投票
3 回答
150 浏览

java - OOP 使用子类的实例初始化实例变量

我正在尝试在我的班级上实现 NullObject 设计模式Node

使用此代码,我得到一个 StackOverflowError 异常。我该如何解决这个问题?