软件架构师思维塑造

news2024/11/24 17:37:57

一、软件系统设计的六项原则

1、单一职责原则(Single Responsibility Principle)

2、开闭原则(Open Closed Principle)

3、里氏替换原则(Liskov Substitution Principle)

4、迪米特法则(Law of Demeter),又叫“最少知道法则”

5、接口隔离原则(Interface Segregation Principle)

6、依赖倒置原则(Dependence Inversion Principle)

 

二、架构的种类

1.系统级架构,微前端可以算是系统级架构,也可以算是应用级架构
2.应用级架构:脚手架,模式库(ui库),设计系统
3.模块级架构:迭代
4.代码级架构:规范与原则

 

三、架构质量的衡量

1.拓展性
2.维护性
3.可管理
4.高可用(故障修复,容灾,降级,熔断)

 

四、日常开发过程中的架构质量 

1.理解难度
2.接入依赖的成本
3.崩溃率和错误率的指标
4.开发效率
5.错误上报和信息收集等功能 

 

五、架构的前期准备 

架构师分类:
系统架构师:从系统的维度,负责整体系统的架构设计,纯技术架构
应用架构师:偏向业务的系统,关注理解业务
业务架构师:从业务流程的维度,关注某一个行业,所做的事情可能会脱离具体的代码开发,偏向于数据分析。

 

 

六、技术债务的产生 

1.开发过程中因为时间紧迫而导致的实现不合理
2.开发过程中暂时没有想到更好的办法而去妥协进行的实现
3.架构设计前期没有考虑到的细节
4.不合理的交互设计,导致技术实现复杂
5.一些旧的功能在做的时候并没有详细的文档,并没有预留拓展接口,导致拓展困难,上线后问题剧增。

技术债务累积过多产生的可能后果:
1.修复变重构,严重影响产出,
2.对旧功能需要不断进行兼容处理,严重影响开发速度

 

七、技术填补

1.项目拆分,代码解耦
2.必须有日志模块,操作日志,错误日志,业务日志等等
3.技术培训和传帮带能力
4.做好代码规范,编写好技术文档
5.不同工程师相互评审
6.用于发现系统中的技术债务

等产品上线后,开发就没有那么紧啦,这个时间大家可以找个时间处理技术债务,一遍建立感情,一遍品味原来的代码

 

八、预防系统崩溃

系统崩溃属于严重的架构设计事故
崩溃预防:
1.抓取用户行为,获取用户操作链条
2.解决村存量的技术债务问题
3.减少新增问题
4.对脏数据进行兜底和检验
5.单元测试
6.崩溃预警
7.自动化测试
8.更广的灰度触达
9.性能优化体系

当技术债务累积到一定的程度时,小软件可以考虑直接重构,快刀斩乱麻

 

九、重构流程 

1.确定问题点,确定重构功能和范围
2.旧架构设计和逻辑梳理
3.稳定性保证
4.性能保证
5.需求过程中的冲突问题 

参考文献:

 0、https://www.meiwen99.com/subject/pwvgdttx.html

 1、手动实现微前端框架的思路 - 简书

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

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

相关文章

图数据库使用及业务场景

一. 前言 来学习下图数据以及图数据库 二. 图数据库的简单原理 2.1 图数据 我认为图数据结构就是点线面的关系,图大致分为以下概念 : 节点 : 图中的基本元素,可以用来表示现实世界中的一个**实体 **边 : 节点之间…

接口自动化测试Mock Get和Post请求

Mock可以模拟一个http接口的后台响应,可以模拟request,response 下载 moco-runner-0.11.0-standalone.jar 下载链接: https://pan.baidu.com/s/1bmFzvJPRnDlQ-cmuJ_3iRg 提取码: kpjv 确保安装了jdk,cmd下可以运行java -version 一、模拟不带参的get请求…

恶意软件和反病毒

1. 什么是恶意软件? 恶意软件(Malware)是指以恶意目的而设计和开发的计算机软件。恶意软件的目标是在未经授权或知情的情况下入侵用户的计算机系统、窃取敏感信息、破坏系统功能或进行其他有害活动。恶意软件可以采取多种形式&#x…

VUE vue天气预报 高德接口 和风天气

方法一: 高德天气 1、引入axios import axios from "axios"; 2、 发生请求 getWeatherData() {let url https://restapi.amap.com/v3/weather/weatherInfo?city杨浦区&keyd77b4c08b2718e4e06def82570d3e834&extensionsbase;axios.get(url).then(res >…

Windows下安装Sqoop

Windows下安装Sqoop 一、Sqoop简介二、Sqoop安装2.1、Sqoop官网下载2.2、Sqoop网盘下载2.3、Sqoop安装(以version:1.4.7为例)2.3.1、解压安装包到 D:\bigdata\sqoop\1.4.7 目录2.3.2、新增环境变量 SQOOP_HOME2.3.3、环境变量 Path 添加 %SQO…

【统计学精要】:使用 Python 实现的统计检验— 1/10

一、介绍 欢迎来到“掌握 Python 统计测试:综合指南”,它将介绍本手册中您需要熟悉使用 Python 的所有基本统计测试和分析方法。本文将为您提供统计测试及其应用的全面介绍,无论您是新手还是经验丰富的数据科学家。 使用来自现实世界的实际示…

Linux学习之sed替换命令讲解

cat /etc/redhat-release看到操作系统是CentOS Linux release 7.6.1810,uname -r看到内核版本是3.10.0-957.el7.x86_64,bash --version可以看到bash版本是4.2.46(2)。 sed(sed strem editor)可以理解为行编辑器,但它…

C++ Lambda表达式的完整介绍

一、Lambda表达式概述 c在c11标准中引入了lambda表达式,一般用于定义匿名函数,lambda表达式(也称为lambda函数)是在调用或作为函数参数传递的位置处定义匿名函数对象的便捷方法。通常,lambda用于封装传递给算法或异步…

SpringBoot对接OpenAI

SpringBoot对接OpenAI 随着人工智能技术的飞速发展,越来越多的开发者希望将智能功能集成到自己的应用中,以提升用户体验和应用的功能。OpenAI作为一家领先的人工智能公司,提供了许多先进的自然语言处理和语言生成模型,其中包括深…

eclipse Java Code_Style Code_Templates

Preferences - Java - Code Style - Code Templates Eclipse [Java_Code_Style_Code_Templates_ZengWenFeng] 2023.08.07.xml 创建一个新的工程,不然有时候不生效,旧项目可能要重新导入eclipse 创建一个测试类试一试 所有的设置都生效了

【雕爷学编程】Arduino动手做(195)---HT16k33 矩阵 8*8点阵屏模块5

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…

Nginx(2)

目录 1.安装Nginx1.yum安装2.编译安装3.Nginx命令 2.配置文件详解 1.安装Nginx 1.yum安装 [rootdocker ~]# yum -y install nginx通过 rpm -ql nginx 查看安装信息 2.编译安装 2.1安装所需要的依赖 yum install -y gcc gcc-c make libtool wget pcre pcre-devel zlib zlib-…

4. C++构造函数和析构函数

一、对象的初始化和清理 C中的面向对象来源于生活,每个对象也都会有初始设置以及对象销毁前的清理数据的设置,对象的初始化和清理也是两个非常重要的安全问题 一个对象或者变量没有初始状态,对其使用后果是未知的使用完一个对象或变量&#x…

CentOS7安装Maven详细教程

😊 作者: Eric 💖 主页: https://blog.csdn.net/weixin_47316183?typeblog 🎉 主题:CentOS7安装Maven详细教程 ⏱️ 创作时间: 2023年08月06日 第一步:上传或下载安装包&#x…

【Element】el-cascader 级联选择器

ElementUI label 为空的不展示 将children设为undefined dg(list) {list.forEach(item > {item.label item.nameitem.value item.iditem.children item.childrenList.length ! 0 ? item.childrenList : undefinedif (item.children) {this.dg(item.children)}}) },第…

拦截器对接口细粒度权限校验

文章目录 一、逻辑分析二、校验规则1.规则类型2.规则划分3.规则配置信息4.规则案例说明5.规则加载 三、拦截器定义1.自定义拦截器2.注册拦截器 四、获取请求参数1.获取get提交方式参数2.获取post提交方式参数(1)定义RequestWrapper类(2&#…

pinctrl_desc结构体注册

pinctrl_desc结构体注册 文章目录 pinctrl_desc结构体注册pinctrl_registerpinctrl_register_pins注册所有的引脚 pinctrl_register 构建好struct pinctrl_desc结构以后,会调用pinctrl_register函数注册一个pinctrl控制器,得到一个pinctrl_dev struct …

【大数据】Flink 详解(二):核心篇 Ⅰ

Flink 详解(二):核心篇 Ⅰ 14、Flink 的四大基石是什么? ​ Flink 的四大基石分别是: Checkpoint(检查点)State(状态)Time(时间)Window&#xff…

【机器学习2】什么是Jupyter notebook 新手使用Jupter notebook

什么是Jupyter notebook? Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。 Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享程序文档,支持实时代码&#x…

Redis 7.X Linux 环境安装

Redis 简介 作为一名开发人员,想必大家对Redis一定是耳熟能详,因此在此只做简单介绍。 Remote Dictionary Server(远程字典服务)是完全开源的,使用ANSIC语言编写遵守BSD协议,是一个高性能的Key-Value内存数据库,它提…