问题标签 [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.
domain-driven-design - 在域之间共享值对象是个好主意吗?
假设我们在系统中有两个域:Orderdomain 和 Customerdomain。
这两个域都相当复杂和庞大,因此不能将它们合并到一个域中。
但他们之间有业务关系。在每个订单上,客户都充当订购者。
我心中至少有三个解决方案。
将 customerId 作为原始类型存储在 Order 和 Customer 上。
创建两个值对象 OrderDomain.CustomerId 和 CustomerDomain.CustomerId。确保可以比较这些类型类型是否相等。
使用 valeobject CustomerId 创建第三个组件“SharedValueObjects”,并在两个域中使用该类型
哪一个更受欢迎,或者你能想出第四个更好的吗?
c# - 用一组值对象映射一个组件
如何映射(使用基于 xml 的方法)value object (component)
包含ISet<String>
属性的一个?
谢谢!
php - 什么是 PHP 中的值对象的示例?
我已经阅读了大量的 C# 值对象示例,并且我知道它是一个由它的值标识的“对象”。如果值更改,则该对象是“新的”。
但是,对于 PHP 而言,这似乎没有任何意义......要么,要么我只是没有建立连接。
值对象只是一个字符串吗?
database - 如何从数据库生成 Flex VO
我们已经拥有包含真实数据的数据库。现在我们想在此之上构建一个 Flex-Java。我们知道如何使用 Hibernate 工具从数据库生成/逆向工程 Java 代码。现在的问题是如何生成 VO 动作脚本!这个想法很简单,就像 Hibernate 从 DB 生成 POJO。
注意:我们尝试了 Adobe 的数据模型驱动方法,但我们不喜欢它。
domain-driven-design - 这些值也是值对象吗?
我想我理解值对象(它们没有概念标识,它的属性集是它的定义等)以及它们与Entities的不同之处,但我仍然对原始类型的值(int,string ...)是否感到困惑直接分配给Entity的属性也被视为VO。
例如,在下面的代码中,Name
分配给的对象(类型)Person.Name
是VO,但值是否分配给Person.FirstName
,Person.LastName
也Person.Age
被认为是VO?
谢谢你
domain-driven-design - 在以下模型中,地址不应该是值对象吗?
假设公司和个人都具有相同的邮件地址。这些陈述中哪些认为有效?
1.“如果我修改 Company.Address,我希望 Person.Address 自动获取这些更改”
2.“如果我修改Company.Address,它一定不会影响Person.Address”
如果 1 为真,地址应该是一个实体
如果 2 为真,地址应该是一个值对象。
在上面的模型中,邮件不Address
应该是一个值对象,因为即使Company
有Person
相同的邮件,这封邮件仍然没有概念身份?
换句话说,如果最初Company
和Person
共享initial.address@gmail.com,然后得到新邮件new.address@gmail.com,那么我们可以说邮件地址 initial.address@gmail.com本身没有改变,而是Company
并将Person
其替换为new.address@gmail.com?
因此,据我了解,一个共享的事实Address
不足以赋予它个性(即身份)?!
谢谢
domain-driven-design - 对两个并行聚合、实体、值对象层次结构进行建模
我正在为以下域设计而苦苦挣扎,据我了解,这些域设计似乎不符合 DDD 的概念。
一方面,我有 Device->Sensor->Measurement 层次结构,建模为聚合,以 Device 作为根,Sensor 作为实体,Measurement 作为 VO。到目前为止,一切都很好。
现在,每个设备都有一个类型,传感器也是如此。同时测量值是指被测量的变量(例如温度)。这是事情破裂的地方。
我最初将类型建模为值对象,但类型有限,许多设备和传感器共享相同的类型。
然后我决定将它们建模为一个聚合,遵循与设备聚合类似的结构:DeviceType->SensorType->Variable。但是,这不起作用,因为传感器可能会引用 SensorType 和 Measurement to Variable,从而打破了仅允许从另一个聚合内部引用聚合根的规则。此外,可能会发生不止一个 DeviceType 包含相同类型的传感器(例如电池电量传感器),并且不止一个 Sensor 测量相同的变量(例如电池电量水平)。
这导致我将每个实体(DeviceType、SensorType、Variable)作为独立的实体,每个实体都有自己的(退化的)。
我的具体问题是:我是否正确解释了聚合、实体、VO 的概念,或者只有根是反模式的这种贫血聚合?
c# - 将对象的状态保存到历史列表并恢复它的最佳实践是什么?
我有以下情况:
我正在设计一个 MVVM 应用程序,它通过串行端口或其他东西与一些计算机外部设备进行通信。每个Device
都有一些属性,例如 id、名称等,并且还由Module
具有自己属性的不同 's 组成。我有一种 xml 数据库来保存和加载设备。每个Device
都有自己的文件。反正:
该应用程序通过一种存储库加载所有文件,并提供一个列表Devices
以选择实际连接的文件或创建新文件。当我选择 currentDevice
时,我会得到一个页面,该页面表示Modules
基于设备类型的列表。IE:
Device_Type_A
包括Module_A
和Module_B
Device_Type_B
包括Module_A
和Module_C
...
的属性Modules
通过通信填充。现在我想将Modules
一种模块状态历史的状态保存到当前设备的 xml 文件中。
这样做的最佳做法是什么?ModuleSnapshot
基于Fowlers Snapshot创建一个类并存储它有用吗?还是我必须做一种不可变的值对象并将其存储到文件中?
设备是实体,但模块历史条目感觉像值对象。我也想显示加载的设备文件的历史记录。是否需要一个Module
类作为通信东西的模型和一个类作为它的不可变值对象副本,比如ModuleHistory
?
像这样的东西?
design-patterns - 在 D 中实现值对象模式
我想在 D 中实现值对象模式。也就是说,我希望对不可变对象具有可变引用变量。T
变量应该是可赋值的,但T
对象不应该改变它们的状态。
const
我对 D和D之间的区别感到困惑。让我用一个骨架类immutable
来说明我的疑问:Rational
我应该声明num
and den
as const
orimmutable
吗?整数有区别吗?
我应该声明invariant
为const
还是immutable
?将其标记为immutable
会导致编译时错误,但这可能是由于其他成员没有被标记immutable
。
我应该将构造函数声明为const
orimmutable
吗?那意味着什么?
我应该声明toString
为const
还是immutable
?
除了标记单个成员,似乎我还可以标记整个班级:
其中哪一个对值对象模式最有意义?
怎么样pure
?在值对象模式中,方法应该没有副作用,那么将每个成员声明为 有意义pure
吗?不幸的是,标记toString
为pure
不会编译,因为std.string.format
它不纯;有什么特别的原因吗?
似乎我也可以将类本身声明为pure
,但这似乎没有任何效果,因为编译器不再抱怨toString
调用不纯函数。
像 then 那样声明一个类是什么意思pure
?它只是被忽略了吗?
domain-driven-design - DDD 全局值对象
我需要在许多对象中引用 TimePeriod(AM、PM、NIGHT 等)。例如。预定会议,实际会议。
尽管 TimePeriod 在数据库中带有 ID,但它绝对不是实体,因为它不会更改,并且“AM”期间在所有对象中都是相同的。
我的困难在于知道如何从数据库中检索这个值对象。由于不同的对象可以引用它,它不应该是它们的任何存储库方法的一部分,但同时它不应该真正拥有自己的存储库,因为它不是根。
那么你会如何建议从数据库中获取它呢?
谢谢。
更新
我已经接受了 eulerfx 的回答,因为他解释说句点仍然可以通过存储库从数据库返回,尽管我不太喜欢为多个全局值对象设置多个小型存储库的想法。这个区域对我来说仍然有点灰色。