大家是如何在 Laravel 中优雅地使用 cache 和 transaction 的呢?
虽然laravel提供了cache和transaction的API,但是在项目中经常会产生很多的样板代码。针对数据库层的cache,以及可能在数据库层和controller层都会有的事务处理,有没有比较优雅的方式去处理?
目前看到的解决方案有
- 使用repository设计模式,采用类继承的方式,比较流行的library有 andersao/l5-repository 和 rinvex/repository 其中后者能够提供细粒度的cache管理,可以cache query对象。缺点是要写很多的Service类,很多样板代码
- 基于annotation的方式,比如使用laravelcollective的annotations组件, 优势是可以自定义基于model和controller的annotation实现cache和transaction的基于annotation的AOP,缺点就是不够灵活,依赖laravel框架,文档比较简单,估计用的人也很少
- 基于AOP的方式,比较像Java的解决方案 Go!AOP纯php实现,不需要php扩展,但是会写很多的advice,pointcut之类的,对新手来说门槛比较高,这个库在github上的star数也没有过千。
其实作者最想要的就是想python decorator那样的,在函数上标注一个函数就可以自动地在这个函数执行前调用另一个函数,但是目前没有找到类似的解决方案。在这里集思广益一下:sunglasses: