Laravel中使用Repository层必要吗?
有人说很多开源项目都用,
有人说作者说不用,所以从laravel5开始就删除了Repository文件夹,就在控制器中完成就好。
github上还专门有个名字叫l5-repository的包。
大家说说。
Laravel中使用Repository层必要吗?
有人说很多开源项目都用,
有人说作者说不用,所以从laravel5开始就删除了Repository文件夹,就在控制器中完成就好。
github上还专门有个名字叫l5-repository的包。
大家说说。
首先,得自己理解Repository是干什么的。我的理解是,Repository就是model的一个“代理”。为什么需要代理?因为有时会有这样的场景:某些数据本来是存储在mysql中的,但是因为业务调整我想用mongodb存储这些数据。这个时候我可能需要在控制器层或者逻辑层中修改大量的代码。如果我使用了Repository,那么就相当于在控制器层和模型层中间又加了一层。他们之间的关系如下图:
我拿你提到的l5-repository举个例子
在这里有个model方法,它决定了当前的repository为哪一个具体的model做“代理”。在这里他是为"App\Post"做代理。我们在repository中做的任何操作最后都会转化为对"App\Post"的操作。假如App\Post是一个ORM,此时我想改为用MongoDB存储怎么办?很简单,新建一个类App\Repository\Post,然后在这个类中用Mongodb实现App\Post中的所有方法并修改repository 的 model方法为
return App\Repository\Post
就ok了。你会发现这样做会很简单,根本不会修改controller中的任何逻辑。
因此repository的应用场景是:当我们的模型存在更换种类的时候(比如从mysql改为MongoDB)使用。如果你的model不会改变(比如一直是mysql),那么就没有必要使用。
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答569 阅读✓ 已解决
784 阅读
这得看项目而定,小型项目或者各模块相互独立的项目可以不用Repository层,模块业务复杂又相互交错的项目则需要。
我觉得跟ThinkPHP的Logic层有点像,试想下,当控制层多个类的方法都需要调用到相同的一段业务逻辑的时候,你会把这段业务逻辑放哪里,这时Repository就起作用了。