如何做系统架构设计

文章目录

    • 1、如何进行架构设计
      • 体系架构需求
      • 体系架构设计
      • 体系架构文档化
      • 体系架构复审
      • 体系架构实现
      • 体系架构演化
    • 2、架构设计注意事项
      • 分治原则
      • 服务自治
      • 拥抱变化
      • 可维护性
      • 考虑依赖和限制
      • 阅读代码注意事项
    • 3、最后

​系统架构应该如何设计,从自己做架构的经历来分享一些体会。根据每个人的思维习惯不同,我的这些思考不见的都适合你,但多少对大家会有所帮助。

1、如何进行架构设计

系统架构的设计需要遵循一定的步骤和原则,这里我从:架构需求、架构顺序、架构文档、架构复审、架构实现和架构演化5个方面谈一些自己的理解。

体系架构需求

全面获取和分析用户对软件系统功能、性能、界面、设计约束等方面的期望,也就是需要了解用户的真实需求,并将每一个需求项目抽象定义为构件(类的集合)。

体系架构设计

通常会采用迭代的方法。

首先选择一个合适的软件体系架构风格,如C/S、B/S、N层、管道过滤器风格、C2风格等,作为架构模型,然后将需求阶段标识的构件映射到模型中,分析构件间的相互作用关系,最后形成量身订做的软件体系架构。

体系架构文档化

生成用户和研发人员能够阅读的体系架构规格说明书和体系架构设计说明书。

体系架构复审

及早发现体系架构设计中存在的缺陷和错误,及时予以标记和排除。

体系架构实现

设计人员开发出系统构件,按照体系架构设计规格说明书进行构件的关联、合成、组装和测试。

体系架构演化

如果用户需求发生了变化,则需相应地修改完善优化、调整软件体系结构,以适应新的变化了的软件需求。

2、架构设计注意事项

在进行架构设计时,以下是一些需要注意的事项。

分治原则

将系统划分为多个子系统或模块,每个子系统或模块都可以独立地进行开发、测试、部署和维护。这样可以降低系统的复杂度,提高系统的可维护性和可扩展性。

服务自治

每个服务都应该具备独立的能力,能够独立地进行开发、测试、部署和维护。这样可以提高服务的可用性和可靠性,降低系统的耦合度。

拥抱变化

系统架构设计应该能够适应业务需求的变化和市场的变化,具备快速响应和灵活应变的能力。

可维护性

关注系统运行日志和调试模块,便于开发和维护时的诊断和调试。关键事件和主要处理流程添加必要日志,同时注意日志信息与日志级别合理设置,使关键事件与运行信息有log可追踪。集公共特性为机制,集公共机制于平台。

考虑依赖和限制

熟悉业务逻辑,并考虑相关模块的能力和限制;比如基础模块的数据转发或处理性能限制,会不会导致消息丢失或block;重构或改写代码前,一定要先把原先的业务和代码吃透,了解为什么需要重构,原来代码架构遇到了什么瓶颈或问题,重构的目标是什么,能cover设计的所有问题吗;因此慎用重构,不要过早的优化,可以小规模改图或优化。

阅读代码注意事项

首先从用户角度整体认识产品;了解业务使用场景,核心功能以及周边交互模块,缩小问题范围;并体验一下,有个整体的感性认识。

3、最后

在进行系统架构设计时,首要遵从“适合原则”。

架构师首先是技术管理者,技术方案选型权衡取舍做技术决策是核心的职责,那么系统架构设计首先要考虑的就是要满足当前业务出发同时能支持适应业务发展而扩展开发维护,同时也要结合团队技术积累和实力、项目时间和成本投入等全方位的综合评估取舍,而不是为技术而技术。

最后,系统架构设计需要遵循一定的步骤和原则,同时要理解业务需求和团队的技术实力,做出合理的架构决策。

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

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

相关文章

mock

简单使用 在Java中,单元测试是一种测试方法,用于验证代码的各个组件(通常是单个方法或类)是否按预期工作。在单元测试中,有时需要模拟外部依赖,以确保测试的隔离性。为此,通常会使用模拟测试工…

idea 启动出现 Failed to create JVM JVM Path

错误 idea 启动出现如下图情况 Error launching IDEA If you already a 64-bit JDK installed, define a JAVA_HOME variable in Computer > System Properties> System Settings > Environment Vanables. Failed to create JVM. JVM Path: D:\Program Files\JetB…

【Java常见的几种设计模式】

Java常见的几种设计模式 1. 单例模式(Singleton Pattern)2. 工厂模式(Factory pattern)3. 抽象工厂模式(Abstract Factory Pattern)4. 建造者模式(Builder Pattern)5. 原型模式&…

【ICer的脚本练习】tcl语法熟悉和工具tcl的实例

系列的目录说明请见:ICer的脚本练习专栏介绍与全流程目录_尼德兰的喵的博客-CSDN博客 前言 TCL(Tool Command Language)是一种简单但功能强大的脚本语言,它经常用于自动化任务、测试和快速原型开发。你看这个名字就能知道,这个语言最主要的作用就是用来操作工具,尤其我们…

[软考中级]软件设计师-uml

事物 uml中有4中事物,结构事物,行为事物,分组事物和注释事物 结构事物是uml模型中的名词,通常是模型的静态部分,描述概念或物理元素 行为事物是uml的动态部分,是模型中的动词,描述了跨越时间…

appium---如何判断原生页面和H5页面

目前app中存在越来越多的H5页面了,对于一些做app自动化的测试来说,要求也越来越高,自动化不仅仅要支持原生页面,也要可以H5中进行操作自动化, webview是什么 webview是属于android中的一个控件,也相当于一…

Go语言变量学习

您可以阅读Golang 教程第 2 部分:如何运行Hello World以及IDE介绍 什么是变量? 变量是为存储特定类型值的内存位置指定的名称。Go 中有多种声明变量的语法。让我们一一看看。 声明单个变量 var name type是声明单个变量的语法。 package mainimport…

vue3模板-vscode设置(语法糖)

选择菜单里的 文件 > 首选项 > 用户代码片段 vscode模板 {"Print to conaole":{"prefix": "v-ts", //在新建立的页面中输入C就会有智能提示&#xff0c;Tab就自动生成好了"body": ["<template>"," <…

快手新版本sig3参数算法还原

Frida Native层主动调用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81…

C++之委托构造函数实例(二百四十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

【每日一句】只出现一次的数

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;位运算 其他语言Cpython3 写在最后 Tag 【位运算-异或和】【数组】【2023-10-14】 题目来源 136. 只出现一次的数字 题目解读 给你一个数组&#xff0c;找出数组中只出现一次的元素。题目保证仅有一个元素出现一次&a…

[华为杯研究生创新赛 2023] 初赛 REV WP

前言 一年没打比赛了, 差一题进决赛, REV当时lin的第三个challenge没看出来是凯撒, 想得复杂了, 结果错失一次线下机会 >_< T4ee 动态调试, nop掉反调试代码 发现处理过程为 置换sub_412F20处理(这里看其他师傅的wp知道应该是rc4, 我是直接en逆的buf字符串中每一位和…

竞赛 深度学习+opencv+python实现昆虫识别 -图像识别 昆虫识别

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数&#xff1a;2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 4 MobileNetV2网络5 损失函数softmax 交叉熵5.1 softmax函数5.2 交叉熵损失函数 6 优化器SGD7 学…

Qt通过正则表达式筛选出字符串中的手机号

需求 用户需要聊天记录中含有11位的手机号码进行提醒的功能&#xff0c;所以需要在收到聊天消息后匹配查看是否存在手机号。如果找到然后提醒。 分析 主要的需求可以拆分为两点&#xff1a; 筛选出字符串里面的数字字符。通过正则匹配数字字符是否是11位手机号码。 一开始没…

Java设计模式之享元模式

享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过共享对象来减少内存使用和提高性能。在享元模式中&#xff0c;将对象分为可共享的内部状态和不可共享的外部状态。内部状态是对象共享的部分&#xff0c;而外部状态是对象的变化部分&…

【网安必读】CTF/AWD实战速胜指南《AWD特训营》

文章目录 前言&#x1f4ac;正文这本书好在哪❔这本书讲了什么❔文末送书 前言&#x1f4ac; 【文末送书】今天推荐一本网安领域优质书籍《AWD特训营》&#xff0c;本文将从其内容与优势出发&#xff0c;详细阐发其对于网安从业人员的重要性与益处。 正文 &#x1f52d;本书…

软考高级系统架构设计师系列之:深入理解设计模式

软考高级系统架构设计师系列之:深入理解设计模式 一、设计模式相关技术文章二、设计原则三、设计模式概念四、设计模式的分类五、创建性模式六、创建性模式-工厂方法模式七、创建性模式-抽象工厂模式八、创建性模式-构建器模式九、面向对象设计-结构性模式十、结构性模式-适配…

数据结构 | Huffman TreeCode

构造参考&#xff1a; 赫夫曼树_关于huffman树,权值相同-CSDN博客 编码参考&#xff1a; 【数据结构与算法】-哈夫曼树(Huffman Tree)与哈夫曼编码_数据结构哈夫曼树编码-CSDN博客

在springboot中如何开启Bean数据校验

①&#xff1a;添加JSR303规范坐标与Hibernate校验框架对应坐标 <dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId> </dependency><dependency><groupId>org.hibernate.validator<…

系统架构设计:20 论软件需求管理

目录 一 需求工程 1 需求开发 1.1 需求获取 1.1.1 软件需求的分类 1.1.2 需求获取方法