|
|
1
4
我想说,在你重新定义
因为这个词有两种不同的含义,所以你必须在代码中明确它。”“版本控制”是一种方法,虽然我不会使用这样的通用解决方案,但有不同的建模选项。
你可以明确的说“用户名”的历史就是一个历史。例如,创建一个
有些人有时建议从对象中提取“规则”,然后再重新应用。这样,对象本身在任何时候都是有效的,您可以要求它根据可能更改的规则验证自身。我真的不喜欢这种解决方案,但这是一种选择,而且
所以问题并不在于值对象不适合事件源,而是建模必须更精确。 |
|
|
2
3
对。 “别那么做。” 您所描述的问题实际上是一个关于消息传递的问题—如果我们对消息进行向后不兼容的更改,那么事情就会破裂。 (更准确地说,您有一个“Username”消息,并且您正尝试使用一组新的约束重新使用该消息,这些约束拒绝了该消息以前的一些有效使用)。
也就是说,添加对新消息的支持和删除对旧消息的支持成为两个单独管理的选项。 格雷格·杨的书 Versioning in an Event Sourced System Spec-ulation . “值对象”意味着域模型的当前实现用于移动信息的类型是与消息不同的关注点。我们在内存中使用的数据结构不需要与序列化格式耦合。
具有挑战性的是,在项目开始时,关于不同表示何时会出现分歧的信息量最少。 |
|
|
3
3
我们用稍微不同的方法解决了这个问题。通过分离 我们的价值对象的API来自内部(仅限域)API,我们能够在不影响另一个的情况下进化一个。 例如:
在域内部,类可以访问内部(无约束)构造函数。因为这不强制任何业务约束,所以可以始终以这种方式创建value对象的实例(不管其值如何)。通过在重放事件时使用此构造函数,我们可以确保历史数据总是成功的。 这种设计的好处是:
|
|
|
4
1
虽然我已经回答了,但我确实觉得这是一个有趣的情况。 记录 -因此,只不过是一个数据容器,可用于重新构建聚合。 也就是说,当规则改变时,域也会改变。领域驱动设计的一个主要部分是根据需要捕获尽可能多的领域(规则/结构)。如果是这样的话,规则的变化是否也应该保留?
例如,如果我们有
现在我们开始 2018年3月1日
这是基本的想法。这样,我们也保持了我们的“旧”规则。这个 可以 只是一个想法。 |
|
|
simply lemon · python上链表的添加方法 1 年前 |
|
|
Anonymous · 为什么在这个例子中self和类名的用法不同? 2 年前 |
|
|
P N Singh · 在CPP Oops中调用对象而不创建它 2 年前 |
|
|
Muthuraj · 如何创建一个通用工厂来创建某种类型的实例[重复] 2 年前 |
|
|
Andy Votava · 从父类定义调用学生方法 2 年前 |