我们公司现在在用Laravel开发项目,同时还增加了Biz层和Repositories层,来实现业务逻辑封装,反而model里面什么代码都没有。
在Controller里写代码的时候,尝尝困扰我的问题是如果复用Biz对象,Repositories对象和Model对象。
以前用Yii开发项目的时候,有一个工厂模式,所以调用Model的时候,基本都不new,都是字节用 XXX::model() 来调用的,一个对象被new一次就够了,能有效节省内存。
Controller代码:
$productModel = Product::model()->getList('xxxxxxxxx');
多简单,有没有?
Laravel里,Model好像没有工厂,要调用,都需要实例,假如Repositories里面封装了5个方法,每个都使用了Model,那么我在Controller里调用了这5个方法,Model就被new了5次。
目前在网上看到一种办法,就是在Repositories的构造函数里注入Model对象,放在Repositories的私有成员变量里,这样5个方法都调用当前类的私有变量就可以了。但使用起来就麻烦了,在Controller里写代码的时候,需要这样写:
$xxxBiz = new XXXBiz(\xxx\xxx\Repositories);
在Repositories里需要这样写:
$xxxRepositories = new XXXRepositories(\xxx\xx\xxxModel);
在new一个Biz的时候,还必须传入Repositories对象,而且命名空间还老长,我基本都是在拼字符串了,写代码效率超低,还要打开这写文件,去把名字拼出来。
想问一下大家在用Laravel开发项目的时候,是如何解决Model这种逻辑层类复用的情况?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
我司是继承一个BaseRepository,BaseRepository中定义
CouponRepository中
Biz中类似,继承一个BaseBiz,然后方法这么写
Controller中调用
Controller ---> Biz ---> Repository
我是这么做的,在底层 model 里建立这个函数
修改bootstrap/app.php 和 AppServiceProvider.php
具体参考 Service Provider
在controller 里调用 Foo::load() 就可以了