0x0 洋葱模型
洋葱模型这个词是我上这门课才第一次听说的,很感兴趣于是准备深挖一下。
老师所讲的洋葱模型说是把业务逻辑和通用逻辑分开。
看到这句话用Java和Spring的同学应该会觉得很熟悉,这说的是不是AOP?
AOP主要的应用场景也是在:日志记录、性能统计、安全控制、事务处理、异常处理。
结合后续老师所讲的中间件链式调用的思想,我们就可以得出一个结论
洋葱模型就是Golang用中间件实现AOP的一种思想。
0x1 AOP(面向切面编程)
AOP(Aspect Oriented Programming) 是将各个动作之间的阶段看作一个个切面,往切面添加操作,实现通用逻辑与业务逻辑的解耦。
OOP或者面向过程的写法都是在需要的地方添加操作,比如我希望RequestBody在传入之前对当前用户进行权限检测,但是对每个Controller的方法都写一段重复的权限检查代码违反了DRY原则,但是OOP的处理方式只能是为每个Controller添加一个权限检查对象,而权限检查对象类需要继承父类,还是会需要耦合。
但是如果将调用Controller方法前看作一个切面,将权限检查以动态代理等方式执行,则可以对每个方法复用。
这就是AOP的一种常见的场景。
洋葱模型则是结合了AOP的思想以及链式调用,把通用中间件作为切面需要的通用逻辑传入,再通过链式调用进入业务逻辑。