系统架构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 来写。
相关推荐
洛卡卡了2 小时前
从单层到 MVC,再到 DDD:架构演进的思考与实践
架构·mvc
乌恩大侠3 小时前
O-RAN Fronthual CU/Sync/Mgmt 平面和协议栈
5g·平面·fpga开发·架构
木宛哥9 小时前
代码背后的智慧:20条编程感悟
java·后端·架构
58沈剑17 小时前
80后聊架构:架构设计中两个重要指标,延时与吞吐量(Latency vs Throughput) | 架构师之路...
架构
想进大厂的小王19 小时前
项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
redis·分布式·后端·spring cloud·微服务·架构
阿伟*rui20 小时前
认识微服务,微服务的拆分,服务治理(nacos注册中心,远程调用)
微服务·架构·firefox
ZHOU西口21 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
deephub1 天前
Tokenformer:基于参数标记化的高效可扩展Transformer架构
人工智能·python·深度学习·架构·transformer
架构师那点事儿1 天前
golang 用unsafe 无所畏惧,但使用不得到会panic
架构·go·掘金技术征文
W Y1 天前
【架构-37】Spark和Flink
架构·flink·spark