一个切实可行的复杂系统势必是从一个切实可行的简单系统发展而来的。从头开始设计的复杂系统根本不切实可行,无法修修补补让它切实可行。你必须由一个切实可行的简单系统重新开始。
--盖尔定律
一、应用层设计:提供合理的API
可理解性:如 ctx.Body(),ctx.GetBody()不要用 ctx.BodyA()
简单性:如 ctx.Request.Header.Peek(key)/ctx.GetHeader (key)
二、中间件设计:洋葱模型
app.use((ctx, next) => {//中间件1
console.log('hello world1')
next()
console.log('hello world2')
})
app.use((ctx, next) => {//中间件2
console.log('hello world3')
next()
console.log('hello world4')
})
执行结果: hello world1、hello world3、hello world4、hello world2
执行步骤:
- 执行第2行 中间件1的console.log('hello world1');
- 执行第3行,中间件1的next(),执行下一个中间件2的app.use(第7行);
- 执行第8行,中间件2的console.log('hello world3');
- 执行第9行,中间件2的next(), 执行下一个中间件(无);
- 执行第10行,中间件2的console.log('hello world4');
- 结束中间件2;
- 接着执行中间件1
- 执行第4行,中间件1的console.log('hello world2');
- 结束中间件1.