laravel 将所有model设置成单例,这么做的意义

最近二开一套源码,作者将所有model在provider注册为单例,然后所有数据库操作调用这个service,使用query链式操作

不是很明白这样做的意义

我猜测这么做的理由是:

  • 为了使开发者把控sql的具体实现,而不依赖laravel自动生成的sql结构
  • 性能考虑

有没有人了解这么做的原因?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 11

平时使用的数据库模型,基本用的是静态方法,注册单例不知道有什么意义

6个月前 评论

发出来观摩一下

6个月前 评论

减少引用吧,直接注册后用就直接用,不用再去use下再用。估计java写多了

6个月前 评论

这样其他地方依赖注入的时候注入的就不是模型实例的名字, 而是服务提供者哪里注册的名字。 获取到的实例也服务提供者绑定的实例。这样重构的时候可能有好处,比如一开始管理员和用户用的一个模型,但是服务提供者分别注册了Admin 和 User, 业务逻辑用的也是这俩。 后来拆分了,只要改服务提供者就行,不用改代码了。 我想到的就是这样, 我没这么写过。

6个月前 评论
徵羽宫 (作者) 6个月前
徵羽宫 (作者) 6个月前
JaguarJack

可以负责任的告诉你没有意义!

6个月前 评论

感觉没什么意义,甚至可能还会影响性能,即便是懒加载,也要注册上去啊,占内存,占性能,可能纯粹个人爱好或者奇淫技巧~

6个月前 评论

这个要看场景,常规fpm注册单例没有问题,因为程序在执行的时候永远只能有一个逻辑在跑

6个月前 评论

其实仔细看下 laravel 文档服务容器的示例。就是不直接使用 UserModel 而是注入了一个 UserRepository。 服务容器《Laravel 10 中文文档》

然后服务提供者哪里绑定服务容器也不一定都是单例的啊, 也是有基础绑定不是单例的情况的。 服务容器《Laravel 10 中文文档》

6个月前 评论
徵羽宫 (作者) 6个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!