当前位置:网站首页>【软件工程之美 - 专栏笔记】21 | 架构设计:普通程序员也能实现复杂系统?
【软件工程之美 - 专栏笔记】21 | 架构设计:普通程序员也能实现复杂系统?
2022-07-29 05:23:00 【if...else...】
专栏信息
专栏作者:宝玉
专栏发布平台:极客时间
主要内容
软件需求越来越多,而高手又是稀缺资源,所以要解决的一个问题就是:让普通程序员也能参与其中,一起实现复杂系统,而不必依赖于很多精英。
一、为什么软件项目需要架构设计?
复杂的软件项目,通常有两个特点:需求不确定和技术复杂。

技术的复杂性,主要体现在四个方面。
需求让技术变复杂
如果需求本身很复杂,那么对应的技术也会很复杂。比如说你做一个个人博客网站,和做一个淘宝这样的网站,技术复杂度是有天壤之别的。人员会让技术变复杂
现在软件开发通常不是一个人,而是一个团队。团队成员水平不一样,擅长的技术方向也不一样,让这一群人有效地协作也是很大的考验,简单的技术问题也会变成复杂的技术问题。技术本身也是复杂的
现在软件项目中选择编程语言、框架、技术组件、数据库等技术或工具,还可能需要应用像微服务、大数据、人工智能技术,这些技术本身就是复杂的,普通人都需要通过一定的学习才能掌握。要让软件稳定运行是复杂的
件在开发完成后,要发布运行,但运行时也充满了各种不确定性。比如说明星发布八卦可能会导致微博宕机;阿里云宕机导致很多基于阿里云的系统也跟着一起无法提供服务。
因为技术的这些复杂性,会导致软件开发变得很复杂,开发成本很高。而架构设计恰恰可以在这些方面很好地解决技术复杂的问题。
- 首先,架构设计可以降低满足需求和需求变化的开发成本。
- 其次,架构设计可以帮助组织人员一起高效协作。
- 再次,架构设计可以帮助组织好各种技术。
- 最后,架构设计可以保障服务稳定运行。
二、什么是架构设计?
我们可以分别从目标和方法两个角度来看。
所以架构设计的目标,是用最小的人力成本来满足需求的开发和响应需求的变化,用最小的运行成本来保障软件的运行。
架构设计,已经有很多成熟的方法。比如:
- 使用微服务这样的架构,把复杂系统拆分成一系列小的服务,服务再拆成功能模块,让人员更好地分工协作;
- 通过前后端分离,让程序员更专注于某个知识领域,降低开发难度;
- 用分层设计来隔离业务逻辑,减少需求变更带来的影响。
三、如何做好架构设计?
架构设计要做好,确实不是一个容易的事,需要大量的经验积累。但业界已经有了很多成熟的架构设计模式,我们不需要闭门造车,可以在理解清楚业务需求后,找到相近的架构设计,然后基于成熟的架构设计方案,进行改造,变成适合自己业务需求的架构。
架构设计可以通过四个基本步骤:
- 第一步:分析需求;
- 第二步:选择相似的成熟的架构设计方案;
- 第三步:自顶向下层层细化;
- 第四步:验证和优化架构设计方案。
四、其他摘抄
- 架构设计,就是通过组织人员和技术,低成本满足需求以及需求的变化,保障软件稳定高效运行。
- 架构设计的道,就是组织人员和技术把系统和团队拆分,并安排好切分后的排列关系,让拆分后的部分能通过约定好的协议相互通信,共同实现最终的结果。
- 如说团队以 PHP 程序员为主,就没必要贸然选择 Java 作为开发语言;如果以 js 程序员为主,就可以考虑使用 Nodejs。因为这样的选择,能让团队不需要太多的学习成本。
总结
架构设计,是为了控制软件项目中技术复杂的问题。架构设计,通过组织人员和技术,低成本满足需求以及需求的变化,保障软件稳定高效运行。
边栏推荐
猜你喜欢

Migration learning - geodesic flow kernel for unsupervised domain adaptation

Beijing Baode & taocloud jointly build the road of information innovation

SimpleFOC调参2-速度、位置控制

华为云14天鸿蒙设备开发-Day3内核开发

TB6600+stm32F407测试

HAL学习笔记 - 7 定时器之高级定时器

基于msp430f2491的proteus仿真

STM32FF030 替代国产单片机——DP32G030

Power Bi report server custom authentication

噪声传感器工作原理是什么?
随机推荐
Transfer feature learning with joint distribution adaptation
倾角传感器用于通信铁塔、高压电塔长期监测
兼容cc1101/cmt2300-DP4301 SUB-1G 无线收发芯片
SimpleFOC调参2-速度、位置控制
Torch. NN. Embedding() details
华为云14天鸿蒙设备开发-Day1环境搭建
Hal library learning notes - 8 use of serial communication
【软件工程之美 - 专栏笔记】27 | 软件工程师的核心竞争力是什么?(上)
QT学习笔记-QtSQL
低功耗蓝牙5.0芯片nrf52832-QFAA
ML8自学笔记
ML8自学笔记-LDA原理公式推导
2022春招——上海安路FPGA岗面经(以及乐鑫SOC面试)
Huawei cloud 14 day Hongmeng device development -day5 drive subsystem development
1、 What is the difference between transfer learning and fine tuning?
Power electronics: single inverter design (matlab program +ad schematic diagram)
【软件工程之美 - 专栏笔记】“一问一答”第3期 | 18个软件开发常见问题解决策略
基于AD9850的多功能信号发生器
ML16 neural network (2)
PHY6252是一款超低功耗物联网蓝牙无线通信芯片