UI层:PageModel / MVC / MVVM / 管道 & 中间件

更多
2022年01月15日 14点40分 作者:叶飞 修改

Web开发模式

以下内容,对小白而言略有抽象,既可以作为预习,也可以作为复习。

没有模式

HTML标签和和(验证、跳转、运算、if...else等等的)逻辑代码都全部直接写在(.jsp/.php/.asp)页面上。

演示:jsp页面代码

Page-Model

这是飞哥自己取的名字(毕竟在那个年代,也没有谁想到过“模式”),其特点是:请求直接到达页面(Page),但表现和逻辑相分离:

  • (.jsp/.php/.asp)页面上只有和呈现相关的简单逻辑,比如:循环的展现列表内容,哪部分内容显示哪部分不显示……
  • 复杂的逻辑,比如:验证、运算、连接数据库等,由页面相应的、单独的类/对象处理

演示:JSP+JavaBean 或 ASP.NET WebForm/RazorPages

MVC

在Page-Model的基础上,将Model进一步拆分:

  • Model:模型,只作为数据容器(Data Transfer Object)使用
  • Controller:负责逻辑预算。

另外一个区别:请求不再直接到达Page,而是Controller,所有这时候Controller居于中心地位,而不是页面,页面也被称之为View(视图)。

但从url到controller,比如:/Code/261需要由CodeController处理,这中间一般都需要一个转换/映射,这个工作被称之为:route(路由)或者dispatch(分发)

演示:SpringMVC(Java)和ASP.NET MVC(C#)

MVVM

Model View ViewModel,其实就是用ViewModel替代了Controller。

ViewModel相比Controller最大的不同,就是能够在View和Model之间自动同步更新!即:

  • 如果Model发生了改变,自动更新View;
  • 如果View上Model绑定的元素发生了变化,自动的更新Model

在传统的B/S架构中,这其实是很难实现的,因为View在客户端浏览器上,Model在服务器端,相距过于遥远。直到Ajax问世,前后端分离……

所以是前端框架,比如:vue.js、react.js等采用了这种模式。

其他

组件(component)化:把页面切分成一个一个的组件(部分),甚至页面本身,也可以看做一个组件。

组件必然就有一个从无到有,再从有到无的过程,这个过程就被称之为组件的生命周期(life-cycle)

管道(pipeline)中间件(middleware:将HTTP请求从到达到服务器,到响应生成的整个过程想象成穿越一个管道,管道中可以预置/自定义配置一个一个的中间件。

开发人员可以:

  • 使用组件,实现最大限度的重用;
  • 利用生命周期中暴露的“可插拔事件/方法”等为组件添加逻辑,更进一步的重用组件。比如,在组件初始化(init)的时候自定义的获取数据,在组件销毁时自动更新数据。
  • 在管道中自定义引入/自定义添加中间件,控制框架对HTTP请求的处理,比如:在请求到达时新开一个数据库连接打开事务,在请求结束时自动的关闭数据库连接,提交事务。



Web项目 UI层 架构
赞: 0 踩: 0

打赏
已收到打赏的 帮帮币

你的 打赏 非常重要!
为了保证文章的质量,每一篇文章的发布,都已经消耗了作者 1 枚 帮帮币
没有“帮帮币”,作者无法发布新的文章。

全系列阅读
评论 / 0

后台开发


其他:WebForm和WebApi

其他ASP.NET框架,如WebForm、WebApi……

RazorPages(Core)

微软推荐的、最新的、基于Razor页面和.NET core的新一代Web项目开发技术,包括Razor Tag Helper、Model绑定和Validation、Session/Cookie、内置依赖注入等……

MVC(Framework)

过去两年间最流行的、基于.NET Framework和MVC模式的ASP.NET MVC框架,主要用于讲解安全、性能、架构和各种实战功能演示……

C#语法

从入门的变量赋值、分支循环、到面向对象,以及更先进的语言特性,如:泛型、Lambda、Linq、异步方法等…………

Java语法

面向过程的变量赋值、分支循环和函数封装;面向对象的封装、继承和多态;以及更高阶的常用类库(集合/IO/多线程……)、lambda等

Java Web开发

分层架构和综合实战

J&C

Java和C#共有的语法

全部
关键字



帮助

反馈