前端十万个为什么——软件设计的架构模式

news2024/10/7 8:22:11

在这里插入图片描述
😀博主:小猫娃来啦
😀文章核心:软件设计的架构模式

上篇文章,我们聊了一下前端的普遍性问题以及解决策略。书接上文,我们今天聊聊软件设计的架构模式。
在正文开始前,先思考几秒:为什么要出现这个所谓的架构模式?

目录

  • 软件设计的架构模式
    • 优点一:能分离关注点
    • 优点二:可提高程序的可维护性
    • 优点二:可提高可扩展性
      • 耦合,松耦合,解耦
    • 能提高代码复用性
  • 常见的架构模式

软件设计的架构模式

⭐之前我们说过,技术的更新,迭代都是为了解决某些顽固问题,或者提高效率而产生的新产品或新理念。

那么这时候就有了新东西——软件设计的架构模式。

软件设计的架构模式是一种为了解决软件开发中的一些普遍问题,而提供给开发者的一种组织和管理代码的方式。

软件设计的架构模式有很多优点,集中以下几个方面:

优点一:能分离关注点

所谓的分离关注点,简单的可以理解为将一件事分不同的模块,让不同的部门去做。
或者说,炒土豆丝这件事,我让A去洗土豆,我让B去切土豆,C去炒土豆,D去烧火。大概就这么个意思。

那么为什么要分离关注点呢?

因为当一个系统或任务变得复杂时,如果所有的功能都交织在一起,代码会变得难以理解、难以维护和难以扩展。通过分离关注点,我们可以将复杂的问题分解为更小、更简单的部分,每个部分只需要关注自己的功能,这样就可以降低代码的复杂性,提高代码的可读性和可维护性。

⭐⭐再举个例子

如果我们要开发一个手机商城的app。这个app涉及到用户管理、商品管理、订单管理、推广管理等多个功能。如果我们将所有的功能都写在一个函数或一个类里面,代码会变得非常庞大而复杂。但是如果我们将用户管理、商品管理和订单管理等功能分别封装成独立的模块或类,每个模块或类只负责自己的功能,这样就能更清晰地理解和管理代码。

那么如此一看,关注点的分离这一概念就和组件,和封装扯上关系了,但今天不谈这些。

优点二:可提高程序的可维护性

什么是可维护性呢?

可维护性是指软件系统在运行过程中容易被理解、修改和修复的程度。一个具有良好可维护性的软件系统能够快速地进行功能扩展、缺陷修复和代码重构,同时保持高质量的代码结构和设计。

⭐⭐举个例子:

一个应用程序里面,你某一个页面代码写了几千行,不加注释的情况下。当这个程序需要升级,更新,修bug时,因为你不加注释,且不加以封装,导致很难理解代码,很难测试代码,也很难改代码,一改可能整个程序无法运行,你甚至短时间很难找到原因。这个时候,你要维护你的app,想更新东西,想版本管理,版本升级,就会变得很难。所以可维护性是很重要的。

可维护性能带来的好处可真是太多了,列举一下:

  1. 可理解性:可维护的代码应该易于理解和阅读,开发人员能够快速地理解代码的功能和逻辑,降低维护成本。
  2. 可修改性:可维护的代码应该易于修改和扩展,当需求变化时,能够快速地进行功能添加或修改,而不会对整个系统造成大规模的影响。
  3. 可测试性:可维护的代码应该易于测试,能够快速地编写和运行测试用例,确保功能的正确性和稳定性。
  4. 可靠性:可维护的代码应该具有良好的错误处理和异常处理机制,能够快速地定位和修复缺陷,提高系统的稳定性和可靠性。

⭐⭐⭐所以提高程序的可维护性就是一个非常重要的课题,很多人为之而努力。后来的模块化,组件化,代码规范等等,很大程度上就是要和可维护性吻合。

我们要提高可维护性,可从这几个方面入手:

  • 使用清晰的命名和注释
                          使用有意义的命名和注释,使代码易于理解和阅读。
  • 遵循设计原则和模式
                          使用设计原则和模式来提高代码的可读性、可扩展性和可测试性。
  • 模块化和组件化
                          将代码划分为模块或组件,每个模块或组件只负责特定的功能,降低代码的耦合度。
  • 编写可测试的代码
                           编写可测试的代码,使用单元测试、集成测试等技术来确保代码的正确性。
  • 持续集成和自动化测试
                          使用持续集成和自动化测试工具,能够快速地进行代码构建、测试和部署。

优点二:可提高可扩展性

可扩展性是指软件系统能够在面对不同的需求和负载情况下,通过增加资源或修改系统架构来满足更大规模的需求,而不需要对系统进行重大的改动或重新设计。

可扩展性对于软件系统的长期发展和适应性非常重要,它可以带来以下好处:

容量扩展:可扩展的系统能够有效地处理更大规模的数据和更多的用户请求,而不会因为负载增加而导致性能下降或系统崩溃。
功能扩展:可扩展的系统能够方便地添加新的功能和模块,以满足不断变化的需求,而不需要对现有系统进行大规模的修改。
并发扩展:可扩展的系统能够支持更多的并发用户,通过增加计算资源或调整系统架构来提高系统的吞吐量和响应速度。

为提高软件系统的可扩展性,可以采用以下方法和技术:

  • 模块化和松耦合
                          将系统划分为独立的模块或组件,每个模块或组件只负责特定的功能,降低模块之间的耦合度,使得新增功能或模块更加容易。
  • 水平扩展和垂直扩展
                          通过增加硬件资源或调整系统架构来进行扩展。水平扩展是通过增加服务器节点或分布式部署来提高系统的负载能力,而垂直扩展是通过提升单个服务器的硬件性能来提高系统的负载能力。
  • 弹性计算和自动化扩展
                          利用云计算平台的弹性计算能力,根据实际负载情况自动增加或减少计算资源,以满足不同的需求。
  • 缓存和异步处理
                          通过使用缓存技术和异步处理机制,减轻系统的负载压力,提高系统的吞吐量和响应速度。

这里讲三个概念

耦合,松耦合,解耦

耦合指的是两个或多个模块之间的依赖关系,即一个模块对于其他模块的了解程度。耦合度高表示模块之间的依赖关系紧密,一个模块的改动可能会影响到其他模块,耦合度低表示模块之间的依赖关系较弱,一个模块的改动对其他模块的影响较小。

松耦合是指模块之间的依赖关系较弱,模块之间通过接口进行通信,彼此独立存在。松耦合的模块之间可以相对独立立地进行开发、测试和维护,一个模块的改动不会对其他模块产生过多的影响。松耦合能够提高系统的灵活性、可扩展性和可维护性。

解耦是指通过改变模块之间的依赖关系,使得模块之间的耦合度降低。解耦的目的是减少模块之间的相互依赖,提高模块的独立性,使得模块可以独立地进行开发、测试和维护。解耦可以通过引入中间层、使用消息队列、事件驱动等方式来实现。

能提高代码复用性

提高代码复用性,顾名思义就是要让代码重复的使用。

1.具有相同或类似功能的代码实现,我们可以用变量去代替变化的,不变的就相当于一个骨架。只需更改变量,状态,即可实现功能再现。
2.组件化,模块化。
3.自己封装功能组件,留个出口,用的时候自己随时调用。
4.用一些其他的方法,比如vue里的mixin方法,本人写过这样一篇博客:Vue.js中如何使用mixin实现代码复用?

总体来说,软件设计的架构模式提供了一种组织和管理代码的方式,通过分离关注点、提高可维护性、可扩展性和代码的复用性等等来提高软件开发的效率和质量。架构模式是在实践中总结出来的最佳实践,可以帮助开发者更好地组织和设计软件系统。


常见的架构模式

软件设计的架构模式有很多种,每种模式都有其适用的场景和优缺点,开发者需要根据具体情况选择合适的架构模式来设计和开发。
这种东西就相当于新概念,没有优秀,只有更优秀。
每个人都提一个模式出来,那架构模式可就太多了。架构师有很多,出类拔萃者也很多,架构模式太多,我们前端最最最最常见的也就几种:

  • MVC架构(Model-View-Controller)
            在前端开发中,MVC模式被广泛应用。模型(Model)对应于数据,视图(View)对应于用户界面,控制器(Controller)负责处理用户输入和业务逻辑。
  • MVVM架构(Model-View-ViewModel)
            MVVM是一种用于构建用户界面的架构模式,常用于前端开发中。视图模型(ViewModel)负责处理视图的状态和逻辑,模型(Model)对应于数据,视图(View)负责展示数据。
  • 单页面应用(Single-Page Application)
            SPA是一种前端开发模式,通过使用JavaScript和Ajax等技术,在单个页面内动态加载内容,提供更流畅的用户体验。SPA常常使用MVC或MVVM架构来组织代码。
  • 组件化架构(Component-Based)
            前端开发中常用的组件化架构模式将用户界面划分为多个独立的组件,每个组件负责特定的功能和样式。这种模式使得代码复用和维护更为方便。
  • Flux架构
            Flux是一种用于构建前端应用程序的架构模式,通过单向数据流来管理应用状态。Flux架构将应用程序划分为动作(Action)、调度器(Dispatcher)、存储器(Store)和视图(View)等不同的部分。

在把软件设计的架构模式的这些问题搞清楚,我们才能更好的研究后面的问题,才能逐步深入。

在这里插入图片描述


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

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

相关文章

《安全软件开发框架(SSDF) 1.1:降低软件漏洞风险的建议》解读(二)

安全软件开发框架SSDF是由美国国家标准与技术研究院发布的关于安全软件开发的一组实践,帮助开发组织减少发布的软件中的漏洞数量,减少利用未检测到或未解决的漏洞的潜在影响,从根本上解决漏洞防止再次发生。本文根据《Secure Software Develo…

想学会如何翻译pdf中的英文?让我教你三招

曾经有一个名叫小明的年轻人,他是一名热爱阅读的书虫。每天,他都会沉浸在大量的pdf文档中,探索着各种知识的海洋。然而,有时候他遇到了一些困扰,因为有些pdf文档并不是他熟悉的语言书写的。小明很苦恼,他希…

python接口自动化(十四)--session关联接口(详解)

简介 上一篇cookie绕过验证码模拟登录博客园,但这只是第一步,一般登录后,还会有其它的操作,如发帖,评论等等,这时候如何保持会话呢?这里我以jenkins平台为例,给小伙伴们在沙场演练一…

vue3在浏览器段展示海康监控视频

一、需求 需要在浏览器点击查看海康的监控视频 二、最后成果展示 插件下载地址&#xff1a;https://download.csdn.net/download/xm_w_xm/87995593 三、思路和方法 3.1 首先安装插件&#xff0c;可以在上面的地址中下载安装&#xff0c;建立一个dom <div id"playW…

利用Dockerfile构建带sshd、jdk服务的自定义镜像

什么是Dockerfile? Dockerfile 是一个文本格式的配置文件&#xff0c; 用户可以使用 Dockerfile 来快速创建自定义的镜像 dockerfile 的基本结构 Dockerfile 由一行行命令语句组成&#xff0c;并且支持以 # 开头的注释行。 一般的&#xff0c;Dockerfile 分为四部分&#…

SpringCloud入门实战(十一)-Spring Cloud Stream消息驱动概述

&#x1f4dd; 学技术、更要掌握学习的方法&#xff0c;一起学习&#xff0c;让进步发生 &#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 &#xff0c;关注我&#xff0c;不迷路 。 &#x1f490;学习建议&#xff1a;1、养成习惯&#xff0c;学习java的任何一个技术…

聚焦云原生安全攻防|构建纵深防御的运行时威胁检测体系

7月2日&#xff0c;诸子云北京分会研讨会活动—网络安全攻防对抗在北京成功举办。 作为国内云原生安全领导厂商&#xff0c;安全狗也参与此次活动。 厦门服云信息科技有限公司&#xff08;品牌名&#xff1a;安全狗&#xff09;成立于2013年&#xff0c;致力于提供云安全、&…

Scenario Runner (CARLA)

1. How to run scenarios —Type 2. How to run scenarios —Functionalities

系统提权与数据窃取

系统提权与数据窃取 一、后渗透二、后渗透的技术2.1、提权2.2、横向移动2.3、持久化2.4、数据窃取2.5、漏洞利用 三、meterpreter后渗透3.1、靶机权限提升3.1.1、windows内核/服务漏洞3.1.2、bypassUAC3.1.2.1、bypassuac 进程注入3.1.2.2、bypassuac_injection 内存注入3.1.2.…

Android Studio实现内容丰富的安卓医院医生招聘平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号120 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看公告 3.查…

软件设计师(九)数据库技术基础

数据库技术是研究数据库的结构、存储、设计、管理和应用的一门软件学科 一、基本概念 1、数据库和数据库系统 数据库系统&#xff08;DataBase System&#xff0c;DBS&#xff09;是一个采用了数据库技术&#xff0c;有组织地、动态地存储大量数据&#xff0c;方便多用户访问…

公众号授权登录h5

公众号授权登录h5 . 前几天一个月薪35k的兄弟&#xff0c;给我推了一个人工智能学习网站&#xff0c;看了一段时间挺有意思的。包括语音识别、机器翻译等从基础到实战都有&#xff0c;很详细&#xff0c;分享给大家。大家及时保存&#xff0c;说不定啥时候就没了。 . 步骤 …

认识JavaScript

大家好,今天我们来认识一下JavaScript相关内容 目录 &#x1f437;1.JavaScript是什么&#x1f437;2.JavaScript发展史&#x1f437;3.JavaScript 和 HTML 和 CSS 之间的关系&#x1f437;4.JavaScript 运行过程&#x1f437;5.JavaScript 的组成&#x1f437;6.用JavaScript写…

JavaScript 实现一键复制(id,账号)

文章目录 HTML准备JavaScript 逻辑css 在前端有很多的时候需要一键复制账号&#xff0c;密码等&#xff0c;比如QQ的复制QQ账号&#xff0c;一些程序应用的个人信息页&#xff0c;都会有一键复制这个功能&#xff0c;下面给大家分享一下一键复制的实现方法 HTML准备 先提前准备…

【Linux修炼】开发工具使用

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

计算机丢失msvcr110.dll是什么意思?那个修复方法更简单

Windows系统的电脑运行一段时间&#xff0c;总是不可避免出现一些系统报错&#xff0c;比如在运行游戏或游戏的时候&#xff0c;报错提示“计算机丢失msvcr110.dll”&#xff0c;“找不到msvcr110.dll”是什么意思呢&#xff1f;我是运行photoshop的时候报错的&#xff0c;场景…

Paddle:SSLD 知识蒸馏实战

SSLD 知识蒸馏实战 论文&#xff1a;https://arxiv.org/abs/2103.05959 1. 算法介绍 1.1 简介 PaddleClas 融合已有的知识蒸馏方法 [2,3]&#xff0c;提供了一种简单的半监督标签知识蒸馏方案(SSLD&#xff0c;Simple Semi-supervised Label Distillation)&#xff0c;基于 I…

如何解释商业智能BI?商业智能BI未来的发展趋势?

商业智能BI能够成为当前商业世界中备受企业欢迎的数据类技术解决方案其实是有原因的&#xff0c;早在1958年&#xff0c;IBM研究员就将商业智能BI的早期形态定义为&#xff1a;“对事物相互关系的一种理解能力&#xff0c;并依靠这种能力去指导决策&#xff0c;以达到预期的目标…

【Python】正则表达式匹配大部分Url

正则表达式&#xff1a; r’(\w://)?(\w)(.\w).(\w)(/\w)(.\w)?(?(\w\w)(&\w\w))?’ 解释&#xff1a;