戏说领域驱动设计(十三)的核心架构有哪些特点?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2461个文字,预计阅读时间需要10分钟。
在完成了两章垫脚石后,本章继续撰写第九章。我们之前介绍过多种架构模式,本章将重点探讨一种经典的、在DDD书中所介绍的、经过改进的四层架构。需要注意的是,这里有一些细节需要留意。
在做了两章铺垫后本章再续写第九章。我们之前介绍过了好几种架构模式,那么本章只挑一种往死了整,这个架构其实就是在DDD书中所介绍的经典四层的变更版。这里面需要注意一点,四层架构是洋葱架构的一部分,尽管洋葱型已经是微服务架构系统中一种事实上的标准,但我们不会对各类适配器做重点介绍,那些东西一般都是开源的组件或者没有业务逻辑的组件比如DAO。再说了,您都已经学习DDD了还需要我再讲解什么是DAO吗?所以我们只介绍下面图形中绿色边界内部的东西。
一、基于CQS的ODD风格分层架构四层架构实际上更多的用于面向对象(也可称之为对象驱动式)编程,如果是面向过程其实经典三层就够了。下面图展示了一个典型的四层架构的构成及各层间的访问限制。如果您看过DDD相关的经典书籍会发现此图和书上的并不一致,主要原因有两点:1)省略了视图层,那个不是我们的重点;2)资源库实现理论上属于基础设施层,而我们在这里进行分开是因为这个组件比较核心,我见过较多的案例都是把资源库误当DAO用,所以需要在此重点提出来讲解。本来我这个系列文章就充满了个性,咱们直面开发中的各类痛点会提供大量的干货而不是和其它文章一样都含糊的带过去。
上图,如果将“资源库”和“基础设施”二合一,您再根据依赖关系就能推导出来这是一个典型的洋葱架构。再加上比如RESTful、MQ等适配器就是六边型架构。这回您知道为什么我说洋葱和六边型其实是一个东西的不同叫法了吧?除了层的结构信息,访问顺序也是您需要重点关注的内容,如果违反了约束所谓的洋葱也就不成立了(比如让领域模型转而依赖基础设施,那领域模型就不再是架构中的核心了)。还有一点需要说明,在一个服务中(Service)通常会包含两种不同的架构模式:查询模式架构和命令模式架构,上图属于命令模式,查询请参考下图。一般来说查询架构相对要简单的很多,使用经典三层开发模式即可。
本文共计2461个文字,预计阅读时间需要10分钟。
在完成了两章垫脚石后,本章继续撰写第九章。我们之前介绍过多种架构模式,本章将重点探讨一种经典的、在DDD书中所介绍的、经过改进的四层架构。需要注意的是,这里有一些细节需要留意。
在做了两章铺垫后本章再续写第九章。我们之前介绍过了好几种架构模式,那么本章只挑一种往死了整,这个架构其实就是在DDD书中所介绍的经典四层的变更版。这里面需要注意一点,四层架构是洋葱架构的一部分,尽管洋葱型已经是微服务架构系统中一种事实上的标准,但我们不会对各类适配器做重点介绍,那些东西一般都是开源的组件或者没有业务逻辑的组件比如DAO。再说了,您都已经学习DDD了还需要我再讲解什么是DAO吗?所以我们只介绍下面图形中绿色边界内部的东西。
一、基于CQS的ODD风格分层架构四层架构实际上更多的用于面向对象(也可称之为对象驱动式)编程,如果是面向过程其实经典三层就够了。下面图展示了一个典型的四层架构的构成及各层间的访问限制。如果您看过DDD相关的经典书籍会发现此图和书上的并不一致,主要原因有两点:1)省略了视图层,那个不是我们的重点;2)资源库实现理论上属于基础设施层,而我们在这里进行分开是因为这个组件比较核心,我见过较多的案例都是把资源库误当DAO用,所以需要在此重点提出来讲解。本来我这个系列文章就充满了个性,咱们直面开发中的各类痛点会提供大量的干货而不是和其它文章一样都含糊的带过去。
上图,如果将“资源库”和“基础设施”二合一,您再根据依赖关系就能推导出来这是一个典型的洋葱架构。再加上比如RESTful、MQ等适配器就是六边型架构。这回您知道为什么我说洋葱和六边型其实是一个东西的不同叫法了吧?除了层的结构信息,访问顺序也是您需要重点关注的内容,如果违反了约束所谓的洋葱也就不成立了(比如让领域模型转而依赖基础设施,那领域模型就不再是架构中的核心了)。还有一点需要说明,在一个服务中(Service)通常会包含两种不同的架构模式:查询模式架构和命令模式架构,上图属于命令模式,查询请参考下图。一般来说查询架构相对要简单的很多,使用经典三层开发模式即可。

