这是传统架构模式向DDD转型的初步架构图,已经有了DDD的一些影子,但是严格来说对于领域的划分还没有,所以我们只是在传统系统架构上做了一些总结和提炼。
在有UI界面参与的架构中,其实还有MVC架构,但是这种架构不适合大型系统。却比较适合XXX管理系统,XXX控制台等类型的项目。
六边形架构也叫端口适配器架构,这个架构风格算是国外技术人员拟定的,初次出现应该在《实现领域驱动设计》书里面,这是一种具有对称性特征的架构风格,虽然标注了端口但是实际上我们不需要太多关注端口在架构上的影响。
六边形架构主要适用于大型复杂的应用系统,包括各种管理平台,计算平台,数据平台等。通过端口和适配器对不同的客户端进行集成,因此该架构在DDD中使用具有相当大的稳定性和灵活性。
事件驱动在软件开发早起很少有人提起,在后续的DDD发展中通过大佬的分析和应用慢慢火起来。在分布式下事件驱动架构可以很好的发挥各自应用的优势。下面的架构图是在《企业集成模式》一书中找到的,我进行了汉化,从消息和事件的角度来看应用之间如何交互。
基于事件驱动架构的思想我们可以很容易的想到有状态机和工作流应用,另外就是物联网下的传感器到服务端的数据事件传输。另外就是事件机制在应用解耦,应用集成中也可以发挥优势。
整洁架构是《架构整洁之道》中提出的一种架构风格,这种架构风格与洋葱架构和六边形架构有异曲同工之妙,但是都有一些共同点就是通过依赖倒置原则对各个模块进行分层,外层应用只依赖内层应用,内层应用是最稳定的。在整洁架构中对适配器和接口,事件等进行了抽象,因此图里并没有特别标明,所以这是一种在理想中的架构模式。需要说明的是整洁架构和DDD的传统架构,分层架构并不仅仅是四层或者五层的关系。可以在实际应用中自主划分层。
面向服务化的SOA架构是在《微服务架构设计模式》书中提到的,这个架构方式是通过提炼和整理DDD中的模式思想并结合六边形架构进行服务化,在一个架构图中即可了解核心服务的上下游关系,和服务本身提供的服务能力。同样这个架构模式实际上也是几种架构风格融合在一起的,包括REST架构和基于事件消息的架构。
需要将单体服务拆分多个服务的情况比较适用,如果应用本身是由多个服务组成的也可以使用这种方式。
分层的思想在计算机领域很早就流行了,但是分层架构随着软件系统的发展而逐渐深入人心,其目的还是为了通过分层分解应用的本质复杂性,将稳定的模块下沉,不稳定的模块通过依赖倒置进行约束。分层架构其实应用最广泛的一种架构风格,整洁架构,洋葱架构,六边形架构都可以看到分层架构的影子。
应用本身是单体的,需要迭代优化,可以通过模块分包分层降低应用复杂度。
应用由多个不同的客户端,需要支持多个业务场景,可以通过分层对核心模块剥离提高稳定性。
洋葱架构是国外大佬提出的一种架构风格,其本质也是借助分层的思想通过将不同层次的业务模块隔离开,因此,看懂整洁架构和六边形架构之后洋葱架构也是很容易理解的。洋葱架构实际上有很多变体,比如外层是基础设施层,内层是领域层。洋葱架构的风格跟整洁架构类似,但是不仅仅是为了解决DDD应用所产生的问题,基于洋葱架构可以应用到普通的复杂系统里面。
单体复杂服务或者是多个微服务组成的应用。
CQRS架构最早也是国外大佬提出的,CQRS将CRUD拆解成两种模式,查询模式和命令模式,因此CQRS的全称就是命令查询职责分离(Command and Query Responsibility Segregation)。在《CQRS Documents by Greg Young》论文中并没有如下的架构图。下图是从martinfowler大神的网站上汉化的,其更能表达CQRS的应用方式。本质上CQRS也是为了降低CRUD带来的复杂性,因此这种架构在DDD中也有一席之地。
在复杂应用下存在大量的CRUD操作,同时查询跟更新等操作也很复杂,涉及到多个客户端的场景。
COLA架构是阿里资深技术专家提出的基于多种架构风格融合的一种架构风格,也是国人首次提出可落地的一种DDD架构风格。这种架构风格已经在内部多个项目落地,同时外部企业也有在尝试通过DDD和COLA进行复杂业务系统构建。COLA架构目前看已经逐步成熟,提供了一些可落地的方法和思想。
适用于大规模业务网站,多个大规模应用解耦的场景。
目前COLA架构4.0已经出现了,因此可以借助COLA架构提供的套件生成符合DDD风格的代码,进而可以基于此降低相对复杂的应用在DDD中的实践难度。
这种架构风格是在《微服务架构涉及模式》中发现的,其本质就是通过REST风格的HTTP协议构建多个微服务应用,从REST的角度结合六边形架构进行复杂业务开发。目前这种架构风格应用的也是相对比较广泛的。
应用从单体服务拆分到多个服务,同时有多个不同种类不同风格的客户端需要对接。
也适用于一开始就采用基于REST的微服务应用,通过领域识别和网关来构建整个应用服务工程。
《架构整洁之道》
《实现领域驱动设计》
《微服务架构设计模式》
《领域驱动设计-软件核心复杂性应对之道》
《CQRS Documents by Greg Young》
https://jeffreypalermo.com/2008/07/the-onion-architecture-part-1/
https://www.enterpriseintegrationpatterns.com/patterns/messaging/
https://martinfowler.com/bliki/CQRS.html
通过上面的介绍我们可以知道很多架构风格都是互通的,有些是跟框架有关的,有些就是纯理论的,关于更详细的一些架构上的论文资料网上也有,不过是纯英文的,想进一步了解可以私聊我。另外一方面单靠这一篇文章无法更深入讲解每个架构的具体细节和变化,后续会开几篇文章单独讲解CQRS架构,洋葱架构和事件架构里的更详细的方面,以及如何整合DDD的模式让架构风格更有体感,关注我公众号,敬请期待。