问题标签 [value-objects]

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 回答
161 浏览

nhibernate - 实体、值对象或它是什么以及它应该在哪里?

我有一个名为“工具”的课程。工具具有如下属性:名称、描述和一些特定的其他属性。工具很特别,因为名称和其他都是只读的,但描述可以由用户修改。

工具的数量是恒定的并且在开发时是已知的。它不是值对象,因为我需要查询它们并向用户显示他们可以更新描述的位置。因此,它是一种实体,但用户无法创建新工具。

我正在寻找使用这样的工具的可能性:

其中 SomeGreatTool 是名称为“Some great tool”的工具,描述应与用户指定的相同。

Jimmy Bogard 的解决方案几乎完美,但 NHibernate 对 SomeGreatTool 和描述一无所知。

如何修改吉米的解决方案或如何以不同的方式进行?如何从数据库中实例化 SomeGreatTool?

0 投票
3 回答
5635 浏览

repository - 如何保存和加载值对象?

因为没有值对象的存储库。如何加载所有值对象?

假设我们正在为一个博客应用程序建模,并且我们有以下类:

  • 帖子(实体)
  • 注释(值对象)
  • 标签(值对象)
  • PostsRespository(存储库)

我知道当我保存新帖子时,它的标签会与它一起保存在同一个表中。但是我怎么能加载所有帖子的所有标签。PostsRespository 应该有加载所有标签的方法吗? 我通常这样做,但我想知道别人的意见

0 投票
2 回答
1927 浏览

javascript - 创建同一类的对象:Javascript原型、私有成员、继承

有些代码可能会说一千多个单词:

资源对象是被认为是不可变的值对象。它们在加法操作中返回一个新对象。现在,我不只是调用“new Resource(args)”来创建要返回的新对象,而是基于旧对象创建了一个新对象。这也允许继承。

当我开始在我所有的 ValueObjects 上使用它时(以防我将来想从它们继承),我开始更多地考虑这个问题。

JavaScript 不允许不可变对象。然而,通过直接方法覆盖或调用其构造函数,对象很容易受到攻击。我所能做的就是确定这些是坏习惯。不幸的是,ECMAScript5“冻结”还没有出现,尽管我的模式与它兼容。

既然我有这种在不可变对象上调用构造函数以及代码重复的“坏风格”,我正在考虑创建一个新函数来封装这个过程:

因此:

也许有人对这个函数的名称有更好的想法。“重建”是我的第一个想法。您如何看待这种模式?是不是过于抽象了?我应该把它保存到我确定会继承的类吗?我错过了什么重要的事情吗?

编辑:我看到我忘了提到一些重要的东西,目前在这篇文章中没有反映出来。使用 Object.create 可以轻松克隆 ValueObject。他们的私人成员是不变的。但是可变的私人成员呢?如果在克隆上调用 set(),它将在闭包中设置原始原型对象!当我的 Object.recreate 重新创建闭包时,这个问题就解决了。

那么有没有更好的方法来继承私有变量呢?为什么每个人都使用糖来创建课程?我已经阅读了很多关于原型主义的内容,但我仍然没有掌握它的窍门。

0 投票
1 回答
53 浏览

geometry - 3d 点的值对象与否?

我需要在python中开发一个几何库,描述3d空间中的点、线和平面,以及各种几何操作。与我之前的问题有关

设计中的主要问题是这些实体是否应该具有身份。我想知道是否有一个类似的库(用另一种语言开发)可以从中获取灵感,选择的设计是什么,特别是一个选择与另一个选择的原因。

0 投票
2 回答
1276 浏览

php - PHP OOP 概念(值对象/数据访问对象)

我刚刚开始学习 PHP OOP,之前我一直在以程序化的方式做 PHP。我正在阅读这篇文章,我有几个简单的问题,

  1. 通常如何定义值对象的构造函数?作为一个接受所有“数据成员”作为参数或坚持默认构造函数并使用 mutator/accessor 方法来设置/获取数据成员?

  2. 这实际上是开始执行 PHP OOP 的推荐方式吗?因为老实说,文章中解释的概念让我有点困惑。

干杯

0 投票
1 回答
1284 浏览

entity-framework - Entity Framework 4.0 and DDD patterns

I use EntityFramework as ORM and I have simple POCO Domain Model with two base classes that represent Value Object and Entity Object Patterns (Evans). These two patterns is all about equality of two objects, so I overrode Equals and GetHashCode methods. Here are these two classes:

Everything was OK until I tried to delete some related objects (aggregate root object with two dependent objects which was marked for cascade deletion): I've got an exception "The relationship could not be changed because one or more of the foreign-key properties is non-nullable". I googled this and found http://blog.abodit.com/2010/05/the-relationship-could-not-be-changed-because-one-or-more-of-the-foreign-key-properties-is-non-nullable/ I changed GetHashCode to base.GetHashCode() and error disappeared. But now it breaks all my code: I can't override GetHashCode for my POCO objects => I can't override Equals => I can't implement Value Object and Entity Object patters for my POCO objects. So, I appreciate any solutions, workarounds here etc.

0 投票
3 回答
395 浏览

domain-driven-design - 领域驱动设计值对象,如何保证唯一值

我正在构建一个问卷创建者。问卷由部分组成,部分由页面组成,页面由问题组成。问卷是总根。

部分、页面和问题可以有所谓的短代码,它们在问卷中应该是唯一的(但在数据库中不是唯一的,因此它们不是严格的身份)。我打算使短代码成为一个值对象,并希望在调查问卷中包含它应该是唯一的业务规则,但我不确定如何确保这一点。我的理解是值对象不应该访问存储库或服务层,那么它如何确定它是否是唯一的?

谢谢你的帮助。

达伦

0 投票
1 回答
705 浏览

domain-driven-design - 聚合和值对象:删除?

我目前正在确定系统中的实体、值对象和聚合。假设已识别以下实体:

客户、客户电子邮件、电子邮件、客户地址、地址、地址类型

其中客户 -> 电子邮件是多对多关系,客户 -> 地址(具有地址类型)也是如此。这些关系由 CustomerAddress 和 CustomerEmail 关系对象表示。

最初我认为这是直截了当的:

实体:Customer、CustomerEmail、CustomerAddress 值对象:Email、Address、AddressType

客户是包含上述所有实体和 VO 的聚合的聚合根。

我遇到的问题(这可能只是因为我正在学习聚合的概念)假设您有一个供应商实体,它使用相同的地址和电子邮件值对象反映上述客户聚合。在这种情况下,当客户被删除时,不应删除地址和电子邮件,因为作为供应商,甚至其他客户可能仍在引用它们。我已经看到很多文档表明,当一个聚合被删除时,聚合边界内的所有内容都会被一次性删除。我是否正确地假设这不适用于聚合中的值对象(即它们是不可变的......如果我们在车辆聚合中有一个绿色的颜色对象......你不会因为汽车而删除颜色被删除)或者电子邮件和地址是否应该有自己的实体(和聚合)作为两个地址,

最后,如果它们确实是价值对象,那么如果 VO 只能通过它们的聚合根进行操作,那么如何处理应该删除它们的情况(没有供应商或客户仍然引用地址)?

干杯,

史蒂夫

0 投票
1 回答
322 浏览

domain-driven-design - 值对象与实体

快速提问......当处理类似电子邮件地址的内容时,最直接的想法是将其视为一个值对象。

但是,如果我们有多个实体,例如引用相同电子邮件地址的客户、联系人和供应商,则可以想象,当我们更改客户的电子邮件地址时,我们可能需要客户的联系人,他们可能是供应商也将电子邮件更改也反映在这些实体中。我是否认为这是给电子邮件地址身份,所以它现在应该被表示为一个实体?

干杯,

史蒂夫

0 投票
1 回答
210 浏览

xml - 从值对象填充和访问数据

我在新项目中从值对象加载和访问数据时遇到问题。我通过服务加载 xml 文件,其中包含资产文件的标题和位置,我需要能够访问资产文件的位置通过指定标题并从值对象中检索它。我正在使用 Robotlegs 框架,这是 xml 的示例:

然后我将这些数据作为字典哈希推送到值对象中。希望

我已经测试过从视图组件访问它。

它返回未定义..有什么想法吗?