写点什么

数字化转型与架构 - 架构设计篇|软件开发框架帮我们做了什么?

作者:数字随行
  • 2023-09-26
    北京
  • 本文字数:2185 字

    阅读完需:约 7 分钟

数字化转型与架构-架构设计篇|软件开发框架帮我们做了什么?

  层次式架构是软件开发过程中最常使用的一种架构形式,其中 MVC 更是其中最经典的一种模式。框架是架构模式的技术实现,我们先了解 MVC 模式,再讲述模式对应的框架。


  MVC 模式把系统拆分成三个核心模块:模型(Model)、视图(View)和控制器(Controller)。应用程序运行过程中每次输入、处理、输出的流程,抽象成一个固定执行流程:从视图到控制器再到模型的顺序。


视图(View):用户进行交互的界面。视图向用户展示数据及操作界面,允许用户通过界面对系统提交数据和操作命令。视图层不进行任何的业务处理,但可获取模型中数据的情况。


控制器(Controller):控制器作为视图和模块的中间层,发挥着承上启下的作用,与上下两层共同完成用户的指令。控制器将视图层传来的数据进行解释,根据用户的操作识别出模块中对应的接口并进行调用。模型返回的结果数据由控制器调用适当的视图展示给用户。


模型(Model):应用程序实现业务逻辑和存储业务数据的部分。一个模型可以为多个视图提供数据,模型提供的数据可以是视图中的全部数据也可以是视图中一部分数据。


MVC 模式示意图

 

  在 HTML1.0 时代,B/S 架构模式的软件系统,S 端服务器程序采用 MVC 模式的架构设计。B 端展示的内容是 S 端服务器程序生成的 View。进入 HTML2.0 时代,浏览器中的网页代码与提供数据的后端服务器程序已经完全分离,前端浏览器作为 View 层无法直接访问后端服务的 Model 层。B/S 架构的系统从本质上已经变成了 B(C)/S 架构,整体架构由 MVC 模式演化为 MVP 模式。V 层由前端 Web 程序实现,M 层由后端服务器实现,而 P 层由前后端分别实现其中的一部分。


  MVP 模式与 MVC 模式相似,但是 View 层不再和 Model 层进行交互,都需要通过 Presenter(同 Controller)层进行处理。MVP 模式已经成为标准的分层架构,不再出现从上层穿透到下次的情况。


MVP 模式示意图

 

  前端为了更好的处理整体系统中 V 和 P 层的关系,演化出 MVVM 模式。国内大量使用的 VUE 框架是 MVVM 模式的 web 框架,微信小程序的框架也是采用相同的思路。之前 UI 界面开发多采用事件模式的开发框架。数据发生更新时,需要编写代码手动改变 View 层中具体控件的属性,再由框架完成界面的渲染。MVVM 通过把控件属性和变量进行双向绑定,只需要改变被绑定的变量,由框架自动刷新 Dom 树完成控件属性的更新和界面的渲染。MVC 模式,帮我们修好了各个模块之间的道路,需要我们自行通过。MVVM 模式,不仅修好了道路,还提供了“道路上穿梭的车辆”。


MVVM 模式示意图

 

  后端服务程序为了更好的处理整体系统中 P 和 M 层的关系,演化出“CSM”三层模式。使用框架开发后台数据接口也多是根据这三个层级进行编码开发。


服务控制器(Controller)是服务之间的纽带,通过串联多个服务层的功能实现业务流程。控制层对外表现为最基础的业务功能单元。


服务(Service)是实现业务过程的各种业务功能单元和软件功能单元。服务通过对服务控制器层提供接口、事件或其它契约实现交互。服务的价值在于代码逻辑的复用,当业务流程变更时,只需要重新编排控制器层的逻辑就可实现业务流程。


业务对象(Model)存储业务相关的属性数据。


“CSM”模型示意图

 

  “CSM”三层模式和 MVP 三层模式十分相似都是典型的分层架构,只是层级略有不同。至此一个后端服务框架的架构模型已经确定,可以开始关注技术实现的细节。


  框架考虑的第一个技术因素是开发语言,但框架选择语言和软件系统选择语言的标准完全不一样。软件系统需要考虑开发语言的各种特性,包括:编程范式、执行性能、内存管理等。框架只需要考虑,开发的框架给哪种语言使用。


  框架考虑的第二个技术点是并发模型,并发模型分为:单进程、多进程和多线程三种。并发模型受系统和语言的限制,例如,现在 PHP 语言仍然不支持多线程模型。并发模型的选择也与业务特性息息相关,例如,Redis 通过单进程仍然可以支持很高的并发性呢。


  框架考虑的第三个技术点是网络 IO 模型,网络 IO 模型分为:BIO 同步并阻塞模型、NIO 同步非阻塞模型、AIO 异步非阻塞模型。采用容器技术的 Java 语言,网络 IO 模型内置在 Java 容器而不是在框架之中。目前多采用 NIO 模型与多线程并发模型的组合,适合高并发情况下并行处理业务。


  框架考虑的第四个技术点是网络传输协议,网络传输协议分为:TCP 和 UDP 两种。音视频数据传输多采用 UDP 协议,其它类型的应用则采用 TCP 协议。


  框架考虑的第五个技术点是网络应用协议,网络应用协议分为:HTTP、FTP、SMTP 等。受互联网时代浪潮的影响,Web 应用和移动应用的新体系,可以适配多种平台的 HTTP 协议也成为了公认的通用协议


框架外部环境技术示意图

 

  至此框架处理完成了外部运行环境相关的所有技术点,开始解决程序内部的运行流程。框架通过泛化技术,让业务接口的实现类按照框架类设定好的模式进行编码及调用顺序运行。框架使用注册器和工厂模式,在不改动框架代码的情况下把对外接口和业务实现类进行调用绑定。框架最基础的功能已经完成,像 Spring 框架的注解能力还需要容器帮助实现,才能完成实例生命周期、事务等程序运行时的逻辑处理。


框架示意图


  框架向一个自动化的工厂,每一个服务接口都是一条流水线,把请求按照规划好的路线送到适当的位置进行处理和加工。但是当我们在开发的过程中,把注意力都集中到一个个接口的时候,我们就很容易从面向对象编程退化到对数据库表的面向过程编程。选用合适的框架可以大幅提升开发效率,但是我们也需要避免框架使用产生的误导

 

发布于: 刚刚阅读数: 4
用户头像

数字随行

关注

数字随行,共同探索数字化时代的无限可能。 2018-04-26 加入

分享数字技术、实践方法及思考感悟,探索技术的本质和发展趋势。

评论

发布
暂无评论
数字化转型与架构-架构设计篇|软件开发框架帮我们做了什么?_数字化转型_数字随行_InfoQ写作社区