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

news2024/10/6 8:39:37

五、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 应用程序还是复杂的分布式系统工作,理解并熟练运用这些架构都将有助于构建出更健壮、可维护且适应未来需求变化的软件。

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cgal教程 3D Alpha Wrapping

文章目录 3D Alpha Wrapping (3D alpha 包裹)1 介绍2 方法2.1 算法2.2 保证 3 接口4 选择参数4.1 alpha4.2 Offset4.3 关于“双面”包裹的注意事项 5 性能6 例子 3D Alpha Wrapping (3D alpha 包裹) 原文地址: https://doc.cgal.org/latest/Alpha_wrap_3/index.html#Chapter_3D…

Linux unzip解压多个文件

前情介绍 最近下载了imagenet1k数据集,令人难受的是这里边有很多的zip包,我总不能一个一个解压吧,这就太费时了,有点程序员思维很重要:批量解压。 解决办法 假设当前目录下有多个zip文件 需要 unzip *.zip …

【FunASR】Paraformer语音识别-中文-通用-16k-离线-large-onnx

模型亮点 模型文件: damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorchParaformer-large长音频模型集成VAD、ASR、标点与时间戳功能,可直接对时长为数小时音频进行识别,并输出带标点文字与时间戳: ASR模型…

apt-mark工具介绍(标记或取消标记软件包,防止特定软件包被自动更新或删除)

文章目录 apt-mark工具深度解析1. apt-mark概述1.1 apt-mark定义1.2 apt-mark作用 2. apt-mark常用命令2.1 标记软件包为手动安装2.2 标记软件包为自动安装2.3 阻止软件包更新2.4 允许软件包更新 3. 疑难技术点解析3.1 如何查看软件包的标记状态3.2 如何解决软件包依赖性问题 4…

IDEA新建jdk8 spring boot项目

今天新建spring boot项目发现JDK版本最低可选17。 但是目前用的最多的还是JDK8啊。 解决办法 Server URL中设置: https://start.aliyun.com/设置完成后,又可以愉快的用jdk8创建项目了。 参考 https://blog.csdn.net/imbzz/article/details/13469117…

【C++】POCO学习总结(十七):日志系统(级别、通道、格式化、记录流)

【C】郭老二博文之:C目录 1、Poco::Message 日志消息 1.1 说明 所有日志消息都在Poco::Message对象中存储和传输。 头文件:#include “Poco/Message.h” 一条消息包含如下内容:优先级、来源、一个文本、一个时间戳、进程和线程标识符、可选…

每天五分钟计算机视觉:Inception网络是由多个Inception模块构成

本文重点 inception从另一种角度来提升训练结果:能更高效的利用计算资源,在相同的计算量下能提取到更多的特征,从而提升训练结果。可以简单的理解为Inception 网络是由一个一个的Inception模块构建成的,我们来看一下。 Inception模块 如上就是Inception模块的 通过一个1…

【Android逆向】记录一次某某虚拟机的逆向

导语 学了一段时间的XPosed,发现XPosed真的好强,只要技术强,什么操作都能实现... 这次主要记录一下我对这款应用的逆向思路 apk检查 使用MT管理器检查apk的加壳情况 发现是某数字的免费版本 直接使用frida-dexdump 脱下来后备用 应用分…

【MYSQL】事务隔离级别、脏读、不可重复读、幻读

文章目录 介绍演示脏读不可重复读可重复读幻读 不可重复读和幻读的区别 参考 作者 Guide: 事务隔离级别 美团技术团队: Innodb中的事务隔离级别和锁的关系 介绍 SQL 标准定义了四个隔离级别: READ-UNCOMMITTED(读取未提交) :最低的隔离级别…

虚拟机启动 I/O error in “xfs_read_agi+0x95“

1.在选择系统界面按e 进入维护模式 2.找到ro把ro改成 rw init/sysroot/bin/sh 然后按Ctrlx 3.找到坏掉的分区,以nvme0n1p3为例进行修复 xfs_repair -d /dev/nvme0n1p3 4.init 6 重新启动 以下情况 先umount 再修复 则修复成功

SaaS行业分析

文章目录 什么是SaaS ?SaaS的标准定义什么是软件即服务?SaaS与传统软件的区别 ? SaaS行业分析你知道最赚钱的行业是什么?互联网带给企业的变化 SaaS与PaaS、IaaS的区别?IaaS(Infrastructure as a Service)…

消除非受检警告

在Java中,有一些情况下编译器会生成非受检警告(Unchecked Warnings)。这些警告通常与泛型、类型转换或原始类型相关。消除这些警告可以提高代码的可读性和安全性。以下是一些常见的非受检警告以及如何消除它们的例子: 1. 泛型类型…

js传递json数据过大的解决方案

protobufjs 使用protobuf,定义如下结构 Person.protobuf syntax "proto3";message Person {string name 1;int32 age 2; }Person.thrift namespace java com.example.Personstruct Person {1: required string name,2: required i32 age }使用bench…

高压电气是什么

高压电气 电工电气百科 文章目录 高压电气前言一、高压电气是什么二、高压电气的类别三、高压电气的作用原理总结前言 高压电气在电力系统中起着重要的作用,它能够将电能有效地输送和分配到各个用户,为社会和工业生产提供稳定可靠的电力供应。然而,高压电气系统也需要注意安…

Jwt令牌过滤器的下发和拦截(创建在前面)

创建Jwt令牌的方法在前面: JWT令牌的作用和生成https://blog.csdn.net/m0_71149935/article/details/135002840?spm1001.2014.3001.5501令牌的下发: 说明: 只用在浏览器访问服务器的时候校验账户信息是否正确,正确就创建Jwt令…

网站服务器/域名/备案到底有什么关联?

​  在一个网站的组成中,网站服务器、域名、备案这几个要素是要被常提到的。在谈及三者关联之前,我们先了解下三者的各自概念。 域名:它是网站的唯一标识符,通俗理解来说就是用户在浏览器地址栏中输入的网址。一般来说&#xff…

Java开发工具积累(符合阿里巴巴手册规范)

文章目录 一、命名规约二、集合篇1. 栈、队列、双端队列2. List的升序倒序3. Map的升序降序4. 二维数组排序5. 集合之间的转换6. Map键值对遍历 三、并发篇1. 创建线程池2. ThreadLocal的使用 四、时间篇1. LocalDateTime的使用2. String、Date、LocalDateTime转换 五、控制块1…

[每周一更]-(第27期):HTTP压测工具之wrk

[补充完善往期内容] wrk是一款简单的HTTP压测工具,托管在Github上,https://github.com/wg/wrkwrk 的一个很好的特性就是能用很少的线程压出很大的并发量. 原因是它使用了一些操作系统特定的高性能 io 机制, 比如 select, epoll, kqueue 等. 其实它是复用了 redis 的 ae 异步事…

最新50万字312道Java经典面试题52道场景题总结(附答案PDF)

最近有很多粉丝问我,有什么方法能够快速提升自己,通过阿里、腾讯、字节跳动、京东等互联网大厂的面试,我觉得短时间提升自己最快的手段就是背面试题;花了3个月的时间将市面上所有的面试题整理总结成了一份50万字的300道Java高频面…

C#上位机与欧姆龙PLC的通信02----搭建仿真环境

在没有硬件的情况下,创建仿真环境非常必要,买硬件需要花大几K的大洋,这是不好的,对于学习培训者来说,有仿真环境就特别漂亮,现在CX-ONE已经集成了欧姆龙的编程软件,能够实现仿真PLC及编程&#…