课程名称:Node.js+Koa2+MySQL打造前后端分离精品项目《旧岛》
课程章节:第2章 【深入理解KOA】Koa2的那点事儿与异步编程模型
视频:3-2 服务端编程必备思维:主体与模型划分
3-3 多Router拆分路由
课程讲师: 七月
课程内容:
3-2 服务端编程必备思维:主体与模型划分
把所有的路由按照一定的主题拆分,把路由分别写到不同的文件中。
可以根据数据的类型,划分主题(划分的依据之一)。
在旧岛中,主题与主题之间,不是绝对孤立的。
主题划分的过程,是渐进式的;
先找到核心主题,再找到附属在核心主题上的其他主题;
主题是抽象的概念,抽象的概念有助于我们思考;
在代码的层面, 主题 = Model
3-3 多Router拆分路由
业务变更时,要考虑到客户端兼容性,有些用户不升级客户端,要考虑到不能让老版本的客户端出现异常。
服务端支持的版本越多,成本就越高(只支持三个版本就可以了)。
客户端发送api请求时,要携带版本号,可以加在url路径中,或者加在查询参数中,或者加在http的header中。
开闭原则:在变成时,对代码的修改是关闭的,对代码的扩展是开放的。(简单说,就是尽量不要修改代码,而是去扩展代码)
编写javascript代码时主要要避免“循环引用”
//app.js const Koa = require('koa') //导入Koa const book = require('./api/v1/book') const classic = require('./api/v1/classic') const app = new Koa() app.use(book.routes()) app.use(classic.routes()) app.listen(3000)
//classic.js const Router = require('koa-router') const router = new Router() router.get('/v1/classic/latest', (ctx, next) => { ctx.body = { key : 'classic' } }) module.exports = router
//book.js const Router = require('koa-router') const router = new Router() router.get('/v1/book/latest', (ctx, next) => { ctx.body = { key : 'book' } }) module.exports = router
课程收获:
软件工程中,想实现一个功能其实是很简单的,尤其对于web开发来说。写代码的目的不止是为了完成功能,要写出优质的代码。优质代码的特点是别人阅读自己的代码时很省力;好的代码利于维护;好的代码可以提高编程效率。
如果只是堆叠很多router.get(),当业务复杂时,既不利于阅读,也不利于维护,同时编程效率非常低下
好的主题划分,可以让数据库设计变的非常简单。不合理的主题划分,会让数据库设计变得非常复杂。
七月老师非常注重在讲编程知识的同时,讲编程思维,讲知识和知识之间的关系。编程是实践性非常强的工作,学习知识最好的方法是放到项目中。做项目的目的不是做项目,最终要做出来自己的项目,业务承载的是编程知识。明天继续刷后边的课程。