这个问题说我想知道在laravel中使用存储库模式是好事还是不行,因为我在laravel和此处的其他一些地方使用了Eloquent
https://www.dunebook.com/brief-overview-of-design-patterns-used-in-laravel/3
所以这是上述链接的示例:
interface UserRepository {
public function all();
}
和仓库
use User;
class EloquentUserRepository implements UserRepository {
public function all()
{
return User::all();
}
最后进入控制器:
User::find($id)
提供了使用存储库模式的建议,并且我觉得它在代码中有点重复。任何可从??获得提示的帮助或来源
答案 0 :(得分:0)
存储库模式正在执行以下操作:
在控制器中调用User::find($id)
的部分(我认为这是一个错误,因为您在存储库中编写了all
函数是您应该在控制器上使用的功能)
我已经在Laravel上完成了存储库模式的一些实现,并且已经做到了。您唯一没有提到的事情,但是我想您也做得很好,就是使用Laravel ioc容器将接口绑定到EloquentUserRepository实现,因此,每次您请求接口实例时,它都会用雄辩的实现实例自动解决。
实际上,您似乎在重复代码,但实际上并非如此,有时存储库模式可能不适合今天的需求,因此您似乎只是在给代码添加不必要的复杂性。在我们的案例中,我们开始使用存储库模式来编写应用程序,但没有利用它,因此我们只是在编写不必要的复杂性层,当我们意识到摆脱了它并决定直接使用模型后,在某些情况下,我们开始再次需要它,因此我们再次实施了它,正如我所说,这完全取决于您当时的需求。
使用此模式最常提及的需求是可以轻松更改ORM,但就我们而言,这从未发生过,老实说,似乎没有发生。但是,拥有存储库的一个有用的用例如下:假设您有一种算法,例如,计算具有以字母 a 开头的用户名的用户数,理想情况下,您将不会实现此功能在您的框架项目上,但是在一个单独的项目上,这样您就可以独立测试并重用它。简而言之,要计算以 a 开头的用户名,您实际上不需要知道您的项目是Laravel项目,Codeigniter项目,Eloquent,Redis还是用Excel文档,您需要知道的是它可以为您提供所有用户,这就是为什么有一个用户存储库界面很有用的原因,您的算法只会说“我需要所有用户”而不会在意还有什么。