问题标签 [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.
java - 空对象设计模式问题
我最近看了这个关于 Null Object 设计模式的youtube 教程。尽管其中有一些错误:例如不做任何事情的 NullCar 创建了一个无限循环,但这个概念得到了很好的解释。我的问题是,当可以为 null 的对象具有 getter 并在您的代码中使用时,您会怎么做?你怎么知道默认返回哪个值?或者我应该在所有对象中实现这个模式?如果我需要返回字符串或原语怎么办?我是从 Java 的角度说的。
编辑:我不会为默认值测试交易空对象测试吗?如果没有,为什么不呢?
c# - 使用空对象模式时检查无效状态
使用空对象模式时,如果情况无效,您将如何“检查”?例如,当在存储库中找不到项目时,向用户显示消息“未找到”。
我必须做一个美化的空检查吗?
- 如果 obj.equals(new NullObject()) { showNotFound(); }
- 如果 obj.ID.equals(INVALID_ID) { showNotFound(); }
这些技术似乎违背了空对象模式本身的目的
nhibernate - 在没有数据库持久性的情况下,如何让 NHibernate 知道一流的“空对象”?
我想在我的域中使用 Null 对象模式,但我不想在我的数据库中有与之相关的记录 - 如果 NHibernate 能够将 SQL 空值映射到我的 Null 对象,我会更喜欢它,反之亦然。
这可能吗(使用 Fluent NHibernate 进行映射)
PS 这似乎是人们希望解决的一个相当普遍的问题,但我想知道为什么我一直在努力寻找答案。
编辑: 从这个博客条目来看,它看起来不像是直接可能的:NHibernate & Null Object Pattern: The Options
design-patterns - 使用空方法的默认实现的设计模式
是否有特定的设计模式描述了提供非抽象默认实现的场景,该实现使用空的 NO-OP 实现实现接口上的所有或部分方法。这样做的目的是减轻子类实现它们自己可能不需要/使用的方法的负担:
我已经看到这种模式多次使用,包括SAX 框架中的 Java 的 DefaultHandler和MouseAdapter。在某些情况下,此类类被命名为适配器,但我的印象是适配器模式在两个不同的接口之间进行转换。
鉴于在这些情况下,只有一个已声明的接口被转换为该接口的未定义子集——我不清楚这如何符合适配器模式的精神。
此外,鉴于某些方法可能具有实现,并且 NullObject 传统上是单例,我也不太明白这如何遵守NullObject 模式。
design-patterns - Fowler 空对象模式:为什么要使用继承?
为什么 Fowler PoEAA p。498 以以下方式定义空对象模式(示例缩短,语言是 c# 但没关系):
INull
用作标记界面。我不太喜欢这种方法,原因有以下三个:
- 属性需要标记为虚拟
- 我不能再密封我的实体类了
- 至少引入 (n+1) 个新类型(n 个空对象,一个标记接口)
为什么不这样实现:
我通常认为所有 Fowlers 的例子都经过深思熟虑,显然我在这里遗漏了一些东西。
model-view-controller - 接收到空 dto 时控制器操作的行为
当控制器检测到传递给它的 DTO 为 null 时,它应该实例化 DTO 的实例(参见 Null 对象模式),还是应该简单地在那里抛出异常?
谢谢
c# - 如何以通用形式实现 NULL 对象设计模式?
有没有办法以通用形式实现空对象设计模式,这样我就不需要为每个业务对象实现它。
对我来说,每个商务舱都需要两个高级课程。一个用于单个记录,另一个用于列表。所以我认为应该有一种方法可以在高层次上实现 NULL 对象设计模式,而不必为每个类都实现它。
请问有什么办法吗?
design-patterns - Good case for a Null Object Pattern? (Provide some service with a mailservice)
For a website I'm working on, I made an Media Service object that I use in the front end, as well as in the backend (CMS). This Media Service object manipulates media in a local repository (DB); it provides the ability to upload/embed video's and upload images.
In other words, website visitors are able to do this in the front end, but administrators of the site are also able to do this in the backend.
I'ld like this service to mail the administrators when a visitor has uploaded/embedded a new medium in the frontend, but refrain from mailing them when they upload/embed a medium themself in the backend.
So I started wondering whether this is a good case for passing a null object, that mimicks the mail funcionality, to the Media Service in the backend. I thought this might come in handy when they decide the backend needs to have implemented mail functionality as well.
In simplified terms I'ld like to do something like this:
Frontend:
Backend:
How do you feel about this? Does this make sense? Or am I setting myself up for problems down the road?
c++ - C++:返回 NULL 而不是结构
我有一个结构Foo
。在伪代码中:
如何在 C++ 中完成此任务?
编辑以删除许多不准确之处。
language-agnostic - 为每个类创建一个 NullObject 是否可行?(当然用工具)
NullObjectPattern旨在成为一种“安全”(中性)行为。
这个想法是创建一个不做任何事情的对象(但也不抛出 NullPointerException )
例如定义为的类:
将在此代码中导致 NullPointerException:
NOP 说的是,您可以拥有这样的对象:
然后将其用作默认值。
问题来了,当您需要为您创建的每个类重复代码时,解决方案就是拥有一个创建它的工具。
创建这样的工具或使用它(如果存在)是否可行/合理/有用?
也许使用 AOP 或 DI 可以自动使用默认值。