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

domain-driven-design - 在域之间共享值对象是个好主意吗?

假设我们在系统中有两个域:Orderdomain 和 Customerdomain。

这两个域都相当复杂和庞大,因此不能将它们合并到一个域中。

但他们之间有业务关系。在每个订单上,客户都充当订购者。

我心中至少有三个解决方案。

  1. 将 customerId 作为原始类型存储在 Order 和 Customer 上。

  2. 创建两个值对象 OrderDomain.CustomerId 和 CustomerDomain.CustomerId。确保可以比较这些类型类型是否相等。

  3. 使用 valeobject CustomerId 创建第三个组件“SharedValueObjects”,并在两个域中使用该类型

哪一个更受欢迎,或者你能想出第四个更好的吗?

0 投票
1 回答
92 浏览

c# - 用一组值对象映射一个组件

如何映射(使用基于 xml 的方法)value object (component)包含ISet<String>属性的一个?

谢谢!

0 投票
2 回答
4819 浏览

php - 什么是 PHP 中的值对象的示例?

我已经阅读了大量的 C# 值对象示例,并且我知道它是一个由它的值标识的“对象”。如果值更改,则该对象是“新的”。

但是,对于 PHP 而言,这似乎没有任何意义......要么,要么我只是没有建立连接。

值对象只是一个字符串吗?

0 投票
3 回答
467 浏览

database - 如何从数据库生成 Flex VO

我们已经拥有包含真实数据的数据库。现在我们想在此之上构建一个 Flex-Java。我们知道如何使用 Hibernate 工具从数据库生成/逆向工程 Java 代码。现在的问题是如何生成 VO 动作脚本!这个想法很简单,就像 Hibernate 从 DB 生成 POJO。

注意:我们尝试了 Adob​​e 的数据模型驱动方法,但我们不喜欢它。

0 投票
2 回答
240 浏览

domain-driven-design - 这些值也是值对象吗?

我想我理解值对象(它们没有概念标识,它的属性集是它的定义等)以及它们与Entities的不同之处,但我仍然对原始类型的值(intstring ...)是否感到困惑直接分配给Entity的属性也被视为VO

例如,在下面的代码中,Name分配给的对象(类型)Person.NameVO,但值是否分配给Person.FirstNamePerson.LastNamePerson.Age被认为是VO

谢谢你

0 投票
3 回答
553 浏览

domain-driven-design - 在以下模型中,地址不应该是值对象吗?

值对象如何存储在数据库中?

假设公司和个人都具有相同的邮件地址。这些陈述中哪些认为有效?

   1.“如果我修改 Company.Address,我希望 Person.Address 自动获取这些更改”

   2.“如果我修改Company.Address,它一定不会影响Person.Address”

如果 1 为真,地址应该是一个实体

如果 2 为真,地址应该是一个值对象。

在上面的模型中,邮件不Address应该是一个值对象,因为即使CompanyPerson相同的邮件,这封邮件仍然没有概念身份?

换句话说,如果最初CompanyPerson共享initial.address@gmail.com,然后得到新邮件new.address@gmail.com,那么我们可以说邮件地址 initial.address@gmail.com本身没有改变,而是Company并将Person其替换为new.address@gmail.com

因此,据我了解,一个共享的事实Address不足以赋予它个性(即身份)?!

谢谢

0 投票
1 回答
164 浏览

domain-driven-design - 对两个并行聚合、实体、值对象层次结构进行建模

我正在为以下域设计而苦苦挣扎,据我了解,这些域设计似乎不符合 DDD 的概念。

一方面,我有 Device->Sensor->Measurement 层次结构,建模为聚合,以 Device 作为根,Sensor 作为实体,Measurement 作为 VO。到目前为止,一切都很好。

现在,每个设备都有一个类型,传感器也是如此。同时测量值是指被测量的变量(例如温度)。这是事情破裂的地方。

我最初将类型建模为值对象,但类型有限,许多设备和传感器共享相同的类型。

然后我决定将它们建模为一个聚合,遵循与设备聚合类似的结构:DeviceType->SensorType->Variable。但是,这不起作用,因为传感器可能会引用 SensorType 和 Measurement to Variable,从而打破了仅允许从另一个聚合内部引用聚合根的规则。此外,可能会发生不止一个 DeviceType 包含相同类型的传感器(例如电池电量传感器),并且不止一个 Sensor 测量相同的变量(例如电池电量水平)。

这导致我将每个实体(DeviceType、SensorType、Variable)作为独立的实体,每个实体都有自己的(退化的)。

我的具体问题是:我是否正确解释了聚合、实体、VO 的概念,或者只有根是反模式的这种贫血聚合?

0 投票
1 回答
827 浏览

c# - 将对象的状态保存到历史列表并恢复它的最佳实践是什么?

我有以下情况:

我正在设计一个 MVVM 应用程序,它通过串行端口或其他东西与一些计算机外部设备进行通信。每个Device都有一些属性,例如 id、名称等,并且还由Module具有自己属性的不同 's 组成。我有一种 xml 数据库来保存和加载设备。每个Device都有自己的文件。反正:

该应用程序通过一种存储库加载所有文件,并提供一个列表Devices以选择实际连接的文件或创建新文件。当我选择 currentDevice时,我会得到一个页面,该页面表示Modules基于设备类型的列表。IE:

Device_Type_A包括Module_AModule_B

Device_Type_B包括Module_AModule_C

...

的属性Modules通过通信填充。现在我想将Modules一种模块状态历史的状态保存到当前设备的 xml 文件中。

这样做的最佳做法是什么?ModuleSnapshot基于Fowlers Snapshot创建一个类并存储它有用吗?还是我必须做一种不可变的值对象并将其存储到文件中?

设备是实体,但模块历史条目感觉像值对象。我也想显示加载的设备文件的历史记录。是否需要一个Module类作为通信东西的模型和一个类作为它的不可变值对象副本,比如ModuleHistory?

像这样的东西?

0 投票
1 回答
352 浏览

design-patterns - 在 D 中实现值对象模式

我想在 D 中实现值对象模式。也就是说,我希望对不可变对象具有可变引用变量。T变量应该是可赋值的,但T对象不应该改变它们的状态。

const我对 D和D之间的区别感到困惑。让我用一个骨架类immutable来说明我的疑问:Rational

我应该声明numand denas constorimmutable吗?整数有区别吗?

我应该声明invariantconst还是immutable?将其标记为immutable会导致编译时错误,但这可能是由于其他成员没有被标记immutable

我应该将构造函数声明为constorimmutable吗?那意味着什么?

我应该声明toStringconst还是immutable

除了标记单个成员,似乎我还可以标记整个班级:

其中哪一个对值对象模式最有意义?

怎么样pure?在值对象模式中,方法应该没有副作用,那么将每个成员声明为 有意义pure吗?不幸的是,标记toStringpure不会编译,因为std.string.format它不纯;有什么特别的原因吗?

似乎我也可以将类本身声明为pure,但这似乎没有任何效果,因为编译器不再抱怨toString调用不纯函数。

像 then 那样声明一个类是什么意思pure?它只是被忽略了吗?

0 投票
2 回答
430 浏览

domain-driven-design - DDD 全局值对象

我需要在许多对象中引用 TimePeriod(AM、PM、NIGHT 等)。例如。预定会议,实际会议。

尽管 TimePeriod 在数据库中带有 ID,但它绝对不是实体,因为它不会更改,并且“AM”期间在所有对象中都是相同的。

我的困难在于知道如何从数据库中检索这个值对象。由于不同的对象可以引用它,它不应该是它们的任何存储库方法的一部分,但同时它不应该真正拥有自己的存储库,因为它不是根。

那么你会如何建议从数据库中获取它呢?

谢谢。

更新

我已经接受了 eulerfx 的回答,因为他解释说句点仍然可以通过存储库从数据库返回,尽管我不太喜欢为多个全局值对象设置多个小型存储库的想法。这个区域对我来说仍然有点灰色。