问题一:为什么不应该把diff逻辑写在领域服务中,而是应该写在仓储中?
为什么不应该把diff逻辑写在领域服务中,而是应该写在仓储中?
参考回答:
因为领域服务应该保持其纯粹性,不关注技术上的逻辑,如数据比较(diff)等。增加领域服务逻辑的复杂性可能会破坏其领域模型的清晰性和可维护性。而仓储本身就是负责封装数据存储和访问的,因此将diff逻辑放在仓储中是更合适的,这样可以让领域服务感觉到聚合实体一直在内存中一样。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/654288
问题二:为什么聚合根不能直接从ORM框架中返回,而需要进行“重建”操作?
为什么聚合根不能直接从ORM框架中返回,而需要进行“重建”操作?
参考回答:
因为聚合根是由多个数据对象(DO)组成的,而持久化中间件(如ORM框架)通常只能返回单个数据对象。因此,仓储需要负责将这些从ORM框架中获取到的DO组装为聚合根中的实体(Entity)和值对象(Value Object),并确保这些实体与原来的实体保持一致。这个过程被称为“重建”实体的操作。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/654289
问题三:Convertor在仓储中的作用是什么?
Convertor在仓储中的作用是什么?
参考回答:
Convertor是仓储中用于维护拆解和重建规则的一种工具。仓储应当知道怎么拆解(从持久化存储中读取数据并转换为内存中的对象)就应该怎么复原(将内存中的对象转换回持久化存储的格式)。Convertor封装了这些拆建规则,使得仓储能够准确地执行这些操作。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/654290
问题四:事件溯源是如何用于重建聚合实体的?
事件溯源是如何用于重建聚合实体的?
参考回答:
事件溯源是一种通过实体的快照和领域事件集合回放来恢复聚合实体的方法。在事件溯源中,每次聚合实体的状态变化都会生成一个领域事件,这些事件被持久化存储。当需要重建聚合实体时,可以从最近的快照开始,然后按照时间顺序回放这些领域事件,逐步将聚合实体恢复到所需的状态。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/654293
问题五:在仓储实现中,关联单例(如监听器)应该如何处理?
在仓储实现中,关联单例(如监听器)应该如何处理?
参考回答:
关联单例(如监听器)也应该由仓储负责拆解和恢复。在持久化时,仓储需要知道如何将这些单例与聚合根实体一起保存;在恢复时,仓储需要知道如何将这些单例与重建后的聚合根实体关联起来。这样可以确保聚合根实体与其关联的单例在持久化和恢复过程中保持一致。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/654303