百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

软件开发之架构设计、编程语言框架、面向对象的设计模式

ccwgpt 2024-10-22 10:19 26 浏览 0 评论

对于复杂的大型应用系统,正如一座大型建筑一样,不能直接开干,需要进行反复设计验证。包括整体框架设计,以及子系统或组件可以适用的代码框架(技术选型),框架下诸多类和对象的创建和使用,复合关系及行为交互等的一些套路(设计模式)的使用。

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-

相关推荐

想快速上手Python网络爬虫?这份实战指南你不能错过!

以下是关于Python网络爬虫实战的详细指南,涵盖基础知识、常用工具、实战案例及注意事项:一、爬虫基础概念1.什么是网络爬虫?o通过自动化程序从网页上抓取并提取数据的工具。o核心步骤:请求网...

python爬虫怎么副业接单

其实这个问题也挺重要的,花了时间花了经历去学了python爬虫,本想靠着这个技能去补贴家用或者挣点零花钱,但是发现有时候的单子是自己力所不能及的,有的东西真的是不会,又或者不知从何下手。那么这篇文章主...

用Python写了一个图像文字识别OCR工具

人生苦短,快学Python!在之前的文章里,我们多次尝试用Python实现文本OCR识别!今天我们要搞一个升级版:直接写一个图像文字识别OCR工具!引言最近在技术交流群里聊到一个关于图像文字识别的...

taskPyro:为 Python 任务与爬虫插上自动化翅膀的开源利器

在数据驱动的时代,无论是数据采集、ETL流程,还是定期的系统维护脚本,高效、可靠的任务调度成为了许多开发者和运维人员的刚需。特别是对于Python开发者而言,如何优雅地管理和调度日益增多的爬虫任...

网络爬虫:Python动态网页爬虫2种技术方式及示例

作者:糖甜甜甜https://mp.weixin.qq.com/s/5Dwh5cbfjpDfm_FRcpw1Ug这一讲,我将会为大家讲解稍微复杂一点的爬虫,即动态网页的爬虫。动态网页技术介绍动态网页爬...

30个小时搞定Python网络爬虫(全套详细版)

【课程介绍】适用人群1、零基础对Python网络爬虫感兴趣的学员2、想从事Python网络爬虫工程师相关工作的学员3、想学习Python网络爬虫作为技术储备的学员课程目标1、本课程的目标是将大家培养成...

python爬虫常用工具库总结

说起爬虫,大家可能第一时间想到的是python,今天就简单为大家介绍下pyhton常用的一些库。请求库:实现基础Http操作urllib:python内置基本库,实现了一系列用于操作url的功能。...

玛森:Python爬虫书籍推荐

  Python爬虫书籍推荐什么?玛森科技徐老师介绍,网络爬虫现在很火,不管业内人士或业外人士,大家对爬虫或多或少都有一些了解,网络爬虫通俗的讲,就是通过程序去互联网上面爬取想要的内容,并且爬取的过程...

如何入门python爬虫?

1.很多人一上来就要爬虫,其实没有弄明白要用爬虫做什么,最后学完了却用不上。大多数人其实是不需要去学习爬虫的,因为工作所在的公司里有自己的数据库,里面就有数据来帮助你完成业务分析。什么时候要用到爬虫呢...

爬虫修炼手册,Python爬虫学习入门Scrapy

爬虫就如同江湖中的神秘侠客,应运而生,成为了我们获取数据的得力助手。爬虫,正式名称是网络爬虫(WebCrawler),也被叫做网页蜘蛛、网络机器人,它是一段神奇的计算机代码,能够自动在互联网的信息...

如何入门 Python 爬虫?

1.很多人一上来就要爬虫,其实没有弄明白要用爬虫做什么,最后学完了却用不上。大多数人其实是不需要去学习爬虫的,因为工作所在的公司里有自己的数据库,里面就有数据来帮助你完成业务分析。什么时候要用到爬虫呢...

有了这4张思维导图,带你Python(爬虫)轻松入门

刚接触Python爬虫,该怎么学更有效?指南君给大家带来了这四张思维导图。非常适合刚开始学Python爬虫的同学用于回顾知识点、巩固学习情况等。话不多说,快来学习Python爬虫入门的最强干货吧!P...

python爬虫教程之爬取当当网 Top 500 本五星好评书籍

我们使用requests和re来写一个爬虫作为一个爱看书的你(说的跟真的似的)怎么能发现好书呢?所以我们爬取当当网的前500本好五星评书籍怎么样?ok接下来就是学习python的正确姿...

超实用!Python 在爬虫和自动化领域的 8 类工具与技术大盘点

Python在爬虫和自动化领域拥有丰富的工具库和框架,以下是一些常用工具和技术的分类整理,帮助你高效实现数据抓取和自动化任务:1.基础HTTP请求库oRequestso简洁的HTTP库...

学习Python的第四天之网络爬虫

30岁程序员学习Python的第四天之网络爬虫的Scrapy库Scrapy库的基本信息Scrapy库的安装在windows系统中通过管理员权限打开cmd。运行pipinstallscrapy即可安...

取消回复欢迎 发表评论: