【愚公系列】软考高级-架构设计师 098-层次架构风格
🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏
🚀前言
层次架构风格是一种常见的软件架构设计风格,它将软件系统划分为多个水平层次(layers),每个层次都有特定的责任和功能,并且层与层之间有清晰的接口和交互规则。每个层次都建立在更低级别的层次之上,提供了一种组织结构,有助于实现模块化、可维护性和可扩展性。
🚀一、层次架构风格
🔎1.两层C/S架构
在客户端和服务器两端都有处理功能的架构模式中,尽管这种模式曾经被广泛使用,但现在已经不常用了,主要原因包括以下几个方面:
🦋1.1 开发成本较高
- 开发和维护客户端和服务器端的复杂处理功能需要更多的资源和时间,导致总体开发成本较高。
🦋1.2 客户端程序设计复杂
- 客户端程序需要具备较强的处理能力,设计和实现复杂,增加了开发难度。
🦋1.3 信息内容和形式单一
- 由于需要兼顾两端的处理,信息的内容和形式往往无法灵活调整,导致用户体验单一。
🦋1.4 用户界面风格不一
- 不同客户端程序之间的用户界面风格可能不一致,影响用户体验的一致性。
🦋1.5 软件移植困难
- 客户端程序需要在不同平台上运行,移植工作繁重且复杂,增加了开发和维护的难度。
🦋1.6 软件维护和升级困难
- 需要同时维护和升级客户端和服务器端,工作量大,且容易出现版本不一致的问题。
🦋1.7 新技术不能轻易应用
- 由于架构复杂,引入新技术需要大量改动,阻碍了技术的快速更新和应用。
🦋1.8 安全性问题
- 客户端和服务器都具有处理功能,增加了潜在的安全漏洞,安全性管理更加复杂。
🦋1.9 服务器端压力大难以复用
- 服务器端需要处理大量请求,负载压力大,而且由于系统设计复杂,难以实现组件的复用。
🔎2.三层C/S架构
三层客户端/服务器(C/S)架构是一种将处理功能独立出来的系统设计方式,其中表示层在客户端,功能层在应用服务器,数据层在数据库服务器。这种架构将两层C/S架构中的数据从服务器中独立出来,具有以下优点:
🦋2.1 优点
-
逻辑结构清晰,提高系统和软件的可维护性和可扩展性
- 各层在逻辑上保持相对独立,整个系统的逻辑结构更为清晰。
- 有助于提高系统和软件的可维护性和可扩展性。
-
良好的可升级性和开放性
- 允许灵活有效地选用相应的平台和硬件系统。
- 系统具有良好的可升级性和开放性。
-
并行开发和最适合的开发语言选择
- 各层可以并行开发,提高开发效率。
- 各层可以选择各自最适合的开发语言,增加开发灵活性。
-
功能层有效隔离表示层与数据层,增强安全管理
- 功能层有效地隔离表示层与数据层,为严格的安全管理奠定了坚实的基础。
- 整个系统的管理层次更加合理和可控制。
🦋2.2 设计关键点
- 通信效率
- 各层之间的通信效率是三层C/S架构设计的关键。
- 需慎重考虑三层间的通信方法、通信频度和数据量,以确保系统性能。
- 即使各层硬件能力很强,如果通信效率不高,整体性能仍然会受影响。
🔎3.三层B/S架构
三层浏览器/服务器(B/S)架构是三层客户端/服务器(C/S)架构的变种,将客户端变为用户客户端上的浏览器,将应用服务器变为网络上的WEB服务器,因此也被称为“0客户端架构”。虽然B/S架构简化了客户端开发,但也存在一些缺点。
🦋3.1 主要特点
- 客户端:用户客户端上的浏览器。
- 应用服务器:网络上的WEB服务器。
- 数据层:数据库服务器。
🦋3.2 优点
- 无需开发客户端:客户端仅需要浏览器,无需单独开发和安装客户端软件,降低了开发和维护成本。
🦋3.3 缺点
-
安全性难以控制
- 使用浏览器作为客户端,安全性较难控制,尤其在处理敏感数据时更容易受到攻击。
-
响应速度较慢
- 在数据查询等操作的响应速度上,远远低于C/S架构,因为C/S架构有部分数据存储在本地,可以更快地访问数据。
-
数据提交的动态交互性不强
- 数据提交通常以页面为单位,缺乏动态交互性,用户体验可能不如C/S架构。
🔎4.混合架构风格
混合架构风格结合了C/S(客户端/服务器)架构和B/S(浏览器/服务器)架构的优点,以满足不同需求和场景。以下是两种常见的混合架构模型:
🦋4.1 内外有别模型
- 企业内部:使用C/S架构
- 内部员工使用C/S架构进行高效、安全的数据处理和操作。
- 外部人员:使用B/S架构
- 外部人员通过B/S架构访问系统,便于使用浏览器进行操作,降低客户端开发和维护成本。
🦋4.2 查改有别模型
- 查询操作:采用B/S架构
- 数据查询操作通过B/S架构进行,方便用户使用浏览器快速获取信息。
- 修改操作:采用C/S架构
- 数据修改操作通过C/S架构进行,确保数据处理的安全性和高效性。
🦋4.3 缺点
- 实现困难
- 混合架构的设计和实现较为复杂,需要协调两种架构的优缺点,增加了系统设计和开发的难度。
- 成本高
- 由于需要同时维护C/S和B/S两种架构,开发和维护成本较高。
🔎5.富互联网应用RIA
富互联网应用(Rich Internet Application, RIA)通过更健壮和可视化的用户接口,弥补了三层B/S架构存在的问题。尽管RIA本质上仍是网站模式,但它结合了C/S和B/S架构的优点,提供了更加优秀的用户体验。
🦋5.1 优点
-
结合C/S和B/S架构的优点
- C/S架构优点:反应速度快、交互性强。
- B/S架构优点:传播范围广、容易传播。
-
简化并改进B/S架构的用户交互
- 提供比传统HTML实现的接口更为健壮和可视化的内容,改善用户体验。
-
数据缓存
- 数据能够被缓存在客户端,从而减少数据往返于服务器的次数,提高响应速度。
- 实现一个比基于HTML的响应速度更快的用户界面。
-
零客户端
- 本质上仍是“0客户端”,依赖高速网络,实现必要插件在本地的快速缓存,增强页面对动态内容的支持能力。
- 典型例子如小程序,提供丰富的用户体验而无需复杂的客户端安装。
🔎6.MVC架构
MVC(Model-View-Controller)架构模式是一种用于组织和分离应用程序逻辑的方法,常用于开发用户界面,使得代码更清晰、可维护性更高。MVC架构将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。
🦋6.1 控制器 (Controller)
- 功能:处理用户交互。
- 职责:
- 从视图读取数据。
- 控制用户输入。
- 向模型发送数据。
🦋6.2 模型 (Model)
- 功能:处理应用程序数据逻辑。
- 职责:
- 负责在数据库中存取数据。
- 表示业务数据和业务逻辑。
🦋6.3 视图 (View)
- 功能:处理数据显示。
- 职责:
- 根据模型数据创建视图。
- 是用户看到并与之交互的界面。
- 向用户显示相关的数据并接收用户的输入数据,但不进行实际的业务处理。
🔎7.MVP架构
MVP(Model-View-Presenter)架构模式是MVC(Model-View-Controller)架构的一种变体,将MVC中的Controller替换为Presenter(呈现器)。其目的是为了完全切断View(视图)与Model(模型)之间的联系,由Presenter充当桥梁,实现View和Model之间通信的完全隔离。
🦋7.1 MVP特点
-
双向通信
- M(Model)、V(View)、P(Presenter)之间是双向通信。
-
Presenter作为桥梁
- View与Model不直接通信,所有通信都通过Presenter进行。
- Presenter完全把Model和View分离开,主要的程序逻辑在Presenter中实现。
-
被动视图(Passive View)
- View非常薄,不包含任何业务逻辑,被称为“被动视图”,即没有主动性。
- Presenter非常厚,所有的逻辑都在Presenter中实现。
-
接口交互
- Presenter与具体的View没有直接关联,而是通过定义好的接口进行交互。
- 这种设计使得在变更View时,可以保持Presenter的不变,从而实现重用。
🔎8.MVVM架构
MVVM(Model-View-ViewModel)架构模式类似于MVC,其主要目的是分离视图(View)和模型(Model),通过ViewModel实现双向绑定,具有以下几大优点:
🦋8.1 优点
-
低耦合
- 视图(View)可以独立于模型(Model)的变化和修改。
- 一个ViewModel可以绑定到不同的View上,当View变化时Model可以不变,反之亦然。
-
可重用性
- 可以将一些视图逻辑放在ViewModel中,使多个View重用这段视图逻辑。
-
独立开发
- 开发人员可以专注于业务逻辑和数据的开发(ViewModel)。
- 设计人员可以专注于页面设计(View)。
-
可测试
- 界面通常较难测试,而现在可以针对ViewModel编写测试,提高测试效率和准确性。
🚀感谢:给读者的一封信
亲爱的读者,
我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。
如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。
我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。
如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。
再次感谢您的阅读和支持!
最诚挚的问候, “愚公搬代码”
- 点赞
- 收藏
- 关注作者
评论(0)