当前位置: 首页 > 知识库问答 >
问题:

DDD:持久性逻辑应该属于基础架构层吗?

公孙联
2023-03-14

我的应用程序遵循DDD设计原则。它是一个ASP.NET MVC应用程序,其中MVC web应用程序是表示层(我将控制器移到了应用层)。它还有应用层,主要是应用服务、用例等。应用层之上是域模型所在的域层。然后是基础结构层,它位于所有其他层之上,并且不依赖于其他层。

但是我注意到一个问题,如果持久化逻辑像DDD书中所说的那样进入基础结构层,基础结构层就会依赖于域层。例如,存储库需要知道要创建的领域模型(实体)的类型,有了这些知识,它们就变得依赖于领域层。然而,最初的DDD原则建议基础结构层应该绝对不依赖于任何东西。

所以现在我很困惑,持久性逻辑真的应该,属于基础架构层吗?如果是这样,它使基础设施层依赖于域层。如果不是,那么它应该在哪里呢?应用层?或者可能是应用程序层和域层之间的一个单独的层(正如应用程序服务使用存储库一样,存储库使用域模型)。你觉得呢?

共有1个答案

乐宜民
2023-03-14

我认为在这里可能有帮助的一个重要概念是区分依赖的类型--特别地,一个层或组件可以依赖于另一个层,因为:

  1. 根据该层中定义的概念定义,或
  2. 它使用另一层--通过委托给该层(也称为调用该层中服务的方法)
  3. 或以上两者

控制的倒置和依赖注入使这种区分变得更加重要。它们指导我们应该依赖于抽象而不是具体。

最初的DDD书籍没有特别提到这一点,但它已经成为实现DDD系统的一种非常常见的模式。

它也被称为端口和适配器模式,或六边形体系结构。

其思想是,它按照洋葱的“知道”来建模依赖关系--外层知道内层,但内层不知道外层。

这就是国际奥委会介入的地方。因为我们有一个内层委托给一个外层,所以只有外层实现了在一个内层中定义的接口(它之所以能这样做,是因为它知道内层的情况),才有可能。然而,IoC容器注入了实际的具体实现,有效地允许内层将控制权委托给外层,而不依赖于外层。

在这种概念化中,请求从左上角流到右下角,而内层对外层一无所知。

 类似资料:
  • 本文向大家介绍.NET逻辑分层架构总结,包括了.NET逻辑分层架构总结的使用技巧和注意事项,需要的朋友参考一下 一.基础知识准备:   1.层的原则:   (1)每一层以接口方式供上层调用。   (2)上层只能调用下层。   (3)依赖分为松散交互和严格交互两种。   2.业务逻辑分类:   (1)应用逻辑。   (2)领域逻辑。   3.采用的层:   (1)表示层(用户接口层):领域无关。  

  • 本文向大家介绍浅析.NET逻辑分层架构,包括了浅析.NET逻辑分层架构的使用技巧和注意事项,需要的朋友参考一下 一.基础知识准备:   1.层的原则:   (1)每一层以接口方式供上层调用。   (2)上层只能调用下层。   (3)依赖分为松散交互和严格交互两种。   2.业务逻辑分类:   (1)应用逻辑。   (2)领域逻辑。   3.采用的层:   (1)表示层(用户接口层):领域无关。  

  • 逻辑层 App Service 小程序开发框架的逻辑层使用 JavaScript 引擎为小程序提供开发者 JavaScript 代码的运行环境以及京东小程序的特有功能。 逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈。 开发者写的所有代码最终将会打包成一份 JavaScript 文件,并在小程序启动的时候运行,直到小程序销毁。这一行为类似 ServiceWorker,所以逻辑层也称之

  • 名称 方法 实现 Hibernate 优势 劣势 Mybaties Jpa get 1. Hibernate 1.1 单独使用 1.1.1 For Idea 新建项目:【File】——>【New】——>【Project】——>【Java】——>【Hibernate、JavaEE Persistence】 添加数据连接驱动 配置数据源 根据数据库表生成实体类:【Persistence】——>【名称】

  • 我正在引用另一个实体类中的实体,并出现此错误。下面是示例代码。我有这些课程在坚持。还有xml。 是什么导致了这个问题?我正在使用Spring数据JPA和Hibernate。

  • 问的最多的问题:”一个基于 MINA 的应用看起来像什么”?本小节我们将来了解一下基于 MINA 的应用架构。我们收集了一些基于 MINA 的演示信息。 架构鸟瞰图 这里,我们可以看到,MINA 是你的应用程序 (可能是一个客户端应用或者一个服务器端应用) 和基础网络层之间的粘合剂,可以基于 TCP、UDP、in-VM 通信甚至一个客户端的 RS-232C 串行协议。 你要做的仅仅是在 MINA