软件开发之架构设计、编程语言框架、面向对象的设计模式
liuian 2024-11-28 00:47 25 浏览
对于复杂的大型应用系统,正如一座大型建筑一样,不能直接开干,需要进行反复设计验证。包括整体框架设计,以及子系统或组件可以适用的代码框架(技术选型),框架下诸多类和对象的创建和使用,复合关系及行为交互等的一些套路(设计模式)的使用。
1 什么是架构设计
架构(Architecture)设计是系统的顶层设计,是软件整体结构与组件的抽象描述,涉及到子系统划分与交互,包括系统如何纵向分层、横向模块划分,组件如何交互等设计,设计的系统要求有高性能与安全性、易于维护与扩展。
如一个电子商城系统,可以按其业务逻辑(用户实现一个功能的最小的闭环,包括流程环节、人机交互、数据交互)进行划分:
1 商家卖货 | 1.1 订单系统 | 订单生成 | 用户下单、商品信息、优惠信息、会员权益、库存减少、运费计算 |
支付订单 | 用户信息、支付信息 | ||
商家发货 | 商家发货、仓库调拔、订单分拣、商品包装、订单出库、快递配送 | ||
确认收货 | 物流追踪、用户签收 | ||
交易完成 | 用户评价、订单售后 | ||
1.2 物流系统 | …… | …… | |
1.3 文件系统 | …… | …… | |
2 买家买货 | 2.1 直播系统 | …… | …… |
2.2 红包雨系统 | …… | …… | |
2.3 秒杀系统 | …… | …… |
架构设计的一些常用套路称为架构模式,如,MVC模式、分层模式、CS模式、主从模式、管道过滤模式、代理模式、P2P模式、事物总线模式、解释器模式、微内核架构(插件架构)、基于空间的架构(云架构)、微服务架构等。
在软件系统中,架构是非常重要的一部分,它统领各个模块的开发和合作,项目从研发到上线运营,我们要在不同的方案中选择合适的架构,比如,我们服务器使用什么操作系统?使用什么语言开发?数据如何获取和存储?客户端使用什么框架开发?
这些问题的方案组合在一起就是一种软件开发架构,项目组的每个子系统都要有自己的方向,把子系统的决策方向合起来再加入它们之间的关联调用就构成了一个完整的架构,每个系统、组件、模块都是软件系统架构的一部分。
2 什么样的架构才是好架构?
一个好的架构设计需要有好的承载力、扩展性、易用性、伸缩性和容错性。
2.1 承载力
一个架构能承载多少个业务系统或功能系统,能承载多少代码行数,在达到规定的代码量时是否能有效正常的运行。
对于服务器来说,服务器的架构能承载多少人同时访问,能承载的日均访问量是多少,这就是它承载力的体现。
对于客户端来说,它能显示多少个UI功能,可以同时渲染多少个模型,分辨率可以达到多少,则是它的承载力体现。
2.2 扩展性
可扩展性的关键就在于,在添加新系统新功能的时候,会不会影响其他系统,添加这个新系统的代价大不大,会不会导致系统整体性能问题。
2.3 易用性
易用性其实很简单,就是你这个产品设计的好不好用,是不是方便使用。
易用性也决定了软件的整体开发效率,因为一个好的架构,会让团队成员容易上手,子系统容易对接,开发效率高,各模块和各系统的编写只需要关注系统的设计和编码工作,其他模块通信方面的事情,架构可以提供很好的兼容。
2.4 伸缩性
什么是伸缩性?其实就是你设计的这个方案或系统是否可以根据需求适配不同数量的功能或子系统,在我们设计的软件系统中,架构的可伸缩性决定了架构的可适配性,比如,当这个系统使用人数较少的时候,是否支持减少一些服务器来支撑服务端的运行,当系统使用的人数较多时,访问量较大时是否支持添加服务器来增强系统的支持。
2.5 容错性
如果软件中某个系统出现了一点小BUG导致整个系统使用不了,那这个架构容错性就很差,软件中的一些BUG很常见,我们无法避免,但是我们应尽量保证这个BUG的影响范围最小。
同时,若出现系统无法使用的情况,应该有备份方案,比如自动启动或者自动保存数据等功能,也应该能够让开发人员及时知道问题的发生,以及问题所在的位置并记录错误信息。
在架构设计中,以上五项基本能力缺一不可,某项能力的突出并不能带动其他项,也不能决定整个系统的好坏。
但是如果某一项能力比较弱,随着时间的推移,问题会越来越大,甚至系统崩溃。就像木桶原理那样,一个木桶的容量不是取决于最长的那根木板,而是取决于最短的那根。
我们需要一个坚固的、多样化的、好用的、可伸缩的、容错性强的房子,这也是我们设计架构所追求的目标。
3 框架(Framework)
框架是某一架构模式的某一基础组件的代码化,表现为类库或工具。
例如MVC是一种架构模式,其具体的网络开发框架有:
Python Django 框架
Java Spring 框架
Ruby on Rails框架
不同的编译语言有不同的框架来实现不同的架构设计:
C:ACL
C++:QT、MFC
Python:PyQt
JavaScript:Node.js、React.js
SSM框架是Spring+SpringMVC+MyBatis三个框架整合而成的,在SpringBoot出现之后,SpringBoot慢慢开始占据了主流地位,另外在SSM之前还有一个业内流行的SSH框架(Struts、Spring和Hibernate0。
4 设计模式
一个系统可以选择不同的架构设计模式,一种架构设计模式可以选择不同编程语言的不同框架或框架组合,而不同的框架下的代码开发可以使用不同的面向对象的设计模式(Design Pattern)来实现不同对象之间的关系及行为交互,包括对象的创建与使用分离,以降低系统的耦合度。
5 编程语言及相关内容
所以,学习一门编程语言往往不仅限于编程语言本身:
① 计算机组成原理
② 汇编语言
③ 编程语言本身
④ 标准库
⑤ 编程语言相关的某操作系统的API
⑥ 编程语言相关的数据结构(如C++的STL,Java的Collection)
⑦ 通用数据结构与算法
⑧ 数据库、网络
⑨ 框架、工具
ref:
https://ea.zhoujingen.cn/?p=4875
https://www.zhihu.com/question/25654738
https://www.toutiao.com/article/7116139300672094753
-End-
相关推荐
- 2023年最新微信小程序抓包教程(微信小程序 抓包)
-
声明:本公众号大部分文章来自作者日常学习笔记,部分文章经作者授权及其他公众号白名单转载。未经授权严禁转载。如需转载,请联系开百。请不要利用文章中的相关技术从事非法测试。由此产生的任何不良后果与文...
- 测试人员必看的软件测试面试文档(软件测试面试怎么说)
-
前言又到了毕业季,我们将会迎来许多需要面试的小伙伴,在这里呢笔者给从事软件测试的小伙伴准备了一份顶级的面试文档。1、什么是bug?bug由哪些字段(要素)组成?1)将在电脑系统或程序中,隐藏着的...
- 复活,视频号一键下载,有手就会,长期更新(2023-12-21)
-
视频号下载的话题,也算是流量密码了。但也是比较麻烦的问题,频频失效不说,使用方法也难以入手。今天,奶酪就来讲讲视频号下载的新方案,更关键的是,它们有手就会有用,最后一个方法万能。实测2023-12-...
- 新款HTTP代理抓包工具Proxyman(界面美观、功能强大)
-
不论是普通的前后端开发人员,还是做爬虫、逆向的爬虫工程师和安全逆向工程,必不可少会使用的一种工具就是HTTP抓包工具。说到抓包工具,脱口而出的肯定是浏览器F12开发者调试界面、Charles(青花瓷)...
- 使用Charles工具对手机进行HTTPS抓包
-
本次用到的工具:Charles、雷电模拟器。比较常用的抓包工具有fiddler和Charles,今天讲Charles如何对手机端的HTTS包进行抓包。fiddler抓包工具不做讲解,网上有很多fidd...
- 苹果手机下载 TikTok 旧版本安装包教程
-
目前苹果手机能在国内免拔卡使用的TikTok版本只有21.1.0版本,而AppStore是高于21.1.0版本,本次教程就是解决如何下载TikTok旧版本安装包。前期准备准备美区...
- 【0基础学爬虫】爬虫基础之抓包工具的使用
-
大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学爬...
- 防止应用调试分析IP被扫描加固实战教程
-
防止应用调试分析IP被扫描加固实战教程一、概述在当今数字化时代,应用程序的安全性已成为开发者关注的焦点。特别是在应用调试过程中,保护应用的网络安全显得尤为重要。为了防止应用调试过程中IP被扫描和潜在的...
- 一文了解 Telerik Test Studio 测试神器
-
1.简介TelerikTestStudio(以下称TestStudio)是一个易于使用的自动化测试工具,可用于Web、WPF应用的界面功能测试,也可以用于API测试,以及负载和性能测试。Te...
- HLS实战之Wireshark抓包分析(wireshark抓包总结)
-
0.引言Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接...
- 信息安全之HTTPS协议详解(加密方式、证书原理、中间人攻击 )
-
HTTPS协议详解(加密方式、证书原理、中间人攻击)HTTPS协议的加密方式有哪些?HTTPS证书的原理是什么?如何防止中间人攻击?一:HTTPS基本介绍:1.HTTPS是什么:HTTPS也是一个...
- Fiddler 怎么抓取手机APP:抖音、小程序、小红书数据接口
-
使用Fiddler抓取移动应用程序(APP)的数据接口需要进行以下步骤:首先,确保手机与计算机连接在同一网络下。在计算机上安装Fiddler工具,并打开它。将手机的代理设置为Fiddler代理。具体方...
- python爬虫教程:教你通过 Fiddler 进行手机抓包
-
今天要说说怎么在我们的手机抓包有时候我们想对请求的数据或者响应的数据进行篡改怎么做呢?我们经常在用的手机手机里面的数据怎么对它抓包呢?那么...接下来就是学习python的正确姿势我们要用到一款强...
- Fiddler入门教程全家桶,建议收藏
-
学习Fiddler工具之前,我们先了解一下Fiddler工具的特点,Fiddler能做什么?如何使用Fidder捕获数据包、修改请求、模拟客户端向服务端发送请求、实施越权的安全性测试等相关知识。本章节...
- fiddler如何抓取https请求实现手机抓包(100%成功解决)
-
一、HTTP协议和HTTPS协议。(1)HTTPS协议=HTTP协议+SSL协议,默认端口:443(2)HTTP协议(HyperTextTransferProtocol):超文本传输协议。默认...
- 一周热门
-
-
Python实现人事自动打卡,再也不会被批评
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
系统C盘清理:微信PC端文件清理,扩大C盘可用空间步骤
-
10款高性能NAS丨双十一必看,轻松搞定虚拟机、Docker、软路由
-
python使用fitz模块提取pdf中的图片
-
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- table.render (33)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)