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

typescript - 功能范式的空对象模式

将 Typescript 用于 Angular ngrx 应用程序,我必须做很多检查,无论我访问或传递的值是否为空/未定义,例如在可能存在的列表上调用 .map()。

要走的路是什么?确保整个代码库永远不会移交空值?在每次通话之前检查,以防生成空列表之类的空对象?或者是否有某种类似空对象的函数式编程模式?

@Pavel 的评论:我们有一个可以选择的项目列表,如果是这样,详细信息会在视图中展开。我碰巧在删除列表中打开的项目时,应用程序崩溃了,因为对打开项目的引用设置为 null。我通过对我为修复应用程序崩溃而编写的所有选择器进行空检查来解决此问题,正如我在许多其他选择器中看到的那样,它们在浏览器中使用应用程序本地状态。

0 投票
2 回答
392 浏览

java - 使用 NULL 对象模式消除 NULL

在上面的代码中,我创建了一个 DummyChild 类,这样每当调用 getObj() 以获取正确的类对象时,我不会返回 NULL,而是返回 dummyClass 对象(单例)。这消除了我的代码中的 NULL 检查,从而消除了由于这种情况而产生的分支。

这是使用 NULL 对象模式的正确位置还是应该使用 NULL 方法?

0 投票
1 回答
1195 浏览

android - 从 firebase 空对象参考 firebase 数据库中获取所有表值

这是图片中的错误

从firebase数据库获取空对象引用

我想获取bpfragmentTable所有值并将所有值存储在字符串变量中,并使用该变量在图形视图中绘制图形。我想从图中的 table-BPFragment 表中获取所有值:

FireBase 数据库 bpfragmentTable

这是 BPFragmentTable.class 的 getter 和 setter 类

为什么我得到空对象引用?

0 投票
2 回答
4452 浏览

design-patterns - 如何在 Kotlin 中的数据类上实现空对象模式?

我有一个 Kotlin 数据类:

这就是我在 Java 中所做的:

创建一个抽象类:

创建空对象并扩展抽象类:

创建一个真实的对象并扩展抽象类:

如何在 Kotlin 中正确实现空对象模式?有不止一种方法吗?如果是这样,最简洁优雅的方式是什么?

0 投票
2 回答
1054 浏览

javascript - Javascript:使用模式 Null 对象模式、RORO、未定义等作为 Get 函数的返回参数,以防请求的对象“未找到”

首先,我不确定该主题是否属于 StackOverflow。但是,我发现了一些关于其他编程语言的讨论,这些讨论解决了 StackOverflow 上的主题,但不适用于 Javascript。所以,我只想把我的问题扔进戒指:

在 Javascript 中假设的 GetUserByUsername 函数中处理可能的“未找到”场景的最佳方式/模式是什么。

我为什么要问?我想在整个项目中遵循某种编码标准。

我更具体的情况如下:

  • 我有班级用户
  • 我有一个用户列表,其中包含用户类的实例
  • 我查找某个用户,但该用户在列表中不存在

我应该如何处理我的相关功能中的“找不到”情况?

我发现了以下方法:

  • 返回未定义
  • RORO(接收对象,返回对象)
  • 空对象模式
  • 抛出自定义错误

那我到底是什么意思。以下面的示例类用户为例。

在我的代码中的某处,我有一个函数,它提供了从用户列表中按用户名返回某个用户的功能。该列表是一个数组,由 User 类的实例组成。

一个简单的实现可能是这样的:

在某些情况下,传递的用户名可能不属于某个用户。因此找不到用户。

我怎么能处理它?

1.)返回未定义 - 就像示例代码一样。

2.)RORO(接收一个对象,返回一个对象)我将一个对象传递给我的函数,并返回一个对象作为结果。在我要返回的对象中,我有一个指示器显示操作是否成功。

3.) 空对象模式 我不喜欢该解决方案的事实是,如果主类获得附加功能,我总是必须增强空对象的类。

4.) 抛出自定义错误

就我个人而言,我更喜欢返回包含指标的对象的选项,以及引发自定义错误的选项。该示例是同步的。在我的项目中,我也有异步代码。我正在为此使用承诺。

那么有什么想法是“最好的”解决方案或我应该喜欢的方式吗?

0 投票
0 回答
31 浏览

php - 空对象模式无法解决多种返回类型的问题

有时用户不想透露婚姻状况,这在我的领域中很好。所以我有用户是否已婚的数据,我有我不知道状态的数据。我的目标是确保下面的婚姻状况检查功能仅返回单一类型的数据。虽然我使用的是 php,但我确信这适用于任何语言。

这是界面

这意味着状态可以返回真或假,在某些情况下为空。这是我的实现。

现在,当我无法获取婚姻状况数据时,这是 null 对象。

我的问题是我无法拆分 Null 对象和真实对象状态函数的返回类型。根据我的理解,使用空对象模式的主要好处是函数更容易预测,就好像它是 bool 返回类型,那么它将总是返回 bool。

如何重构我的代码,以便函数

可以写成

甚至可能吗?这肯定不符合 MaritalStatusInterface。我不确定使用多个接口是否可以解决它。还是我以一种完全错误的方式看待它,并且拥有可为空的返回类型并没有错?

0 投票
0 回答
42 浏览

azure - 尝试调用虚方法...关于空对象引用问题

我的代码有问题,有时我得到一个空对象引用,有时没有(在同一件事上),我无法理解问题所在,因为正如我所说,一次它工作正常,但第二次它显示我空对象引用消息。我想要做的是从我的 Azure 表中获取登录教练的俱乐部。

0 投票
1 回答
228 浏览

c# - 空对象模式的空接口

我有一些用于使用 WCF 传输数据的 DTO 对象。

WCF 服务方法返回这个对象,我有这个对象应该为空的有效情况。

我想使用 null 对象模式返回一些东西而不是 null 以使这段代码更清晰。

因此,我将其实现为:

类的使用Foo不需要IFoo在空检查之外。但我觉得空界面肯定是一种代码味道。Foo但是,如果我将添加to的所有(或任何)成员IFoo,这些成员将永远不会被使用。因为接口仅用于空对象模式。所以,我不明白,在这种情况下正确的方法是什么?

0 投票
2 回答
202 浏览

kotlin - 实现空对象模式

我发现这个问题以某种方式在 Kotlin 中实现了空对象模式。我通常在 Java 中做一些不同的事情:

这样,我总是可以MyClass.INVALID用作空对象。

如何在 Kotlin 中实现这种风格?

我摆弄了这样的事情:

但这甚至无法编译。

0 投票
3 回答
145 浏览

c++ - 在 null 与 null 对象性能上的分支

哪个最有效:使用 null 对象,或 nullptr 上的分支。C++ 中的示例:

对比

假设编译器无法内联它,null 对象将始终执行间接函数调用。使用nullptr,总会​​做分支,如果有事要做,也会做间接函数调用。

用指向抽象基类的指针替换回调会影响决策吗?

callback设置为 nullptr 以外的东西的可能性如何。我猜如果callback最有可能是nullptr,那么使用附加分支会更快,对吧?