当前位置: 首页 > news >正文

COLA学习之DDD各种术语分析(一)

        小伙伴们,你们好,我是老寇,前段时间,老寇刚看完张健飞老师的两本书《代码精进之路:从码农到工匠》和《程序员的底层思维》,书中的内容让我受益匪浅,因此,我把对COLA的理解做成专栏分享给大家,跟我一起学习COLA吧!

        在学习COLA之前,我们先要了解架构的演进过程

六边形/洋葱/整洁/清晰架构
发展历程

区别对比

架构

介绍不能解决问题
六边形架构

六边形架构(也叫"端口和适配器"架构)主要关注系统的可扩展性和与外部世界的交互。

通过"端口"和"适配器"的概念,清晰地将应用的核心业务逻辑与外部接口依赖(Web服务、数据库)分离,使得应用能够更加灵活地与外部世界交互(易于测试与扩展)。

 1.应对复杂得业务建模问题没有提供具体解决方案,不能帮助处理复杂业务逻辑和领域建模

2.在实施过程中,团队可能面临沟通和协作上挑战,尤其是在大型项目中,不同团队间如何管理端口和适配器的职责分配。

洋葱架构

洋葱架构的设计灵感来自于六边形架构,但它更强调于层次化的组织结构。它通过将应用分为多个层次,从核心业务逻辑到外部依赖,形成一个"洋葱"的结构。

每一层都有明确的责任,核心业务逻辑位于最内层,外部技术和实现细节在最外层(Web服务、数据库)。当需要更换外部技术栈时,只修改外层,不会影响到核心业务逻辑。

1.洋葱模型本身没有提供有效的领域建模方法,对于复杂业务领域的建模问题仍然需要其他架构模型(领域驱动DDD)来补充。

2.如果希望需要非常多种类的外部接口或技术栈交互,适配层变得非常庞大和复杂,难以管理。

整洁架构

整洁架构是对六边形架构和洋葱架构的进一步提炼和延伸。

强调高内聚低耦合设计,通过将不同功能的代码划分到不同的分层(核心业务逻辑,用例层,接口层等),每个层之间耦合最小,从而实现高内聚和低耦合。

通过环形分层来组织代码,核心业务逻辑位于最内层,外部技术(RPC,数据库)与业务逻辑解耦,可以灵活替换。

与六边形架构类似,整洁架构通过依赖规则确保内层不依赖外层,依赖注入帮助实现层与层之间的解耦。

1.设计和实现比较复杂,为系统带来不必要的复杂度,尤其是对于中小型项目,过于严格的分层可能带来不必要的复杂性。

2.整洁架构的规则和约定对新手不太友好,尤其是没有使用依赖注入的开发者来说,掌握整洁架构的设计理念和实践可能需要一定时间。

清晰架构

清晰架构对整洁架构进一步优化,它强调可理解性和简洁性,核心思想是以业务需求为核心,设计清晰的模块划分,使得系统的结构和职责(CQRS职责分离)尽量简单明了。

通过简洁架构,减少不必要的分层,提高开发效率,并降低因复杂设计带来的开发障碍。

清晰架构侧重于模块之间的清晰分界和简洁性,避免不必要的复杂结构。

功能和复杂度高时难以扩展

DDD术语

学习DDD术语之前,我们先来看一张COLA分层架构图,方便加深对DDD术语的理解

战术设计与战略设计

众所周知,DDD领域驱动设计分为战略设计业务角度考虑领域划分)和战术设计技术角度考虑详细的设计和编码) 

分层架构
DDD术语解释说明
战略设计
战术设计
分层架构
聚合根
聚合
实体
值对象
领域服务
工厂
领域事件
事件溯源
仓储
核心域
支撑域
通用域
通用语言
充血模型
贫血模型

http://www.lryc.cn/news/500308.html

相关文章:

  • Pygments:高效的语法高亮工具
  • 算法-字符串-43.字符串相乘
  • linux的vdagent框架设计
  • CV工程师专用键盘开源项目硬件分析
  • qtcanpool 知 08:Docking
  • Milvus向量数据库01-基础概念
  • mysql备份数据库
  • NLP与LLM的工程化实践与学习思考 - 写在开头
  • LeetCode322. 零钱兑换(2024冬季每日一题 28)
  • Unix、GNU、BSD 风格中 ps 参数的区别
  • 单片机读写内部flash实现断电数据存储
  • 注意力机制介绍
  • 爬虫运行后数据如何存储?
  • C# 自动自定义截图的内容
  • Java的Stream流:文件处理、排序与串并行流的全面指南
  • [Maven]下载安装、使用与简介
  • 056 WXML+ WXSS+PHP+LW+校园配送商城微信小程序开发与设计 源码 文档 全套资料
  • Python 在同一/或不同PPT文档之间复制幻灯片
  • C#生成CSR(CertificateSigningRequest)和密钥
  • Docker 安装 Oracle创建表空间并导入数据库
  • elementui table子级tree懒加载bug
  • AI与低代码技术融合:如何加速企业智能化应用开发?
  • 【C#】新建窗体文件,Form、UserControl
  • ansible学习笔记之02command模块与shell模块
  • 在Docker中部署禅道,亲测可用
  • C++(十二)
  • 【数学建模】线性规划问题及Matlab求解
  • 【JavaWeb后端学习笔记】Spring全局异常处理器
  • PT8M2102 触控型 8Bit MCU
  • 4. React 性能优化技巧:如何让你的应用更快