问题标签 [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 回答
45 浏览

java - 模板 NullObject:这是一种罪过吗?

我用 Java 编写了这个小 Template-NullObject 并想问你使用其中一个是否会被认为是一种罪过。在创建 NullObject 时,您通常会创建一个专为一种类型的对象设计的对象,这个对象不是...

0 投票
2 回答
3029 浏览

ruby-on-rails - rails text_field / text_ara 空字符串 vs nil

我什至不确定我是否有问题,但我只是不喜欢我的 text_fields 和 text_areas 保存在数据库中empty string而不是nil.

我正在使用空对象模式并且刚刚意识到如果我创建了一个配置文件但不填写位置字段然后调用<%= @user.profile.location.upcase %>它不会爆炸,因为位置是一个字符串,即使它是空的。

这是 Rails 的惯例吗?如果是这样,那为什么?这有点奇怪,因为假设number_of_pets个人资料上有一个 attr 然后我尝试调用类似的东西

然后它爆炸了,因为我不能打电话nil.odd?

像往常一样表单,所以如果没有填写,它将保存为空字符串

0 投票
2 回答
317 浏览

java - 空对象模式是否打破了接口隔离原则?

接口隔离原则指出:

不应强迫客户依赖他们不使用的方法。

在 Null 对象模式中,实现接口的 Null 类对它不做任何事情。这是故意的。

但是,这取决于它不使用的方法。或者它不会违反原则,因为它实际上只是依赖于它,在实现的方法中不做任何事情?

0 投票
2 回答
59 浏览

oop - NullObject 模式:如何处理字段?

假设我们有Book一个包含year_published公共字段的类。如果我想实现 NullObject 设计模式,我需要定义NullBook行为相同Book但不做任何事情的类。

NullBook问题是,分配字段时的行为应该是什么?

0 投票
3 回答
4992 浏览

java - 具有空对象模式的 DAO

阅读后:
Effective Java (参见 Item 43) - Joshua Bloch
Clean Code (Don't Return Null) - Uncle Bob
Avoiding != null statements
Null Object pattern

我正在寻找一个问题的答案,即当搜索最终是针对非集合对象不存在的实体时,DAO 应该返回什么。通过使用空数组或 emptyList 方法,集合对象确实可以。但是对于非收藏品,它可能会更难。另一种解决方案是永远不要返回 null,而是使用 Null Object 模式。但是我不知道将 Null Object 模式与 DAO 集成,我真的很高兴看到 Null Object 模式和 DAO 模式的完美集成,特别是对于 model(dto) 对象返回的情况。

我将不胜感激并欢迎任何最佳设计模式、方案和建议。

0 投票
1 回答
54 浏览

design-patterns - 空对象模式是否会使调试更加复杂?

我想知道在某些情况下,空对象模式是否实际上会使调试变得更加困难。例如,如果一个方法返回一个“空”对象而不是 null,那么它不会抛出错误。这在可靠、干净的代码方面很好,但这是否意味着现在正在使用一个空对象,它基本上没有做任何可能导致意外错误的事情。现在没有什么可以帮助定位问题,而不是让程序员找到问题所在的空异常。

0 投票
1 回答
268 浏览

c# - c# 什么对象文字可以阻止 foreach 循环循环?

我知道我可以将整个 foreach 循环包装在 if 语句中,但我想知道是否有一些对象文字值替换,new List<string>()以便当 myList 为空时 foreach 跳过执行?在 Javascript 中,我可以简单地放在[]一个合并之后来引用一个将停止 foreach 循环的空集。

不会改变答案的不必要的背景信息: List<Entity>()是我来自 ASP.NET MVC 数据绑定的实际列表,所以我不控制创建它。我使用实体框架数据库模型 (POCO) 作为 Controller 方法的输入,就像您使用控制函数一样,设置函数的参数以将数据流向表。POCO 来自数据库,所以我也不控制它。

只是寻找某种空对象文字,我可以用来避免在不创建新对象的情况下运行循环。

我真的认为当 myList 为空时抛出异常是一个 C# 缺陷。如果它为空,则无事可做,因此应该跳过循环。

0 投票
0 回答
543 浏览

c# - 空对象模式和枚举

我有一个Person带有 Enum 属性的类。它是一个不可为空的枚举。NullPerson我有一些新要求,我可以通过引入一个所有属性设置为的 Null 对象来轻松处理它们String.Empty,但是该Enum属性不能留空,它始终默认为它为其类型定义的第一个值。

我在这里有什么选择?我是不是该:

  1. 使Enum属性为 Nullable 或
  2. 为 引入一个新值,Enum表明它没有设置:例如 TypeEnum.None?

选项 1. 要求我对依赖Person/的其他代码做更少的更改NullPerson

0 投票
1 回答
137 浏览

delphi - Delphi10 ObjectPascal:我如何才能访问 ADODataSet 单记录中的字段

非常高兴连接到数据库以及所有这些。我的 Grid 对象很好,可以显示所有记录等。对 SQL 真的很满意。以及“DB 都是关于集合”的概念

我的问题是:

我创建了一个 ADO 查询或数据集对象,其中 SQL 仅返回一条记录。我知道我已经通过询问 MyFrame.ADOQuery1.RecordCount (它返回 1)来做到这一点,但是我如何才能简单地访问记录字段呢?

我想写

MyRecord[] := MyFrame.ADOQuery1.ReturnRecord; // 可能是当前记录,因为我知道只有一个

问题是:是否/我可以创建一个可用于将该记录读入的var 类型?我该怎么做?Kinda 认为会有一个 ADOQuery方法将记录返回到相同类型的数组中(尽管不确定如何指定该类型)(强调显示保留字与自然英语)

无论如何,我这几天一直在尝试这样做,但显然遗漏了一些东西。一如既往的帮助,感激不尽。

0 投票
5 回答
551 浏览

ruby-on-rails - 在 Rails 中处理带有空对象的关联

我在我的 Rails 应用程序中使用Null Object模式来实现来宾用户帐户的概念。

像许多应用程序一样,我有一个方法ApplicationController调用current_user.

在未登录用户的情况下,我想使用我的来宾用户空对象。

它在许多情况下都有效,但随后会遇到以下情况 -

当然,这会失败,但有以下例外。

我的问题是,有什么方法可以优雅地处理这种情况。Null Object 模式的想法是,您可以透明地交换此 null 对象,并使其本质上是真实对象的鸭子类型。

很明显,如何为对象上调用的方法执行此操作,但在这种情况下,我希望能够将其传入并基本上将关联列设置为null,而不是需要一大堆自定义逻辑(避免无论如何都是空对象模式的重点)。

多态关系并不完全是这样。