系统架构28 - 架构风格补充(上)

层次架构风格

两层C/S架构

客户端和服务器都有处理功能,现在已经不常用,原因有:开发成本较高、客户端程序设计复杂、信息内容和形式单一、用户界面风格不一、软件移植困难、软件维护和升级困难、新技术不能轻易应用、安全性问题、服务器端压力大难以复用

三层C/S架构

将处理功能独立出来,表示层和数据层都变得简单。

表示层在客户机上,功能层在应用服务器上,数据层在数据库服务器上。即将两层C架构中的数据从服务器中独立出来了。其优点包括下面四点:

  • 各层在逻辑上保持相对独立,整个系统的逻辑结构更为清晰,能提高系统和软件的可维护性和可扩展性;
  • 允许灵活有效的选用相应的平台和硬件系统,具有良好的可升级性和开放性;
  • 各层可以并行开发,各层也可以选择各自最适合的开发语言;
  • 功能层有效的隔离表示层与数据层,为严格的安全管理奠定了坚实的基础,整个系统的管理层次也更加合理和可控制

三层CS架构设计的关键 在于各层之间的通信效率,要慎重考虑三层间的通信方法、通信频度和数据量,否则即使分配给各层的硬件能力很强,性能也不高。

三层B/S架构

是三层C架构的变种,将客户端变为用户客户端上的浏览器,将应用服务器变为网络上的WEB服务器,又称为0客户端架构,虽然不用开发客户端,但有很多缺点:

  • 使用浏览器作为客户端的话安全性难以控制;
  • 在数据查询等响应速度上,要远远低于CS架构,因为C架构有部分数据存储在本地;
  • 数据提交一般以页面为单位,数据的动态交互性不强。

混合架构风格

  • 内外有别模型:企业内部使用C/S,外部人员访问使用B/S。
  • 查改有别模型:采用B/S查询,采用C/S修改。
  • 混合架构实现困难,且成本高。

富互联网应用RIA

弥补三层B/S架构存在的问题,RIA是一种用户接口,比用HTML实现的接口更加健壮,且有可视化内容,本质还是网站模式,其优点如下:

  • RIA结合了C/S架构反应速度快、交互性强的优点与B/S架构传播范围广及容易传播的特性;
  • RIA简化并改进了B/S架构的用户交互;
  • 数据能够被缓存在客户端,从而可以实现一个比基于HTML的响应速度更快且数据往返于服务器的次数更少的用户界面。
  • 本质还是0客户端,借助于高速网速实现必要插件在本地的快速缓存,增强页面对动态页面的支持能力,典型的如小程序。

MVC架构

  • 控制器 (Controller):是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据
  • 模型 (Model):是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。模型表示业务数据和业务逻辑
  • 视图 (View):是应用程序中处理数据显示的部分 。通常视图是依据模型数据创建的。是用户看到并与之交互的界面。视图向用户显示相关的数据,并能接收用户的输入数据,但是它并不进行在何实际的业务处理

MVP架构

MVP是把 MVC 中的 Controller 换成了 Presenter (呈现),目的就是为了完全切断 View 跟 Model 之间的联系,由Presenter充当桥梁,做到 View-Model 之间通信的完全隔离。
特点

  • M、V、P之间双向通信。
  • View 与 Model 不通信,都通过 Presenter 传递。Presenter 完全把Model 和 View 进行了分离,主要的程序逻辑在 Presenter 里实现。
  • View 非常薄,不部署任何业务逻辑,称为"被动视图" (PassiveView),即没有任何主动性,而Presenter非常厚,所有逻辑都部署在那里。
  • Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更 View 时候可以保持 Presenter 的不变,这样就可以重用。

MVVM架构

MVVM 模式和MVC模式类似,主要目的是分离视图 (View) 和模型(Model),实现双向绑定,有几大优点:

  • 低耦合,视图 (View) 可以独立于Model变化和修改,一个 ViewModel可以绑定到不同的"View"上,当 View 变化的时候 Model 可以不变,当Model变化的时候View也可以不变。
  • 可重用性,可以把一些视图逻辑放在一个 ViewModel 里面,让很多view重用这段视图逻辑。
  • 独立开发,开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计。
  • 可测试,界面向来是比较难于测试的,而现在测试可以针对ViewModel 来写。
相关推荐
CoovallyAIHub1 天前
视频理解新范式:Agent不再被动看视频,LensWalk让它自己决定看哪里
算法·架构·github
CoovallyAIHub1 天前
斯坦福丨AirVLA:将地面机械臂模型迁移至无人机实现空中抓取,成功率从23%提升至50%
算法·架构·github
竹之却1 天前
【Agent-阿程】OpenClaw智能体架构深度解析与实战应用
架构·大模型应用·ai框架·openclaw
qq_454245031 天前
通用引用管理框架
数据结构·架构·c#
独特的螺狮粉1 天前
云隙一言:鸿蒙Flutter框架 实现的随机名言应用
开发语言·flutter·华为·架构·开源·harmonyos
heimeiyingwang1 天前
【架构实战】SQL调优实战:从执行计划到索引优化
数据库·sql·架构
两万五千个小时1 天前
Claude Code 源码:Agent 工具 — 多 Agent 的路由与定义机制
人工智能·程序员·架构
leonkay1 天前
到底应不应该写注释?
性能优化·架构·个人开发·注释·代码规范·设计·规格说明书
奋斗tree1 天前
EulerOS 2.0 等保三级版(ARM 架构)是什么?
arm开发·架构
heimeiyingwang1 天前
【架构实战】JVM调优:GC日志分析与参数调优
jvm·架构