菱形对称架构的表达力

简介: 菱形对称架构的表达力

在14年读《实现领域驱动设计》接触到六边形架构,感觉很受启发,每个限界上下文就对应一个六边形架构:


image.png

后来又学习了《架构整洁之道》里面的整洁架构,和六边形结合起来看,明白了其精华在于让业务内核稳定,基础设施处于外围作为技术实现手段,去依赖业务内核,架构模型体现为从外向里依赖。


image.png


我弄懂后,开始在团队内部进行推广,但是发现大家不容易理解记忆,什么时候用防腐层ACL,什么时候用开放主机服务OHS,大家还是习惯于传统分层架构的从上向下的依赖方向,感觉费了很大的劲才让大家明白。落地过程中,因为理解偏差,时不时发生这样那样的问题,最常见的问题是让领域层依赖了基础设施。


后来接触了张逸老师提出的菱形对称架构(Rhomboid Symmetric Architecture),咋一看不太对,怎么把资源库放在了领域层(domain)之下的接口层(菱形对称架构称之为端口层),后来仔细琢磨,其实和六边形架构本质一样,也符合整洁架构的模型。


image.png


既然本质一样,干嘛提出菱形对称架构呢?


经历过前面落地的艰难,才能体会到菱形的价值。


原来这种架构模型更加符合程序员的思维习惯。大多数程序员习惯“从上向下的”传统分层架构,典型的分层:

展现层 -> 业务层 -> 持久层 -> 数据库层


菱形也是“从上向下的”。分析一下对于限界上下文的一次典型调用的运行时过程,从北向网关的远程服务层 -> 应用服务层 -> 领域层 -> 南向网关端口层 -> 适配器层持久化到数据库,非常容易理解。


端口层是接口Interface,领域层(实际上是领域层内的领域服务)依赖端口层,适配器层实现端口层,这里需要依赖倒置。


明显可以看出:南向网关需要依赖倒置,充当防腐层ACL,而北向网关是不需要依赖倒置的,就是开放主机服务OHS。这样的分解要比六边形架构更好理解。总感觉六边形有点过于抽象,理解有些烧脑。


实践中,程序员们对南向网关作为防腐层ACL容易理解接受,当把资源库Repository从domain层转移到端口层和其它端口元素统一管理后,立刻感觉到整个代码结构非常的整齐划一、清晰易读,让DDD的理念落地的简单自然。


菱形对称架构典型(推荐)的代码模型如下图所示:


image.png


这样的代码结构是非常清晰的,只要团队遵循这一模式,就能形成一致的代码模型,便于理解和沟通。

相关文章
|
JSON 前端开发 测试技术
菱形对称架构
菱形对称架构
菱形对称架构
|
26天前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
7天前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
24天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
6天前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
104 68
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
25天前
|
Dubbo Java 应用服务中间件
服务架构的演进:从单体到微服务的探索之旅
随着企业业务的不断拓展和复杂度的提升,对软件系统架构的要求也日益严苛。传统的架构模式在应对现代业务场景时逐渐暴露出诸多局限性,于是服务架构开启了持续演变之路。从单体架构的简易便捷,到分布式架构的模块化解耦,再到微服务架构的精细化管理,企业对技术的选择变得至关重要,尤其是 Spring Cloud 和 Dubbo 等微服务技术的对比和应用,直接影响着项目的成败。 本篇文章会从服务架构的演进开始分析,探索从单体项目到微服务项目的演变过程。然后也会对目前常见的微服务技术进行对比,找到目前市面上所常用的技术给大家进行讲解。
40 1
服务架构的演进:从单体到微服务的探索之旅
|
13天前
|
消息中间件 运维 Kubernetes
后端架构演进:从单体到微服务####
本文将探讨后端架构的演变过程,重点分析从传统的单体架构向现代微服务架构的转变。通过实际案例和理论解析,揭示这一转变背后的技术驱动力、挑战及最佳实践。文章还将讨论在采用微服务架构时需考虑的关键因素,包括服务划分、通信机制、数据管理以及部署策略,旨在为读者提供一个全面的架构转型视角。 ####
26 1
|
22天前
|
消息中间件 监控 安全
后端架构演进:从单体到微服务####
在数字化转型的浪潮中,企业应用的后端架构经历了从传统单体架构到现代微服务架构的深刻变革。本文探讨了这一演进过程的背景、驱动力、关键技术及面临的挑战,揭示了如何通过微服务化实现系统的高可用性、扩展性和敏捷开发,同时指出了转型过程中需克服的服务拆分、数据管理、通信机制等难题,为读者提供了一个全面理解后端架构演变路径的视角。 ####
45 8
|
23天前
|
Cloud Native 安全 API
云原生架构下的微服务治理策略与实践####
—透过云原生的棱镜,探索微服务架构下的挑战与应对之道 本文旨在探讨云原生环境下,微服务架构所面临的关键挑战及有效的治理策略。随着云计算技术的深入发展,越来越多的企业选择采用云原生架构来构建和部署其应用程序,以期获得更高的灵活性、可扩展性和效率。然而,微服务架构的复杂性也带来了服务发现、负载均衡、故障恢复等一系列治理难题。本文将深入分析这些问题,并提出一套基于云原生技术栈的微服务治理框架,包括服务网格的应用、API网关的集成、以及动态配置管理等关键方面,旨在为企业实现高效、稳定的微服务架构提供参考路径。 ####
43 5
|
26天前
|
监控 API 微服务
后端技术演进:从单体架构到微服务的转变
随着互联网应用的快速增长和用户需求的不断演化,传统单体架构已难以满足现代软件开发的需求。本文深入探讨了后端技术在面对复杂系统挑战时的演进路径,重点分析了从单体架构向微服务架构转变的过程、原因及优势。通过对比分析,揭示了微服务架构如何提高系统的可扩展性、灵活性和维护效率,同时指出了实施微服务时面临的挑战和最佳实践。
47 7