问题描述
据我所知,六边形架构的关键规则之一是域层如何与除应用层之外的所有事物隔离(域层位于核心中,因此根本没有任何依赖关系):
我的问题是,域层是否做过任何工作或了解数据持久性?假设我们有一些业务逻辑依赖于被检索然后持久化的数据,它是否应该总是是编排这个的应用层?
加载业务逻辑运行所需的一切 -> 告诉领域层运行所有的业务逻辑 -> 提取业务逻辑的结果并告诉基础设施层将它们持久化 ->
从这个意义上说,应用层是不是总是需要跟踪领域层计算的任何结果,因此总是实施某种 UnitOfWork 模式来跟踪这些结果?
域层是否可以与存储库或存储库的接口一起使用?有一些来源似乎表明这很好,从我的角度来看,这与图表完全矛盾。
解决方法
假设我们有一些业务逻辑依赖于被检索然后持久化的数据,是否应该总是由应用层来编排这个?
在理想化的设置中,您有明确的关注点分离:域模型使用本地内存中已有的信息计算事物,以及协调从/向本地内存复制信息的应用程序代码。
表达方式稍有不同:我们应该能够在完全不干扰域模型实现的情况下替换所有管道。
在简单版本中,我们立即知道本地需要什么信息,因此应用程序可以获取所有内容的副本,域模型计算更改,然后应用程序代码将本地更改复制到需要的位置。
>如果我们不一定预先知道我们需要的所有信息,这会变得更加棘手。在这些情况下,您最终会做出选择:询问域模型它需要什么信息,然后获取它,或者将能力传递给域模型以查找信息本身。
您可能不会直接从域模型中使用 REPOSITORY - 不完全是;您更有可能看到域服务。换句话说,获取某些信息的能力可能有一些您作为参数传递给域模型的表示,以便它可以执行自己的查询。
注意:在 Evans 的原书中,域服务是在对域建模时出现的一种模式(第 5 章),其中存储库是一种出现在生命周期管理中的模式(第 6 章)。
分布式信息通常涉及故障模式,我们通常希望我们的域代码不要被一堆故障管理逻辑混乱,就像我们通常不希望我们的域代码关注一个一堆持久性问题。
另见