课程名称:NestJS 入门到实战 前端必学服务端新趋势
章节名称:第6章
讲师姓名:Brian
课程内容
本章节将Nest的编程思想
以前端同学的视角看后端项目
前端同学的知识图谱
- 语言
- HTML
- CSS
- JS
- 自动化
- Webpack
- CI、CD
- git、npm
- 框架
- React、Vue
- jQuery
- Bootstrap
- 环境
- 浏览器
- 小程序
- 混合&原生
后端同学的知识图谱
- 语言
- Java、Go
- PHP、Python
- JavaScript
- 自动化
- CI、CD
- Docker、K8s
- Maven、gradle
- 框架
- SpringBoot
- SpringCloud
- Dubbo、Mybatis等
- 环境
- 各种服务器
- 集群
- 云、虚拟机
前端看后端:
API:编写逻辑→Web服务(RESTful API、日志统计、安全+性能、权限控制)→数据库(数据库服务、数据校验、数据备份)
编程思想
OOP、FP、FRP代表着编程的范式
函数式编程和面向对象式编程
函数式编程
- 确定的数据输入、输出;没有“副”作用,相对独立;
- 引用透明,对IDE友好,易于理解;
- 如今主流的Vue、React中的书写方式;
面向对象编程
- 抽象现实生活中的事物特征,对于理解友好
- 封装性(高内聚低耦合)、低继承性、多态性
- Java、C#典型的面向对象的编程语言
函数式响应编程
- 适合需要对事件流进行复杂组合应用的场景
- 响应式多用在异步的场景
- 典型案例:rxjs,广告推荐
AOP特点
- 扩展功能方便,不影响业务之间的逻辑
- 逻辑集中管理
- 更有利于代码复用
AOP能在不破坏封装功能的前提下,额外增加功能
依赖注入和控制反转
IoC是一种思想&设计模式
DI是IoC的具体实现
export interface Phone {
playGame: (name: string) => void;
}
export class DIStudent {
constructor(private name: string, private phone: Phone) {
this.phone = phone;
this.name = name;
}
getName() {
return this.name;
}
setName(name: string) {
this.name = name;
}
play() {
this.phone.playGame(this.name);
}
}
控制反转:是一种面向对象编程中的一种设计原则,用来减低计算机代码之间的耦合度,其基本思想是:借助于“第三方”实现具有依赖关系的对象之间的解构。
依赖注入:是一种用于实现IoC的设计模式,它允许在类外创建依赖对象,并通过不同的方式将这些对象提供给类。
Nest架构
Nestjs核心概念:
- Controller层负责处理请求、返回响应
- Service层负责提供方法和操作,只包含业务逻辑
- Data Access层负责访问数据库中的数据
使用Module来组织应用程序
- @Module装饰器来描述模块
- 模块中有4大属性:imports,providers,controllers,exports
用积木来理解模块:分开是独立的,组合在一起又是一个整体。高内聚,低耦合,减少重复代码,提升代码可维护性
功能模块、共享模块、全局模块、动态模块
- 功能模块与共享模块是一回事,只是叫法不一样
- 全局模块通常应用在配置、数据库连接、日志上
- 动态模块是在使用到模块的时候才初始化(懒)
Injectable装饰器后面会讲,这里理解成一个函数用于实例化AppService,并利用IoC思想,供其他方法使用
课程收获
了解到了Nest大致的架构,尤其是生命周期部分,感觉比Egg的可操作性大很多!