洋葱架构,持久化和通知

3
我正在学习“洋葱架构”,并有几点想法。
洋葱架构旨在将领域层与技术实现分离。因此,指导原则是让数据访问层(DAL)引用领域层(BL)。这样,我就可以将实体转换为存储对象。引用BL应该能够给我一个领域的“快照”,但如果没有更改跟踪系统,我将失去所有时间顺序事件,无法知道插入、更新或删除数据存储中的项目,以便之后正确地再次创建模型。
洋葱架构是否总是需要某些更改跟踪系统,甚至像事件存储这样的东西?我是否漏掉其他模式?

3
事件存储只是一种持久化机制。洋葱架构定义了从外到内的依赖顺序,但并不涉及你应该使用哪种持久化方式。这些都是你的具体实现细节。 - Alexey Zimarev
2个回答

3
领域层是否知道其需要持久化?
例如,我可能有一个新/更新客户屏幕,当我按完成时保存一个新客户。此时,我不关心更改跟踪,我只想存储所有内容。我的数据访问层(DAL)可以确定数据库中是否已经存在具有相同名称的客户(如果应该发出插入或更新查询)。
同样的事情适用于事件存储。如果您的领域关心事件、能够撤消事件等,则事件存储是一种技术实现。
可能发生的情况是,您的领域层始终由完整的内存上线可变系统组成。在这种情况下,甚至没有快照。
洋葱架构仅描述了工件的分离。它们是什么类型的工件将取决于特定的要求。

2
应用层应该负责这个工作。应用程序服务通过编排对域的调用来实现用例。作为用例的一部分创建或修改的域实体必须以某种形式在内存中保存以供稍后持久化。
通常的做法是将它们放入一个工作单元中(其实现位于基础设施层)。它跟踪对域实体所做的修改。当应用程序服务结束业务交易时,工作单元将把实体状态转换为可刷新到持久存储器的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接