写一个 Web 框架需要做什么?
1 引言
1.1 JavaWeb 经典三层框架
1.2 MVC/MTV 设计模式
2 实现
2.1 第一层解耦 (WSGI):通过网关协议,实现 Web 服务器和 Web 应用程序的可插拔性
2.2 第二层解耦 (C):通过路由系统,实现 http 请求和 http 应答之间的解耦
2.3 第三层解耦 (V):通过模板引擎,实现数据和模板之间解耦
2.4 第四层解耦 (M):通过 ORM 操作数据库,实现数据层的灵活操作
3 核心组件
1 引言
1.1 JavaWeb 经典三层框架
Web 三层架构是将后台应用分为:表现层,业务逻辑层,数据访问层
表现层(UI):展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
业务逻辑层(BLL):针对具体问题的操作,对数据层的操作,对数据业务逻辑处理。
数据访问层(DAL):直接操作数据库,针对数据的增添、删除、修改、查找等。
1.2 MVC/MTV 设计模式
python 的 MVC 和 java 的一样,分别是 Model、View、Controller,也就是我们通常说的模型 (model)-视图 (view)-控制器 (controller),分别对应着数据库、模板文件、业务处理。
MTV 分别是 Model、Template、View,分别对应的是数据库、模板文件、业务处理,python Django,用的就是 MTV 模式
2 实现
(1)抽象出代码中共同的部分,实现代码重用,降低编程的难度。
(2)解耦合,将 web 编程模块化,使得能像积木一样灵活组合。
2.1 第一层解耦 (WSGI):通过网关协议,实现 Web 服务器和 Web 应用程序的可插拔性
通过 WSGI, 即可以使 web 服务器和 web 应用框架可以实现自由组合。
于是就提出了网关接口,主要接口协议有 CGI,FastCGI,WSGI,Java 的 serlet 等。
2.2 第二层解耦 (C):通过路由系统,实现 http 请求和 http 应答之间的解耦
web 框架通过建立 url 与 handler 函数之间的映射关系(即路由系统),输入 http 请求,调用相应的 handler 函数,输出对应的 http 响应。
通过实现路由系统,我们可以自由的绑定 url 和 handler 函数,从而灵活的进行修改。
2.3 第三层解耦 (V):通过模板引擎,实现数据和模板之间解耦
尽管现在大趋势为前后端分离,通过 json 传递数据,但是模板还是一个 web 框架常见的组成部分。
通过向模板中填充数据来生成动态页面,就可以通过不同组合生成不同的页面,使得代码重用性和灵活性大大提高。
不过还是推荐使用前后端分离 :-)
2.4 第四层解耦 (M):通过 ORM 操作数据库,实现数据层的灵活操作
通过使用 ORM 避免了直接写 sql 语句的麻烦和可能产生的错误,使用对象模型来表示表,可以更加清晰的表示逻辑。
ORM 的原理,通过就是将一个数据库客户端进行封装,然后通过调用方法,生成 sql 语句,对数据库进行操作。
3 核心组件
Last updated