设计模式: 关于项目架构,技术选型,技术债务问题与解决方案
正确的选择是良好的开端
1 )指标
- 系统稳健性
- 系统健壮性
2 ) 衡量
- 在概念层次衡量架构质量
- 在实际开发中衡量架构好坏
3 ) 架构分类
- 系统架构
- 从系统维度,负责整体系统的架构设计
- 基础服务和各系统间协调,着眼全局
- 比如关注负载,可靠性,伸缩,扩展,整体项目切分,缓存应用等方面的基础架构设计
- 偏向于对技术的架构设计
- 应用架构
- 从应用程序的维度,负责某个应用的技术架构,主要偏向业务系统
- 关注理解业务,梳理模型,设计模式,接口,数据交互等方面
- 主要思考,如何让业务更好实现,如何让数据更好的交互,什么设计更好的拓展
- 需要了解整体业务系统怎样流转,针对所有业务系统做架构设计
- 业务架构
- 从业务流程维度,关注某一个行业,业务领域分析,获取领域模型,最终获得系统模型
- 也可叫业务领域专家,行业专家,产品咨询师,资深顾问
- 所做事情脱离具体开发任务,比如数据分析和模型建设来推动业务发展
- 如何选择自己
- 特别关注技术,朝着系统架构师方向发展
- 业务与技术并存,了解技术在业务里如何应用,每个应用间的交互,朝着应用架构师方向努力
- 如何希望脱离具体开发任务,只需要关注数据系统模型,得到结论,就要朝着业务架构师方向发展
技术前期准备
-
技术选型
- 社区氛围,发展规模,未来发展趋势,与当前团队的契合度,执行成本,维护和迁移成本,执行效率等内容的调研和报告
- 根据报告内容做一些取舍,选定当前技术类型,通过技术类型进行开发
- 充分调研每一项技术带来的利弊,根据利弊进行取舍,得到最优组合
- 最大程度上预测架构设计中的缺陷,防止问题的发生
- 凡是不打无准备之仗
-
技术优化
- 在架构发展过程中,可能会存在一些有悖于当前架构设计的实现,造成了架构发展阻塞,所以需要进行架构优化,使架构设计的适应性更高
-
架构优化
- 架构不是一蹴而就的,在业务发展过程中,架构也在不断演进
- 对架构设计进行实时调优,使架构优化成为常态化
- 通过不断的调整架构实现,改进初始架构中设计的不足,补足短板
技术债务
- 开发过程中因为时间紧迫导致的实现不合理
- 举例:查找100000以内的质数
- 算法不同,效率不同,好算法和坏算法的时间
- 开发过程中暂时没有想到更好的实现方式而妥协的版本
- 刚开始使用if…else实现
- 使用责任链模式来进行改进:每个函数都可以独立出来,作为一个判断条件使用
- 作为整体使用不好,使用责任链使用会让复用性提高,维护性提高
- 架构设计前期没有考虑到的一些细节
- 交互细节 -> props传递参数 (交互冗余,流程较长)
- 使用全局状态管理实现参数传递
- 不合理的交互设计,导致技术实现复杂
- 交互设计的难度,正确和设计人员沟通
- 减少这类问题出现
- 旧功能文档缺失,无正确拓展,修改和兼容旧功能,导致上线后问题剧增
- 无技术文档,技术功能没有预留出修改和兼容的接口
- 新开发功能要预留兼容旧功能的接口
- 让旧功能逐步符合当前架构设计的内容
- 阶段性重构,将旧功能变为新功能的实现
不修复技术债务的后果
- 修复变成重构:新功能要兼容旧功能的逻辑,有些旧功能无法兼容就不得不修改旧功能,导致重构,导致排期的影响
- 小的技术债务不做偿还,最后会演变为一场大规模的重构工作,导致产出不高
- 影响开发速度
- 导致整体开发需要兼容的点较多,影响开发效率和上线速度,导致整体项目迭代缓慢,失去核心竞争力(项目是企业战略落地的载体)
- 容易陷入,维护旧功能,开发新功能,兼容旧功能,维护旧功能,开发新功能的恶性循环
技术填补的解决方案
- 优秀的架构设计是基础
- 当前架构设计,能够有效处理当前需求可预见的情况,对于未知的,可能出现的特殊情况,很小的改动就能解决问题
- 2.1 我们的架构应该是简练的,精简的,对于一些可预见的问题,不建议做一些功能处理,只需要做一些预留接口即可
- 根据当前的业务,进行合理的项目拆分,尽量的代码解耦合
- 必须有日志模块,操作日志,错误日志,业务日志等等
- 良好的技术培训和传帮带能力
- 让每一位开发者可以从更深一层次理解所需要实现的功能
- 从最开始的代码规范,到熟悉业务,最后再到编写文档
- 充分的技术方案可避免一部分技术债务的产生
- 技术方案是充分理解需求之后所能产出的对需求理想的实现方式,必要性不言而喻
- 不同工程师之间可以相互review代码,避免当局者迷出现,codeReview是非常重要的,同时也是对自身的一个提高
- 提升对修复技术债务重要性的认知
- 工程师如果能预见一个债务可能导致的问题,自然愿意花时间去处理
- 善于发现和定期处理一些技术债务问题
- 勇于发现系统中的技术债务,让自己为系统负责
- 让自己为系统负责
总结
- 等产品和功能上线后,开发就没有那么紧张了,可以找个时间来处理技术债务
- 技术债务不仅仅是研发这个部门的责任, 需要联合测试和业务部门才能实现
- 所以,技术负责人和架构师请谨慎对待技术债务,否则可能会导致成本增加和线上风险
- 如果项目节奏正常,合格的技术负责人,架构师在提测之前就需要处理好这些问题
- 代码review是一个重要的工作, 团队代码review是一种共同学习的方式
相关文章:
设计模式: 关于项目架构,技术选型,技术债务问题与解决方案
正确的选择是良好的开端 1 )指标 系统稳健性系统健壮性 2 ) 衡量 在概念层次衡量架构质量在实际开发中衡量架构好坏 3 ) 架构分类 系统架构 从系统维度,负责整体系统的架构设计基础服务和各系统间协调,着眼全局比如关注负载,…...
el-tabs 默认选中第一个
1. 实际开发中el-tabs 都会设置第一个为默认值 ,这样会好看一点, 而渲染的数据经常是通过后端返回的数据 , v-model 无法写死默认值 解决办法 , 通过计算机属性 ,在data 定义一个 selectedTab watch: {defaultTab(newVal) {this.selectedTab newVal; // 设置第一个标签页…...
R -- match,pmatch,charmatch
文章目录 matchpmatchcharmatch match ?matchDescription match returns a vector of the positions of (first) matches of its first argument in its second. 第一个向量中的元素在第二个向量中的位置,如果第二个向量中有多个仅返回第一个match 元素的位置&…...
数据结构——线性表①(顺序表)
一、线性表定义 线性表是一种数据结构,它是由n个具有相同数据类型的数据元素a1,a2,…,an组成的有限序列。 其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个…...
MFC网络编程-Udp客户端
目录 1、UI的设计: 2、代码的实现: (1)、重写CSocket虚函数OnReceive,并且传入对话框的指针 (2)、初始化SOCKET (3)、绑定本地IP和端口 (4)、…...
密码学基础
密码学总览 信息安全面临的危险与应对这些威胁的密码技术: 关于上图中的威胁,这里在简单的说明: 窃听:指的是需要保密的消息被第三方获取。篡改:指的是消息的内容被第三方修改,达到欺骗的效果。伪装&…...
[Docker]四.Docker部署nodejs项目,部署Mysql,部署Redis,部署Mongodb
一.部署nodejs项目,映射端口,挂载数据卷 可以到https://hub.docker.com/去搜索node镜像,然后下载,也可以直接通过docker pull node下载镜像,然后用这个node镜像启动容器node,这样系统就集成了node服务了,在这里挂载www/node目录到容器中,并指定端口映射,运行nodejs程序,安装npm…...
拥抱AI-ChatGPT:人类新纪元
最近大模型通用智能应用持续发酵,各大科技公司都陆续推出了基于通用大模型的智能应用产品,典型的如OpenAI的ChatGPT、微软的BingChat、百度的文心一言、360的智脑、阿里的通义千问等。当然最火的要属于ChatGPT了,从去年年底推出到现在已经有很…...
基于深度学习的人脸表情识别 计算机竞赛
文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的人脸表情识别 该项目较…...
GitHub经常打不开或者访问解决办法
访问慢或无法访问的原因:DNS解析是最为基础的一个环节。由于Github的服务器在全球各地,域名解析所需的时间也会不同,这就导致了在特定地区可能会出现Github无法正常访问的情况。 解决:查询到github对应的IP,然后在host…...
密码学 - SHA-2
实验八 SHA-2 1.实验目的 熟悉SHA – 2算法的运行过程,能够使用C语言编写实现SHA-2算法程序,增加对摘要函数的理解。 2、实验任务 (1)理解SHA-2轮函数的定义和常量的定义。 (2)利用VC语言实现SHA-2算…...
Vins-Fusion、Vins-Mono(之前那个编译通过但是没有这个好用)
ROS的catkin_make不要修改,暂时没有理由,理由就是两次一个改了一个没改,没改的成功了以成功为准。 另外docker也没用成功,原本的逻辑来说,docker肯定不能出问题的,但是由于roscore通信的原因可能没有将结果显示&#x…...
每日自动化提交git
目前这个功能,有个前提: 这个git代码仓库,是一个人负责,所以不存在冲突问题 我这个仓库地址下载后的本地路径是:D:\Projects\Tasks 然后我在另外一个地方新建了一个bat文件: bat文件所在目录为:…...
【Linux进程】再谈软件—操作系统(Operator System)
目录 操作系统(Operator System) 概念 设计OS的目的 如何理解 "管理"——先描述再组织 系统调用和库函数概念 总结 操作系统(Operator System) 概念 任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。 笼统的理解,操作系统…...
创建超过1G内存大小的程序
正常情况一个进程最大占用内存为1G一下,如果程序有需求要使用超过1G大小的程序,可进行如下操作 VS修改设置:属性--->链接器--->系统--->启用大地址 【选择是】 测试申请堆内存代码 #include <stdlib.h> #include <stdio…...
如何本地部署Jellyfin影音服务器并实现在公网访问
文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及,各种各样的使用需求也被开发出来&…...
docker fixuid
docker fixuid 一、fixuid是什么二、使用场景三、问题dockerfiledocker run 一、fixuid是什么 fixuid是用go语言编写的,当容器起来后可以修改容器中非root用户的UID/GID和文件权限。 项目地址:https://github.com/boxboat/fixuid 二、使用场景 当容器…...
MySQL笔记--SQL语句
目录 1--SQL的通用语法 2--SQL语句的分类 3--DDL语句 3-1--数据库操作 3-2--表操作 3-3--数据类型 3-4--修改和删除 4--DML语句 4-1--插入数据 4-2--修改数据 4-3--删除数据 5--DQL语句 5-1--基本查询 5-2--条件查询 5-3--聚合函数 5-4--分组查询 5-5--排序查…...
线扫相机DALSA-相机平场矫正详细步骤
在相机视野下铺放白色亚克力板或纯白纸,采集图像。打开曲线图。 选择 Line Profile 模式。调节好相应所需的曝光时间、光源、增益和镜头光圈,让白平衡纸显示出来的灰度值大概在 150-200 左右。 在Calibration Algorithm 中将显示的数值设置好。 先暗场…...
求购供应发布农业副业产品市场行情小程序开发
农业副业产品求购供应发布市场行情小程序H5开源版开发 后台同步:一键获取全国近200家农产品批发市场的商品价格,包括蔬菜、水果、水产、粮油和农副产品等。 实时更新和同步市场价格动态,保障信息的准确性和时效性。 前端VIP权益功能&…...
若依框架多级目录闪退问题解决:手把手教你添加router-view的正确姿势
若依框架多级目录闪退问题深度解析与实战修复指南 最近在若依框架的实际项目开发中,不少前端工程师反馈遇到一个棘手问题:当系统包含多级目录菜单时,点击后菜单会在页面中短暂闪现随即消失。这种现象不仅影响用户体验,也暴露出框架…...
HunyuanVideo-Foley部署教程:NVIDIA Container Toolkit集成最佳实践
HunyuanVideo-Foley部署教程:NVIDIA Container Toolkit集成最佳实践 1. 环境准备与快速部署 在开始部署HunyuanVideo-Foley之前,我们需要确保硬件和软件环境满足要求。本教程将指导您完成从零开始的完整部署流程。 1.1 硬件要求检查 显卡:…...
OpenClaw定时任务配置:Phi-3-mini-128k-instruct每日早报自动生成
OpenClaw定时任务配置:Phi-3-mini-128k-instruct每日早报自动生成 1. 为什么需要自动化早报服务 每天早上打开电脑第一件事,就是花20分钟浏览各大新闻网站,手动整理成简报发到团队群。这种重复劳动持续三个月后,我开始思考&…...
OpenClaw跨平台实战:Mac与Windows双端配置Qwen3-4B
OpenClaw跨平台实战:Mac与Windows双端配置Qwen3-4B 1. 为什么选择OpenClawQwen3-4B组合 去年我在整理个人知识库时,发现手动处理上千份PDF和网页存档效率极低。尝试过各种自动化工具后,最终被OpenClaw的"AI直接操控电脑"理念吸引…...
04月07日AI每日参考:Anthropic签下史上最大算力协议,国内AI每日Token用量突破140万亿
今日概览今天AI圈有两条主线值得重点关注。海外方面,Anthropic与Google、Broadcom签署了迄今最大规模的算力协议,年化收入同步披露超300亿美元,算力军备竞赛进入新阶段。国内方面,中国国家安全部发出AI Token安全预警,…...
OpenClaw配置备份指南:千问3.5-27B环境快速迁移
OpenClaw配置备份指南:千问3.5-27B环境快速迁移 1. 为什么需要配置备份 上周我的主力开发机突然硬盘故障,不得不更换新设备。当我重新部署OpenClaw时,发现要重新配置模型地址、飞书通道、技能列表等十几项参数,整整花了两小时才…...
STM32duino驱动X-NUCLEO-IKS5A1多传感器融合开发指南
1. STM32duino X-NUCLEO-IKS5A1 扩展板底层驱动技术解析1.1 工业级多传感器融合平台的硬件架构X-NUCLEO-IKS5A1 是意法半导体(ST)面向工业运动感知与环境监测场景推出的高集成度 MEMS 传感器扩展板,专为 STM32 Nucleo 开发平台设计。其核心价…...
OpenClaw自动化竞赛:Qwen3.5-9B在不同任务中的表现对比
OpenClaw自动化竞赛:Qwen3.5-9B在不同任务中的表现对比 1. 测试背景与实验设计 最近我在本地部署了OpenClaw框架,并接入Qwen3.5-9B模型进行了一系列自动化任务测试。作为一个长期关注AI自动化落地的开发者,我很好奇这款90亿参数的模型在实际…...
嵌入式开发中的串口打印调试与printf重定向
1. 为什么需要串口打印调试?在嵌入式开发中,调试手段的选择往往决定了问题排查的效率。使用仿真器(如J-Link、ST-Link)进行单步调试确实是最直观的方式,但在实际项目中经常会遇到以下限制:硬件限制…...
借助AIBIYE的AI改写功能,学习五个核心技巧,快速优化论文内容以达到低重复率标准。
嘿,大家好!我是AI菌。今天咱们来聊聊一个让无数学生头疼的问题:论文重复率飙到30%以上怎么办?别慌,我这就分享5个实用降重技巧,帮你一次搞定,轻松压到合格线以下。这些方法都是我亲身试验过的&a…...
