😀博主:小猫娃来啦
😀文章核心:软件设计的架构模式
上篇文章,我们聊了一下前端的普遍性问题以及解决策略。书接上文,我们今天聊聊软件设计的架构模式。
在正文开始前,先思考几秒:为什么要出现这个所谓的架构模式?
文章目录
软件设计的架构模式
⭐之前我们说过,技术的更新,迭代都是为了解决某些顽固问题,或者提高效率而产生的新产品或新理念。
那么这时候就有了新东西——软件设计的架构模式。软件设计的架构模式是一种为了解决软件开发中的一些普遍问题,而提供给开发者的一种组织和管理代码的方式。
软件设计的架构模式有很多优点,集中以下几个方面:
优点一:能分离关注点
所谓的分离关注点,简单的可以理解为将一件事分不同的模块,让不同的部门去做。
或者说,炒土豆丝这件事,我让A去洗土豆,我让B去切土豆,C去炒土豆,D去烧火。大概就这么个意思。
那么为什么要分离关注点呢?
因为当一个系统或任务变得复杂时,如果所有的功能都交织在一起,代码会变得难以理解、难以维护和难以扩展。通过分离关注点,我们可以将复杂的问题分解为更小、更简单的部分,每个部分只需要关注自己的功能,这样就可以降低代码的复杂性,提高代码的可读性和可维护性。
⭐⭐再举个例子
如果我们要开发一个手机商城的app。这个app涉及到用户管理、商品管理、订单管理、推广管理等多个功能。如果我们将所有的功能都写在一个函数或一个类里面,代码会变得非常庞大而复杂。但是如果我们将用户管理、商品管理和订单管理等功能分别封装成独立的模块或类,每个模块或类只负责自己的功能,这样就能更清晰地理解和管理代码。
那么如此一看,关注点的分离这一概念就和组件,和封装扯上关系了,但今天不谈这些。
优点二:可提高程序的可维护性
什么是可维护性呢?可维护性是指软件系统在运行过程中容易被理解、修改和修复的程度。一个具有良好可维护性的软件系统能够快速地进行功能扩展、缺陷修复和代码重构,同时保持高质量的代码结构和设计。
⭐⭐举个例子:
一个应用程序里面,你某一个页面代码写了几千行,不加注释的情况下。当这个程序需要升级,更新,修bug时,因为你不加注释,且不加以封装,导致很难理解代码,很难测试代码,也很难改代码,一改可能整个程序无法运行,你甚至短时间很难找到原因。这个时候,你要维护你的app,想更新东西,想版本管理,版本升级,就会变得很难。所以可维护性是很重要的。
可维护性能带来的好处可真是太多了,列举一下:
可理解性:可维护的代码应该易于理解和阅读,开发人员能够快速地理解代码的功能和逻辑,降低维护成本。
可修改性:可维护的代码应该易于修改和扩展,当需求变化时,能够快速地进行功能添加或修改,而不会对整个系统造成大规模的影响。
可测试性:可维护的代码应该易于测试,能够快速地编写和运行测试用例,确保功能的正确性和稳定性。
可靠性:可维护的代码应该具有良好的错误处理和异常处理机制,能够快速地定位和修复缺陷,提高系统的稳定性和可靠性。
⭐⭐⭐所以提高程序的可维护性就是一个非常重要的课题,很多人为之而努力。后来的模块化,组件化,代码规范等等,很大程度上就是要和可维护性吻合。
我们要提高可维护性,可从这几个方面入手:
使用清晰的命名和注释:
使用有意义的命名和注释,使代码易于理解和阅读。
遵循设计原则和模式:
使用设计原则和模式来提高代码的可读性、可扩展性和可测试性。
模块化和组件化:
将代码划分为模块或组件,每个模块或组件只负责特定的功能,降低代码的耦合度。
编写可测试的代码:
编写可测试的代码,使用单元测试、集成测试等技术来确保代码的正确性。
持续集成和自动化测试:
使用持续集成和自动化测试工具,能够快速地进行代码构建、测试和部署。
优点二:可提高可扩展性
可扩展性是指软件系统能够在面对不同的需求和负载情况下,通过增加资源或修改系统架构来满足更大规模的需求,而不需要对系统进行重大的改动或重新设计。可扩展性对于软件系统的长期发展和适应性非常重要,它可以带来以下好处:
容量扩展:可扩展的系统能够有效地处理更大规模的数据和更多的用户请求,而不会因为负载增加而导致性能下降或系统崩溃。
功能扩展:可扩展的系统能够方便地添加新的功能和模块,以满足不断变化的需求,而不需要对现有系统进行大规模的修改。
并发扩展:可扩展的系统能够支持更多的并发用户,通过增加计算资源或调整系统架构来提高系统的吞吐量和响应速度。
为提高软件系统的可扩展性,可以采用以下方法和技术:
模块化和松耦合:
将系统划分为独立的模块或组件,每个模块或组件只负责特定的功能,降低模块之间的耦合度,使得新增功能或模块更加容易。
水平扩展和垂直扩展:
通过增加硬件资源或调整系统架构来进行扩展。水平扩展是通过增加服务器节点或分布式部署来提高系统的负载能力,而垂直扩展是通过提升单个服务器的硬件性能来提高系统的负载能力。
弹性计算和自动化扩展:
利用云计算平台的弹性计算能力,根据实际负载情况自动增加或减少计算资源,以满足不同的需求。
缓存和异步处理:
通过使用缓存技术和异步处理机制,减轻系统的负载压力,提高系统的吞吐量和响应速度。
这里讲三个概念
耦合,松耦合,解耦
耦合指的是两个或多个模块之间的依赖关系,即一个模块对于其他模块的了解程度。耦合度高表示模块之间的依赖关系紧密,一个模块的改动可能会影响到其他模块,耦合度低表示模块之间的依赖关系较弱,一个模块的改动对其他模块的影响较小。
松耦合是指模块之间的依赖关系较弱,模块之间通过接口进行通信,彼此独立存在。松耦合的模块之间可以相对独立立地进行开发、测试和维护,一个模块的改动不会对其他模块产生过多的影响。松耦合能够提高系统的灵活性、可扩展性和可维护性。
解耦是指通过改变模块之间的依赖关系,使得模块之间的耦合度降低。解耦的目的是减少模块之间的相互依赖,提高模块的独立性,使得模块可以独立地进行开发、测试和维护。解耦可以通过引入中间层、使用消息队列、事件驱动等方式来实现。
能提高代码复用性
提高代码复用性,顾名思义就是要让代码重复的使用。
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)等不同的部分。
在把软件设计的架构模式的这些问题搞清楚,我们才能更好的研究后面的问题,才能逐步深入。
下一篇我们深入研究一下MVC和MVVM