架构设计系列之常见架构(二)

五、DDD(领域驱动设计)

领域驱动设计(Domain-Driven Design,DDD)是一种开发思想,强调将软件系统的注意力集中在业务领域上,将领域视为应用的核心。在架构设计中,DDD 提供了一种不同的思维方式,从以数据为中心的传统模型转向以业务领域为中心的模型。

1 、核心概念

  • 领域层
    • 对应于洋葱架构中的内层,是 DDD 中的核心
    • 在这一层,通过领域模型的建立,深入理解业务概念和规则
    • 通过建模,将专业领域的知识融入软件设计,实现软件系统与业务场景的紧密结合
  • 领域模型
    • 用于捕捉业务概念和规则的模型
    • 通过建立领域模型,将业务领域的复杂性呈现在软件系统中,提高系统对业务的表达能力
  • 实体/值对象/聚合
    • DDD 中的基本概念,用于构建领域模型
    • 实体表示具有唯一标识的对象
    • 值对象是没有唯一标识的对象
    • 聚合是一组相关对象的集合

2 、优势

  • 深入理解业务
    • 通过领域建模,开发团队能更深入理解业务需求和规则
    • 使软件系统更加贴近实际业务场景,提高系统的可理解性
  • 可维护性
    • DDD 通过清晰的领域模型,降低了系统的复杂度
    • 模块化的设计使得系统更易于维护
  • 适应性
    • 领域模型的建立使得系统更加灵活,能够适应业务领域的变化

3 、推荐阅读

《领域驱动设计:软件核心复杂性应对之道》(Eric Evans)

DDD 的经典之作,详细介绍了如何通过领域驱动设计来理解和解决复杂软件系统中的问题。

国内也有一些作者写了关于 DDD 的书籍,但是很多都是基于这本书来的,有兴趣的也可以看看:

  • 《解构领域驱动设计》(张逸),这本书可能更好理解一点。

4 、总结

DDD 在当前业内基本上分为两个派系:

  1. 理论派:重规范,重系统训练,以方法体系为重
  2. 实践派:重实践,重个人感悟,以思想体系为重

从对 DDD 这几年的关注和学习,我把它分成四个部分:

  1. 关于结构理论:DDD 是用来进行战术建模与战略建模的
  2. 关于过程理论:DDD 是用来指导系统重构与软件工程的
  3. 关于语言理论:DDD 是建立关于业务模型的统一语言的
  4. 关于建模理论:DDD 是用来指导模型驱动的领域建模的

领域驱动设计在架构设计中的核心思想是将业务领域置于关注的焦点,通过领域模型的建立和应用,实现软件系统与实际业务的密切结合。这种思想的应用使得架构更加灵活,更易于理解和维护。

六、 COLA

COLA 架构,即整洁面向对象分层架构,Clean Object-oriented and Layered Architecture,COLA,是一种旨在在架构层面控制软件复杂度的面向对象分层架构。该架构思想不仅提供了理论指导,还包含了具体实施的框架和工具,以确保整个软件系统保持清晰、可维护和可扩展。

1 、核心特点

四层架构

COLA 架构采用四层架构,将系统划分为不同的层次,以便更好地组织和管理系统的组件。

  • 表示层(Presentation Layer)
    • 负责处理用户界面和用户输入,呈现数据给用户
    • 包括页面、控制器等组件
  • 应用层(Application Layer)
    • 包含应用的核心业务逻辑,协调领域服务的调用
    • 不包含具体业务规则,主要用于编排业务流程
  • 领域层(Domain Layer)
    • 包括领域模型、实体、值对象、聚合等,体现了系统的业务核心
    • 包含具体的业务规则和业务逻辑
  • 基础设施层(Infrastructure Layer)
    • 处理与外部系统的通信、数据库访问等技术实现
    • 保持与具体技术的解耦,确保系统的灵活性
规范设计
  • 组件规范
    • 规定系统中组件的职责和行为,确保组件的设计符合整体架构
  • 包规范
    • 定义不同包的职责范围,确保包的划分清晰,避免功能交叉
  • 命名规范
    • 统一命名规范,提高代码的可读性,降低团队协作的沟通成本

2 、实施框架和工具

COLA 架构不仅是一种理论指导,还提供了具体实施的框架和工具,以降低实际项目的开发难度和风险。

  • 框架:提供了一套基础框架,包括四层架构的基本结构、组件之间的通信机制等
  • 工具:包括代码生成工具、规范检查工具等,帮助团队在开发过程中快速实现和遵循 COLA 架构

3 、优势

  • 清晰的层次架构:COLA 架构通过四层清晰的层次结构,使系统组织有序,易于理解和维护
  • 规范化设计:采用规范设计,确保团队对系统有一致的认知,提高协作效率
  • 可维护性和可扩展性:通过分层架构和规范设计,使系统更易于维护,并具备良好的可扩展性
  • 降低复杂度:通过控制软件复杂度,使开发团队更加专注于业务逻辑,而不是底层技术的实现

4 、指导原则

COLA 架构的指导原则包括四层架构的划分、规范化设计和实施框架工具的使用,确保整个团队在软件开发过程中能够始终遵循一致的设计理念,提高项目的整体质量。

在 COLA 架构的引导下,开发团队能够更好地应对软件复杂性,确保系统具备良好的可维护性和可扩展性。

七、 TOGAF

TOGAF(The Open Group Architecture Framework)是一种通用的企业架构开发框架,由 The Open Group 推出,它提供了一种综合性的方法,帮助企业定义和改进其 IT 战略、规划和实施过程。

1 、概述

TOGAF 的目标是通过定义清晰的技术路线图来改进企业的整体运营效果。包括四个关键部分:

  • 企业架构开发方法论 (Architecture Development Methodology, ADM)
    • 用于描述如何开发有效的企业架构
    • 提供了一套结构化的方法,帮助组织在不同层面上理解、规划和实施其架构
  • ADM 的指导说明
    • 提供关于如何有效使用 ADM 的详细指导,以确保架构的一致性和质量
  • 参考模型
    • 作为一个标准,提供了共享的基础架构,以促进企业架构的一致性和互操作性
  • 辅助资源
    • 包括框架、目录、指南和支持工具等,为组织提供实施 TOGAF 的辅助资源

2 、ADM 步骤

TOGAF 的 ADM 提供了一套详细的步骤,以引导企业架构的开发和实施:

  • 初步调查
    • 确定架构开发的范围和目标,建立团队,制定计划
  • 商务需求分析
    • 收集并分析业务需求,识别与业务目标相关的关键问题
  • 架构愿景与发展计划
    • 制定架构愿景,确定实现愿景的计划和阶段
  • 架构内容开发
    • 开发与架构愿景一致的详细架构内容,包括业务、数据、应用和技术层面
  • 架构交付物管理
    • 管理和维护架构开发过程中产生的各种文档和交付物
  • 解决方案评估
    • 评估候选解决方案,选择最佳方案以实现架构愿景
  • 实施与变更管理
    • 制定实施计划,监督实施过程,管理变更并确保项目成功

3 、优势和价值

  • 综合性方法
    • TOGAF 提供了一种综合性的企业架构开发方法,使组织能够在不同层面上协调和管理其架构
  • 标准化和一致性
    • 使用 TOGAF 可以促进标准化和一致性,确保整个企业在架构设计和实施方面保持一致
  • 规划和管理
    • ADM 提供了一套清晰的步骤,帮助组织规划、管理和实施其架构,确保项目按计划进行
  • 支持工具和资源
    • TOGAF 提供了一系列辅助资源和支持工具,帮助组织更轻松地采用和实施该架构

4 、指导原则

TOGAF 的指导原则包括使用 ADM 进行系统化和结构化的架构开发,依赖于参考模型和辅助资源,以及遵循详细的指导说明。通过遵循这些指导原则,组织可以更好地实现其企业架构的目标,提高整体运营效果。

八、 DODAF

DODAF(Department of Defense Architecture Framework)是由美国国防部于2003年推出的系统架构框架,旨在建立一套系统架构开发、管理、改进和实施的标准。

1 、概述

DODAF 的主要目的是提供一种标准的系统架构框架,以支持美国国防部及其他组织进行系统分析、系统集成和项目管理。它主要由五个层次组成:

  • 运营视图:关注业务流程和战术层面的分析,强调组织的战略目标和业务流程
  • 系统视图:关注系统和技术层面的分析,强调系统之间的相互关系和技术实现
  • 技术标准视图:关注技术标准和规范,强调系统的技术特性和标准遵循
  • 项目视图:关注项目管理和执行层面的分析,强调项目的计划、进度和资源分配
  • 数据视图:关注数据流和信息层面的分析,强调数据的收集、存储和传递

DODAF 强调架构的可视化和完整性,并允许不同的参与者和角色参与架构的开发过程。

2 、特征和要求

每个视图都有自己一系列的特征和要求,以确保架构的全面性和一致性。最重要的特征包括:

  • 架构框架:提供了整体的结构,定义了视图之间的关系和组织的总体构架
  • 业务流程:在运营视图中强调了业务流程,有助于理解组织的战略目标和核心业务

3 、应用范围

DODAF 的应用范围涵盖多个方面,包括系统分析、系统集成和项目管理。其广泛应用的领域包括:

  • 系统分析: 提供了多个视图,以全面了解系统的各个层面,促使系统分析更加全面和深入
  • 系统集成: 强调系统之间的关系和技术实现,有助于有效进行系统集成
  • 项目管理: 在项目视图中关注项目的计划、进度和资源分配,支持项目管理和执行

4 、优势和价值

  • 标准框架:DODAF 提供了一个标准框架,为组织提供了一致性的系统架构开发方法
  • 可视化和完整性:强调架构的可视化和完整性,有助于组织更好地理解和管理其系统
  • 战略和战术层面:同时关注战略和战术层面的分析,使得架构能够在不同层面上提供支持
  • 多角色参与:允许不同的参与者和角色参与架构的开发过程,促进了多方面的协作

5 、指导原则

DODAF 的指导原则包括使用不同的视图来覆盖系统的不同层面,确保架构的一致性和全面性。通过遵循这些指导原则,组织可以更好地应用 DODAF 框架,提高系统架构的质量和可管理性。

总结

在软件架构的领域中,我们介绍了多种经典架构模式,每一种都为解决特定问题和满足不同需求提供了独特的视角和解决方案,旨在帮助大家理解不同架构设计风格的适用场景,为未来的项目开发提供丰富的选择。

从经典的 MVC 到颠覆性的 CQRS,从灵活的六边形到深入的 DDD,从洋葱到可扩展的 COLA,从基础的模式到复杂的企业级架构框架,每一种都代表了一种独特的思考方式和技术实践。

无论您是在简单的 Web 应用程序还是复杂的分布式系统工作,理解并熟练运用这些架构都将有助于构建出更健壮、可维护且适应未来需求变化的软件。

记住,架构设计没有银弹,选择最适合您的项目和团队的架构才是最为关键的,让我们通过不断学习和实践,积累更丰富的架构经验,不断提升自己的架构设计水平,推动团队和组织朝着更稳健、可维护、可扩展的方向发展,同时在这个实践过程中不断提升我们的架构技能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/250928.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【云原生kubernets】Service 的功能与应用

一、Service介绍 在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。为了解决这个问题,kubernetes提供了Service资…

26 redis 中 replication/cluster 集群中的主从复制

前言 我们这里首先来看 redis 这边实现比较复杂的 replication集群模式 我们这里主要关注的是 redis 这边的主从同步的相关实现 这边相对比较简单, 我们直接基于 cluster集群模式 进行调试 主从命令同步复制 比如这里 master 是 redis_7002, slave 是 redis_7005 然后 这…

[c++]—vector类___提升版(带你了解vector底层的运用)

我写我 不论主谓宾 可以反复错 🌈vector的介绍 1.vector是表示可变大小数组的序列容器2.就像数组一样,vector也采用的连续存储空间来存储元素,也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组&…

工业性能CCD图像处理+

目录 硬件部分 ​编辑 软件部分 CCD新相机的调试处理(更换相机处理,都要点执行检测来查看图像变化) 问题:新相机拍摄出现黑屏,图像拍摄不清晰,(可以点击图像,向下转动鼠标的滚轮&#xff08…

nlp与cv的发展

Transformer的出现,促进了更高容量模型的建立,为大模型的出现奠定基础. 🧐大模型通常具有十亿个以上参数(仅供参考) 😮左边的蓝色是CV领域、右下绿色是NLP、右上蓝色是多模态😃基础模型(Foundational Models)首次由Bommasani等人在《Stanford…

算法--数据结构基础

文章目录 数据结构单链表栈表达式求值前缀表达式中缀表达式后缀表达式 队列单调栈单调队列KMPTrie并查集堆哈希表字符串哈希 数据结构 单链表 用数组模拟(静态链表)效率比定义Node类(动态链表)效率高些 使用数组模拟单链表&am…

2023年总结,讲讲我的故事吧,十年

文章目录 2023前十年后十年 周末,本该是提升自己的最好时机,也该是出去玩的大好时光,但是毫无意外的,在家躺了一天,单纯的有点累。 2023年,发生了好多事情,又好像没发生几件事,可能毕…

插入排序:直接插入排序 希尔排序

插入排序: 假设红竖线前的元素全部排好序,红线后面的数即为要插入的数据,红线依次往后移,假设end为排好序的最后一个数字,end1即为要插入的数字,一次插入时,end与要插入的数字依次比较&#xf…

springMVC-Restful风格

基本介绍 REST:即Representational State Transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用. 1.HTTP协议里面,四个表示操…

Java技术栈 —— 微服务框架Spring Cloud —— Ruoyi-Cloud 学习(二)

RuoYi项目开发过程 一、登录功能(鉴权模块)1.1 后端部分1.1.1 什么是JWT?1.1.2 什么是Base64?为什么需要它?1.1.3 SpringBoot注解解析1.1.4 依赖注入和控制反转1.1.5 什么是Restful?1.1.6 Log4j 2、Logpack、SLF4j日志框架1.1.7 如何将项目打包成指定bytecode字节…

ValueError: setting an array element with a sequence...

报错:ValueError: setting an array element with a sequence… 案例1:numpy库使用numpy.array转换list a是一个list,其包含两个元组,使用np.array进行转换,会报错: import numpy as np a ([([1, 2, 3]…

nodejs微信小程序+python+PHP的微博网络舆情分析系统-计算机毕业设计推荐

(4)微博信息交流:在首页导航栏上我们会看到“微博信息交流”这一菜单,我们点击进入进去以后,会看到所有管理员在后台发布的交流信息; (5)新闻资讯:用户可以查看新闻资讯信…

关于“Python”的核心知识点整理大全24

10.1.6 包含一百万位的大型文件 前面我们分析的都是一个只有三行的文本文件,但这些代码示例也可处理大得多的文件。 如果我们有一个文本文件,其中包含精确到小数点后1 000 000位而不是30位的圆周率值,也可 创建一个包含所有这些数字的字符串。…

HiveSql语法优化三 :join优化

前面提到过:Hive拥有多种join算法,包括Common Join,Map Join,Bucket Map Join,Sort Merge Buckt Map Join等;每种join算法都有对应的优化方案。 Map Join 在优化阶段,如果能将Common Join优化为…

Java 基础学习(十二)文本I/O、日期与时间API

1 文本 I/O 1.1 字符流 1.1.1 什么是字符流 在Java中,字符流是指提供了基于字符的I/O能力的API。 Java 1.0中提供的基于字节的I/O流API只能支持8位字节流,无法妥善地处理16位Unicode字符。由于需要支持Unicode处理国际化字符,因此Java 1.…

TCP/IP详解——HTTPS 协议

文章目录 1. HTTPS 协议1.1 HTTPS 原理1.2 HTTPS 过程1.3 从数据包角度看 HTTPS 交互过程1.4 常见的 HTTPS 数据包解码1.4.1 ClientHello 数据包1.4.2 ServerHello 数据包 1.5 思考 1. HTTPS 协议 1.1 HTTPS 原理 HTTPS概念 HTTPS 是以安全为目标的HTTP通道,并不…

小 cookie,大作用:探索网站中的隐私追踪器(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

持续集成交付CICD:Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前端应用的蓝绿发布

目录 一、实验 1.蓝绿发布准备 2.Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前端应用的蓝绿发布 二、问题 1.手动构建Jenkins前端项目CI流水线报错 2.如何优化手动构建流水线选项参数 一、实验 1.蓝绿发布准备 (1)环境 表1 蓝绿发布…

flume:Ncat: Connection refused.

一:nc -lk 44444 和 nc localhost 44444区别 nc -lk 44444 和 nc localhost 44444 是使用 nc 命令进行网络通信时的两种不同方式。 1. nc -lk 44444: - 这个命令表示在本地监听指定端口(44444)并接受传入的连接。 - -l 选项…

前端视角看 Docker : 基础命令全面指南

引言 Docker是一种开源的容器化平台,它允许开发者将应用程序和其依赖打包在一个轻量级的、可移植的容器中。这使得应用程序在不同的环境中部署变得简单且高效。本文将介绍Docker的一些基础命令和概念,帮助初学者快速上手。 1. Docker简介 Docker使用…