[架构之路-254]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 全程概述

目录

一、软件架构概述

1.1 什么是软件架构

1.2 为什么需要软件架构设计

1.3 软件架构设计在软件设计中位置

(1)软件架构设计(层次划分、模块划分、职责分工):

(2)软件高层设计、概要设计(功能模块的接口与协作细节):

(3)软件详细设计(模块内具体实现方式):

1.4 软件架构设计与概要设计、详细设计的区别

1.5 软件架构发展历程与类型

二、软件架构设计包含的内容*****(重点)

三、软件架构的评估标准:好的软件架构的特点

四、对架构设计的常见误解

五、架构设计的步骤

六、典型的软件架构描述:面向对象的UML 4+1视图


一、软件架构概述

1.1 什么是软件架构

软件架构是指在软件系统中,定义系统的整体结构和组织的过程以及所定义的结构本身。它描述了软件系统中各个组件之间的关系模块的功能和相互作用方式

软件架构旨在解决软件系统的复杂性和可维护性问题,它提供了一个抽象层次的视图,使开发人员和利益相关者能够更好地理解和沟通软件系统的设计和特性。

软件架构对于软件开发过程至关重要,它提供了一个稳定的基础,为系统的各个阶段,包括需求分析、设计、编码、测试和部署提供了指导。一个良好的软件架构不仅能够提高软件系统的质量和可维护性,也能够降低开发和维护的风险。

1.2 为什么需要软件架构设计

件架构设计是软件开发过程中至关重要的一部分,它涉及到软件系统的核心结构、组成部分、互相之间的相互关系、以及如何满足系统的需求和性能指标等方面。软件架构设计是为了提高软件系统的可维护性、可扩展性、可重构性、可重用性、安全性和可靠性等方面。

具体来说,软件架构设计的重要性体现在以下方面:

  1. 避免代码腐化。代码腐化是指由于过多的修改、增加和删除操作,导致软件系统代码结构变得松散、难以理解和维护的情况。软件架构设计可以帮助开发团队在最初的开发阶段规划好软件系统的整体结构和组成,从而确保软件系统后续的代码开发更具有可靠性和稳定性,并最大程度地避免代码腐化。

  2. 降低维护成本。软件架构设计可以帮助开发团队更好地组织系统结构和代码实现,使得系统模块化、可重用、可维护的特性更加突出,从而降低了维护所需要的成本和难度,并提高了系统的可靠性

  3. 改变开发模式。软件架构设计可以使开发过程变得系统化和规范化。在此基础上,技术团队可以更好地分工合作,降低沟通成本,提高开发效率

  4. 改善软件质量。软件架构设计可以有助于在设计阶段发现和避免一些常见的软件设计问题。通过使用最佳实践和经典的软件架构模式,可以最大程度地提高软件的可重用性、可维护性和可扩展性,从而改善软件的整体质量。

  5. 提高安全性。软件架构设计对于提高软件系统的安全性也起到了关键作用。通过设计可靠的安全架构,开发团队可以在整个开发周期中对软件系统进行安全审查,以保护软件系统免受黑客和其他安全威胁的侵害。

综上所述,软件架构设计是软件开发过程中必不可少的一环,对于确保软件系统质量和功能完整性至关重要。

1.3 软件架构设计在软件设计中位置

软件架构设计、软件高层设计和软件详细设计是软件开发中三个重要的设计层次,它们各自关注不同的设计方面,如下所述:

(1)软件架构设计(层次划分、模块划分、职责分工):

软件架构是软件需求确定后的软件开发的起点!!!!

软件架构设计确定软件系统的整体结构和组织方式,包括系统的分层、模块划分、框架选择等。系统架构设计关注系统的稳定性、可靠性和可扩展性,以及系统各个组成部分之间的交互和接口。软件架构设计是从系统整体级别出发,通过对系统的组成部分、各部分之间的关系及其所承担的功能等进行梳理和设计,确定系统总体的结构风格、包括框架和组件的分配、接口、数据流动等。软件架构设计的目的是为整个系统提供一个坚实、可靠、高效、稳定和可维护的基础,需要考虑因素包括系统的可用性、可伸缩性、可维护性、可安全性等。关注整体的非功能性需求!!!

(2)软件高层设计、概要设计(功能模块的接口与协作细节):

软件高层设计是在软件架构设计的基础上进行的,它关注的是系统中各个模块和组件的功能细节和交互方式,确定系统各个模块之间的接口方式和合理的协作关系,从而实现系统的预期功能。由于高层设计服务于架构设计,其需要考虑到诸如结构合理、功能完备,以及后期的扩展和调整等目标。关注接口定义,与编程语言无关!!!

(3)软件详细设计(模块内具体实现方式):

软件详细设计是在软件高层设计的基础上进一步细化,关注的是每个模块和组件的实现和具体实现方式,包括数据结构、算法、代码实现等方面的细节问题,其目的是为软件开发的人员提供具有可行性和可实现性的详细设计方案。详细设计涉及到诸如如何编写代码、如何测试代码、如何实现功能等具体实现问题,其层次较为具体化,详细设计直接指导编码实现!与具体的编程语言相关!!!

因此,软件架构设计、软件高层设计和软件详细设计在软件开发的不同阶段发挥着至关重要的作用。一个好的设计方案可以有效地解决软件开发中的复杂性和不确定性,并提高软件的可靠性、可维护性和可扩展性。

1.4 软件架构设计与概要设计、详细设计的区别

软件架构设计、概要设计和详细设计是软件开发过程中的三个不同层次的设计活动。

它们分别关注系统的整体结构、模块之间的关系和具体的实现细节,有不同的目标和范围。

软件架构设计是最高层次的设计活动,它关注的是系统的整体结构和组织,定义系统的主要组件、它们之间的关系和相互作用方式。软件架构设计主要包括选择适当的架构风格和模式划分模块和组件,定义系统的接口和交互规范等。它的目标是在满足系统需求的同时,实现可扩展性、可维护性、可靠性等质量属性。功能模块的划分和非功能特征是软件架构设计关注的重点!!!

概要设计则更为详细,着重于定义软件系统的模块和子系统,在软件架构的基础上,进一步划分和定义各个模块的功能和职责。概要设计通常会提供模块之间的接口定义,描述各模块的输入输出和交互逻辑。它的目标是使开发人员能够更好地理解系统的模块结构和相互关系,为详细设计提供一个基础。模块之间的接口定义是概要设计关注的重点!!!

详细设计是最底层的设计活动,它关注的是每个模块的具体实现细节。在详细设计中,开发人员会根据概要设计,定义模块的算法、数据结构、函数接口、内部逻辑等。详细设计通常会针对每个模块提供详细的设计文档或代码实现,以实现系统的具体功能。模块内部的算法+数据结构是详细设计的关注重点!!!

总结起来:

  • 软件架构设计关注整体结构和组织,定义系统的主要组件、接口和相互作用方式。
  • 概要设计则进一步定义了模块和子系统的功能和职责,提供模块之间的接口定义。
  • 详细设计则更深入地定义每个模块的具体实现细节,包括算法、数据结构和函数接口等。

这三个设计活动相互关联且逐层细化,为软件开发提供了清晰的指导和结构。

1.5 软件架构发展历程与类型

软件架构的发展历程可以追溯到计算机科学的早期发展。

下面是软件架构的主要发展里程碑:

  1. 五架构阶段 - 早期软件-汇编式编程:20世纪50年代和60年代,软件开发主要集中在机器语言和汇编语言上。此时并没有明确的软件架构概念,程序员主要关注的是算法和数据功能实现。所以才有软件=算法+数据结构的说法。

  2. 萌芽阶段 - 过程式编程-函数式编程:20世纪60年代和70年代,随着高级编程语言(如FORTRAN、COBOL、ALGOL)的出现,开发人员开始更关注程序的结构和模块化。这一时期的主要软件架构风格是过程式编程,将程序组织为子程序的层次结构

  3. 初级阶段 - 模块化和信息隐藏-结构化编程:20世纪70年代和80年代,软件架构开始引入模块化和信息隐藏的概念。这种风格将软件系统分解为更小的、独立的模块每个模块具有明确定义的接口和功能。它提供了更好的代码重用性和可维护性,且模块之间的细节被隐藏起来。

  4. 高级阶段 - 面向对象编程-面向对象编程:20世纪80年代和90年代,面向对象编程(OOP)开始流行起来。OOP将数据和操作封装为对象,并通过继承、封装和多态等机制实现代码的可重用性和灵活性。这一时期兴起了一些经典的架构模式,如MVC(Model-View-Controller),4+1视图就是这个阶段的成果。

  5. 分布式和客户端/服务器架构-分布式编程:20世纪90年代以后,随着互联网的迅速发展,分布式系统和基于客户端/服务器的架构变得流行起来。这种架构允许系统的各个组件运行在不同的机器上,并通过网络进行通信和协调。

  6. 服务导向架构(SOA)- 组件式编程:21世纪初期,服务导向架构的概念出现。SOA将软件系统划分为独立的、可重用的服务组件,这些组件通过松散的耦合方式相互交互。SOA强调系统的可组装性和灵活性。

  7. 微服务架构:近年来,随着云计算和容器技术的发展,微服务架构成为热门话题。微服务架构将应用程序划分为小型、自治的服务,每个服务都具有自己的数据库和业务逻辑。它提倡松耦合、可独立开发和部署的服务组件。

总的来说,软件架构的发展历程不断演变,从过程式编程到模块化、面向对象编程、分布式架构,再到服务导向架构和微服务架构等。每个阶段都为软件系统的高效开发和演化提供了重要的思想和技术基础。

二、软件架构设计包含的内容*****(重点)

软件架构设计是指在软件开发过程中,对系统整体结构和组织进行规划和设计的过程。

它关注的是系统的高层次结构,包括系统的组成部分、它们之间的关系和相互作用。

软件架构设计包括以下内容:

  1. 架构风格和模式 -:选择适合系统的架构风格和模式,如分层架构、客户端-服务器模式、微服务架构等。不同的架构风格和模式有不同的特点和适用场景。

  2. 架构目标和要求 - 非功能性需求:明确软件系统的目标和要求,包括性能、可靠性、可扩展性、可维护性、安全性等方面的非功能性需求!!!

  3. 系统组成和模块划分 - 功能性需求:确定系统的组成部分和模块划分,将系统功能分解成独立的模块或组件,确立模块之间的关系和依赖。

  4. 接口设计:定义模块之间的接口和通信方式,明确模块之间的交互规范和约定,包括数据格式、消息传递方式等。

  5. 数据管理和存储:设计系统的数据管理和存储策略,包括数据库设计、数据缓存、数据传输等。

  6. 部署和扩展:规划系统的部署架构,包括硬件设施、服务器集群、负载均衡等,并考虑如何扩展系统以满足将来的需求。

  7. 安全和隐私保护:考虑系统的安全性和隐私保护,设计合适的安全策略和机制,保护系统中的数据和功能免受恶意攻击和滥用。

  8. 性能和可扩展性:关注系统的性能和可扩展性,设计合理的架构和算法,以满足系统的性能需求,并确保系统能够在面对增加的负载时进行扩展。

  9. 错误处理和容错机制:设计系统的错误处理和容错机制,包括异常处理、错误日志、事务回滚等,确保系统能够在异常情况下保持稳定和可恢复性。

  10. 可维护性和演化性:考虑系统的可维护性和演化性,设计模块化和松耦合的架构,使系统易于修改和维护,并能够适应需求的变化。

综上所述,软件架构设计是一个综合性的任务,需要综合考虑多个因素来确定系统的整体结构和组织,以实现系统目标和满足用户需求。

三、软件架构的评估标准:好的软件架构的特点

一个好的软件架构应该具备以下特点:

  1. 模块化:将系统分解为相互关联且独立的模块(高内聚、低耦合),每个模块负责特定的功能或服务,以便于开发和维护。

  2. 可扩展性:系统的架构应该支持系统的扩展,能够容纳新的功能需求和适应不断变化的环境。

  3. 可靠性:通过合理的设计和结构,减少系统中的故障点,提高系统的可靠性和稳定性。

  4. 可维护性:良好的软件架构能够使系统易于理解、修改和维护,降低开发和维护的成本和风险。

  5. 性能:架构应该能够满足系统的性能需求,包括响应时间、吞吐量、并发性和资源利用率等。

  6. 安全性:在架构设计中应该考虑系统的安全需求,确保系统的数据和功能免受恶意攻击和未经授权的访问。

  7. 可移植性:良好的软件架构应该能够方便地迁移到不同的平台和环境中,提高软件的可移植性。

备注:

软件架构,除了业务功能的模块化之外,其他的都是满足系统的非功能性需求!!!

也就是说,软件架构本身重点不是关注在系统的功能性实现上,而是关注软件系统能够满足系统的非功能性需求上!!!软件的功能性需求由概要设计和详细设计完成!!!!

四、对架构设计的常见误解

在架构设计中,存在一些常见的误解,以下是其中几个:

  1. 误解一:架构设计只是关于技术。事实是,技术只是架构设计的一部分。架构设计不仅涉及技术决策和选择,还涉及到业务需求、系统可扩展性、安全性、可维护性、可测试性等方面的考虑。架构设计需要综合考虑技术与业务之间的平衡,以实现系统的整体目标

  2. 误解二:架构设计是一次性的。很多人错误地认为架构设计只需要在项目开始时进行一次,然后就可以一劳永逸。实际上,架构设计是一个持续的过程,需要随着项目的发展进行不断地演进和调整。随着需求的变化和技术的进步,架构需要灵活适应新的挑战和要求。

  3. 误解三:架构设计是一项孤立的任务。架构设计应该是一个团队的协作过程,需要与业务人员、开发人员、测试人员以及其他利益相关者进行密切的沟通和合作。架构设计需要考虑各个角色的需求和意见,以达到系统的整体目标

  4. 误解四:架构设计只是关于技术堆栈的选择。尽管技术堆栈是架构设计中的一部分,但架构设计更加注重解决业务问题和实现业务目标。架构设计需要考虑系统的可伸缩性、可靠性、安全性、性能等方面,以满足业务的需求。

  5. 误解五:架构设计是唯一的正确答案。每个项目都有其独特的需求和限制条件,因此不存在一种通用的“正确”架构设计。架构设计应该基于特定的上下文和目标进行定制,需要权衡各种因素并做出适当的决策。

总之,架构设计是一项综合性的任务,需要考虑技术、业务和利益相关者的需求。了解这些常见的误解可以帮助人们更好地理解和实践架构设计工作。

五、架构设计的步骤

架构设计的步骤可以简化为以下几个阶段:

  1. 确定业务需求:首先需要明确业务需求,了解系统要解决哪些问题,以及要达成的业务目标。需要和业务人员充分交流,明确所需功能和非功能需求,以及系统面临的挑战和风险。

  2. 制定架构方案:在了解业务需求的基础上,制定适合系统的架构方案。这个阶段需要考虑数据模型、应用程序架构、技术堆栈、服务端和客户端架构、安全性、可伸缩性、可靠性等因素。也需要根据系统的规模和实现的具体目标,权衡不同架构方案之间的优缺点。

  3. 评估和优化方案:制定架构方案后,需要评估其可行性和实际效果,并对方案进行优化。评估的方法可以是对架构进行客观的指标评估和模拟分析,比如性能和可扩展性方面的测试,或者进行具体的实验和原型制作。

  4. 详细设计和实施:在确定并评估好架构方案之后,需要进一步进行详细设计和实施。这个阶段需要对方案进行详细说明和文档化,并且依据需求进行输出。这个阶段也包括开发和测试等工作,以及数据库、服务器和客户端代码的编写。

  5. 维护和演进:系统架构不是一次性的设计,而是随着时间和业务需求不断变化和演进的过程。需要对系统进行维护和持续改进,不断优化架构和技术。

总之,一个合理的系统架构需要通过对业务需求的深入理解,采用系统的思考方式来实现的。这个过程涉及多个阶段,包括需求确定、架构方案制定、方案评估和优化、详细设计和实施以及维护和演进。

六、典型的软件架构描述:面向对象的UML 4+1视图

逻辑视图:功能性需求描述

进程视图:非功能性需求描述

开发视图:程序员视图

物理视图:目标系统视图

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu22.04 server版本关闭DHCP,手动设置ip

在Ubuntu 22.04 中,网络配置已迁移到 Netplan,因此可以使用 Netplan 配置文件来手动设置 IP 地址并关闭 DHCP。 以下是在 Ubuntu 22.04 上手动设置 IP 地址并禁用 DHCP 的步骤: 打开终端,使用 root 权限或 sudo 执行以下命令&…

柯桥英语口语学习,日常生活用语军大衣用英语怎么说?

那么军大衣跟羽绒服用英语怎么说呢? 跟商英君一起学习一下吧! 01 "军大衣"用英语怎么说? 军大衣在英语表达中 也有专门的词汇 即military coat 或 military style cotton coats military有“军人、军事;军事的、军用的…”的…

子查询在SQL中的应用和实践

作者:CSDN-川川菜鸟 在SQL中,子查询是一种强大的工具,用于解决复杂的数据查询问题。本文将深入探讨子查询的概念、类型、规则,并通过具体案例展示其在实际应用中的用途。 文章目录 子查询概念子查询的类型子查询的规则实际案例分析…

Android Studio Giraffe-2022.3.1-Patch-3安装注意事项

准备工作: android studio下载地址:https://developer.android.google.cn/studio/releases?hlzh-cn gradle下载地址:https://services.gradle.org/distributions/ 比较稳定的网络环境(比较android studio相关的依赖需要从谷歌那边…

背包问题学习

背包问题是常见的动态规划dp的问题 下面用到的符号: 常用n表示物品数, m表示背包容积f[i][j]表示i件物品, j的背包容量的最大价值w[i]表示第i件物品的价值, v[i] 表示第i件物品的容量f[0][0~m] 0, 所以n可以从1开始遍历一般是有两层嵌套循环 第一层遍历物品, 第二层遍历背包…

无线4G电表和有线智能电表哪个通讯更稳定?

当谈论智能电表的通讯方式时,常常会提到无线4G电表和有线智能电表两种选择。那么,这两款电表哪个通讯更稳定呢?下面,我们就一起来看下吧! 首先,我们来看无线4G电表的通讯方式。无线4G电表通过无线网络进行通…

日志收集 grafana-loki

文章目录 部署 grafana-loki部署 grafana配置 loki 源配置节点大盘 部署 grafana-loki 官方文档:部署 grafana-loki 部署命令 设置集群的存储类,如果有默认可以不设置设置命名空间 helm install loki oci://registry-1.docker.io/bitnamicharts/grafa…

Android 缩减、混淆处理和优化应用

为了尽可能减小应用的大小,您应在发布 build 中启用缩减功能来移除不使用的代码和资源。启用缩减功能后,您还会受益于两项功能,一项是混淆处理功能,该功能会缩短应用的类和成员的名称;另一项是优化功能,该功…

学生档案管理系统设计

摘要 随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对学生档案信息进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量…

Vue3-数据交互请求工具设计

1.安装axios pnpm add axios 2.利用axios.create创建一个自定义的axios来使用 参考官网:axios中文文档|axios中文网 | axios 在src/utils文件夹下新建request.js,封装axios模块 import axios from axios const baseURL const instance axios.creat…

你真的掌握结构体了么?结构体习题(C语言)

前言 上一期博客我们学习了结构体的相关知识(上期链接),但是学了不练也是不行的,我们今天讲给大家分享两道有点恶心的题目,让大家来加深对结构体的理解,那么话不多说我们现在开始吧! 第一题 有…

2023年最详细介绍Linux 系统目录结构!你确定不来了解一下吗?

📚📚 🏅我是默,一个在CSDN分享笔记的博主。📚📚 ​​​ 🌟在这里,我要推荐给大家我的专栏《Linux》。🎯🎯 🚀无论你是编程小白,还是有…

网络和Linux网络_11(数据链路层)以太网(MAC帧)协议+局域网转发+ARP协议

目录 1. 以太网协议 1.1 MAC地址 1.2 以太网帧格式 2. 局域网转发原理 2.1 数据碰撞和交换机 2.2 最大传输单元MTU 3. ARP协议 3.1 ARP协议格式 3.2 模拟APR协议工作过程 3.3 ARP缓存表 4. 重看TCP/IP四层模型 本篇完。 1. 以太网(MAC帧)协议 网络层的IP协议并不是…

Linux基础命令(测试相关)

软件测试相关linux基础命令笔记 操作系统 常见Linux: Redhat系列:RHSL、Centos、FedoraDebian系列:Debian、Ubuntu以上操作系统都是在原生Linux系统上,增加了一些软件或功能。linux的文件及路径特点 Linux没有盘符的概念&#xf…

PAD平板签约投屏软件要如何选

又是一年年底了,年会开始多起来了,许多会务公司或活动公司会接到很多平板签约投屏业务,如年会中的签军令状、业绩保证书等。这时就面临选购一套签约投屏软件了。 目前的签约投屏软件,大多以H5做的网页版的多,但我建议…

ModbusRTU\TCP消息帧解析(C#实现报文发送与解析)

目录 知识点常用链接一、Modbus1.ModbusRTU消息帧解析2.主站poll、从站slave通讯仿真-modbusRTU1.功能码01读线圈状态2.功能码03读保持寄存器报文解析(寄存器存整型)报文解析(寄存器存float) 3.C#模拟主站Poll(ModbusR…

Redis 入门、基础。(五种基本类型使用场景)

文章目录 1. 概况1.1 认识 NoSQL1.1.1 查询方式1.1.2 事务1.1.3 总结 2. 认识 Redis4. Redis 常见命令4.1 Redis 数据结构介绍4.2 Redis 通用命令4.3 Redis 命令之 String 命令4.4 Redis 命令的层级结构4.5 Redis 命令之 Hash 命令4.6 Redis 命令之 List 命令4.7 set 唯一不排序…

DOM 事件的注册和移除

前端面试大全DOM 事件的注册和移除 🌟经典真题 🌟DOM 注册事件 HTML 元素中注册事件 DOM0 级方式注册事件 DOM2 级方式注册事件 🌟DOM 移除事件 🌟真题解答 🌟总结 🌟经典真题 总结一下 DOM 中如何…

Linux简单部署Yearning并结合内网穿透工具发布至公网可访问

目录 前言 1. Linux 部署Yearning 2. 本地访问Yearning 3. Linux 安装cpolar 4. 配置Yearning公网访问地址 5. 公网远程访问Yearning管理界面 6. 固定Yearning公网地址 前言 Yearning 简单, 高效的MYSQL 审计平台 一款MYSQL SQL语句/查询审计工具,为DBA与开发…

深度学习之图像分类(十五)DINAT: Dilated Neighborhood Attention Transformer详解(一)

Dilated Neighborhood Attention Transformer Abstract Transformers 迅速成为跨模态、领域和任务中应用最广泛的深度学习架构之一。在视觉领域,除了对普通Transformer的持续努力外,分层Transformer也因其性能和易于集成到现有框架中而受到重视。这些模…