Egg 框架模型简述 (一)
简单的骨架认知
1-1. 简述
1-2. 简单层级关系
1-3. 路由(Router)
1-4. 内置对象(Router)
1-5. 配置(Config)
1-6. 中间件(MiddleWare)
1. 简述
egg.js是基于koa为底层,由阿里nodejs团队封装的企业级Web应用解决方案,以约束和规范化团队开发,帮助开发团队和开发人员降低开发和维护成本为核心设计理念的优秀解决方案。
官方文档对 egg.js 的阐述极致细致,撰写本文的目的仅仅是对 Egg 的整体结构做一个简述,以引导学习为主要目的。
P.S. 本文示例代码部分使用 TypeScript 进行编写,因此所有源码文件都以 .ts 作为扩展名。
MVC(Model View Controller)是一种软件设计模式,一种以“展示界面、业务逻辑、数据模型”分离的方法组织代码,将业务设计打散分离,以便实现高可复用性,及可维护性。
早些年的项目中,Controller层级中需要处理的事情非常之多:接受用户请求、验证请求有效性、计算或发送请求至Model抓取数据或修改、计算响应数据、返回响应数据等。
image
随着一些项目逐渐庞大,这样的设计造成了同一文件(或函数)的代码剧增,可维护性降低。同时,有一些可公用的业务操作也急需单独提取,因此形成了独立的业务层,分化了Controller部分。
image
至此,形成了常见的软件设计层次结构的主线路:
View:作为用户的 视图表现 部分,常见的展示形式如浏览器作为载体的网页、原生APP应用界面、桌面应用界面等,用于提供用户界面以便收集、响应用户行为产生的数据;
Controller:作为 控制器层 部分,控制用户界面(View)的数据流转途径,主要行为包含接收用户数据请求、发送请求至业务层(Service)、获取业务层(Service)数据响应,将响应数据发送至用户界面(View),或生成相应的模板界面发送至用户;
Service:作为 业务处理层 部分,主要负责收集及对数据进行相应的运算处理,主要行为包含收集控制器请求数据、数据有效性验证、运算、请求数据模型(Model)、接收数据模型(Model)响应消息、响应结果至控制器等;
Model:作为 数据模型层 部分,主要用于将数据持久化(OUT)、查询持久化数据(IN),常见行为如对数据库进行操作、缓存数据库数据等;
// 这是一个 egg 项目的目录结构
├─ app
│ ├─ controller
│ │ └─ home.ts
│ ├─ service
│ │ └─ home.ts
│ └─ model
│ └─ user.ts
3. 路由(Router)
路由主要用于对数据流向进行指引,并处理请求转发。生活中常见的就是家用的路由器:
image
在Web应用进行前后端交互的过程中,路由亦起到了通过URL地址定位控制器函数的作用,当然,更准确的说法应该是定位静态资源(无论是接口数据、页面、图片等其他文件)。如假设 app/controller/home.ts 中存在函数 a() 和函数 b(),我们约定了跳转 http://luv-ui.com/a 则执行函数 a();跳转 http://luv-ui.com/b 则执行函数 b()。这是Web应用中的控制器-路由的常见表现手段。
在JAVA项目中,常见的路由表现手段例如
在XML配置文件中对路由进行统一描述:
/aa.jsp
/bb.jsp
在JAVA控制器文件中以注解的形式进行单独描述:
@RestController
@RequestMapping("/home")
public class HomeController {
@RequestMapping(value = "/aa", method = RequestMethod.POST)
public Message aa(){
// do somethi