问题标签 [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 投票
2 回答
166 浏览

java - 如何在非通用上下文中使用 Guava Optionals?

我正在尝试通过以下方法使用来自番石榴的 Null-Objects:

我调用方法 display(..) 的方法如下所示:

现在我收到以下编译器错误:

我发现的唯一编译解决方法是使用

代替

如果我在非泛型上下文中使用 Optionals,真的没有其他可能性吗?

0 投票
1 回答
2664 浏览

ruby-on-rails - 如何模拟模型上的特定属性以进行 Rails 视图测试?

我正在为 rails 视图编写测试,可以说视图类似于:

显示.json.rep

现在我想测试它生成的 json 并且只是对该id领域感兴趣。

如果我的测试代码写成这样:

会报这样的错误:

我不想嘲笑somefieldX我不感兴趣的所有领域,所以我尝试了as_null_object

这一次,它没有报那个错误,但奇怪的是,rendered值是null!!

我不确定为什么以及如何解决它?或者有没有其他方法让我只提供我感兴趣的领域?

0 投票
3 回答
1484 浏览

c# - 依赖注入和 C# 中的保护子句和空对象模式

使用构造函数注入,一个依赖被注入到这样的消费者中(至少我希望我理解正确):

如果我要为 IDependency 使用 Null 对象模式,我需要保护子句吗?还是注入 Null 对象是错误的?

更新:为了澄清,假设我有这样的类和接口:

然后我可以安全地从 SomeConsumer 中删除保护子句,使其看起来像:

或者我应该使用保护子句,因为我不能确定它null永远不会被注入?

0 投票
6 回答
6027 浏览

java - 空对象模式

似乎有越来越多的人说您永远不应该返回 null,而应该始终使用 Null 对象模式。在使用集合/映射/数组或调用诸如 isAuthenticated() 之类的布尔函数时,我可以看到 NOP 的用处,此处显示

我在这方面还没有找到任何令人信服的东西。在我尝试整理我的想法时,请耐心等待。

我的理解是,您不是返回一个空对象,而是返回一个已“归零”的有效对象。

例如,客户端会调用来获取一个对象:

如果不使用 NOP,则需要在调用任何方法之前检查从 getCar() 返回的对象是否为 null:

使用 NOP,而不是getCar()返回 null,它现在返回一个有效地“清零”的对象。所以现在我们不再需要做if (car != null),只需请求颜色即可。所以,我想当我们调用颜色时,我们的“归零”对象会返回“无”。

这有什么帮助?似乎向前移动并在空对象上调用方法会导致与检查 null 一样多的痛苦。现在,当需要显示信息时,我们需要检查颜色是否为“无”,高度是否为 0,或者您拥有的任何其他值。所以本质上,不是在处理开始时检查汽车是否为空,而是在之后检查我们拥有的汽车对象是真车还是替代品。IE我们不想显示一堆空对象,所以我们需要一些方法来过滤掉我们所有的空对象。

此过滤是一个附加步骤,就像调用 if (car != null) 一样。唯一的区别是,通过检查 null,我们可以通过抛出异常来在发现 car 对象为 null 时立即停止处理,而使用 NOP,我们会调用空对象上的方法并继续运行,直到时间到了显示对象,此时我们过滤掉空对象。此外,您需要知道空对象返回的值。IE 确实 getColor() 返回“无”或“空”。

显然必须有一些我忽略的东西。提前致谢。

0 投票
0 回答
659 浏览

c# - 具有实体框架代码的空对象模式

我们已经在我们的领域模型中实现了空对象模式。我们首先使用代码和 fluent api 来持久化我们的域模型。

我们的一个实体有一个导航属性——这个导航属性是一个 FK,是我们使用空对象模式的地方。

我们的 null 对象0的 id 具有默认值。有没有办法使用流利的 api(或直接映射)告诉 EF '如果这是那些 null 对象之一,真的在数据库 fk 字段中抛出 null,而不是那个无效0的 id'。

编辑:

例如,假设您有一个 Student 实体和一个 FavoriteSubject 实体。一个学生有一个对收藏主题的引用,除非他没有收藏主题,否则空对象将类似于 NoFavorite。

当我们将它持久化到数据库时,我们得到 NoFavorite (0) 的 Id,我们非常希望数据库中的 NULL 因为 NoFavorite 是一个空对象(遵循空对象模式)。

0 投票
1 回答
172 浏览

ruby-on-rails - Rails中空对象的命名约定?

对于 Rails 应用程序:是否存在命名映射到模型对象的空对象的命名约定?

例子:

NullBlog常规的吗?

Avdi Grimm 的这篇文章和 Sandi Metz 的Nothing is Something演讲都没有提到任何空对象命名约定。

0 投票
1 回答
150 浏览

android - 如何使用 RxJava 实现 NullObject 模式

是的,这听起来可能有点雄心勃勃,但这是我想要实现的目标:

我有一个持有我热的班级,Observable班级需要一些时间来正确准备它(在另一个地方创建它并获得参考),所以当另一个班级要求它时,引用可能仍然为空(导致空指针)。我想要实现的目标类似于 NullObject 模式:返回可以安全订阅的空 observable(而不是 null),并且在正确创建 Observable 时开始发射项目。

解决它的一种方法是创建PublishSubject充当客户端类和 ObservableHolder 类之间的桥梁。PublishSubject 引用总是返回给客户端,当Observable它准备好时,它会将所有事件转发给主题。这是一个好的解决方案吗?还是可以做得更好?

@编辑

我决定继续使用我的解决方案,我认为在将其包装在课堂上之后,它已经足够好了。我赞成以下答案,但它与我的问题不匹配,因为它与rx-java实现没有直接关系,但建议代理模式很有帮助。

0 投票
2 回答
1272 浏览

ruby-on-rails - Rails 实例方法有条件取决于设置的属性

我有一个模型,它有几个在保存模型时是可选的属性。

我有几个使用这些属性并执行计算的实例方法,但我想先检查它们是否不为零,因为我会得到可怕的no method error nil nil class

除了乱扔我的代码之外,.present?还有更好的方法吗?

编辑: 这是我的代码到目前为止

我觉得.present?插入执行检查有一种不好的代码气味,我已经研究了空对象模式,但在这里似乎没有意义,因为对象存在,但一些属性是nil

0 投票
2 回答
86 浏览

c++ - “无法从 'A' 转换为 'B&'

我正在使用模板元编程构建一个实体组件系统。我不断收到Cannot convert from [base type] to [type user requested]&Cannot convert NullComponent to [type user requested]&错误:

编辑

这些选项目前似乎有效。

或者

0 投票
1 回答
1745 浏览

java - 实现空对象模式的方法

到目前为止,我到处都看到创建空对象模式的步骤,例如在 BST 中删除空检查,如下所示:

  1. 创建接口节点

  2. 创建两个实现接口节点的类。其中一个是 real_Node,另一个是 null_Node。

  3. 使用这些类,可以在创建树时在 BST 类中删除空检查。

现在我想知道,有没有其他方法可以做到这一点,例如,我们可以实现空对象模式而不使用只使用类的接口,即在上面的步骤(1.)中我们可以使用 Node 类而不是 Node 接口吗