使用Laravel 4,我目前拥有所有存储库的区域,然后将这些存储库绑定到要使用的接口。这一切当前都在工作,我使用标准$this->users->find(1)
方法在我的控制器中访问它们。
在我的用户存储库中,我有了我的model/User.php
类的assignRole(attach)和removeRole(detach)方法。好的,但现在我尝试运行我的种子它使用雄辩的类,例如User::create();
。
问题1:我的种子文件是否也应该使用存储库模式?我没有说过Mongo的经验,但是如果我要转换的话,我也会以同样的方式播种数据库吗?
问题2:我的Auth
驱动程序目前使用了雄辩...所以,如果我也改变了这个怎么办?我应该为我的身份验证创建存储库并实现$this->auth->login($user)
之类的东西。
我真的很困惑何时应该实现存储库接口。 artisan migrate
运行目前创建MySQL数据库的种子文件,如果我想使用Mongo或NoSQL数据库会发生什么?
答案 0 :(得分:0)
好问题。
对每个问题的简短回答是"它取决于"。
使用你的种子 - 如果你严格遵守模式,那么是的,你的种子应该使用存储库模式。然而,对我而言 - 我的种子往往是为了快速,一次性的数据库群和/或用于测试目的,因此使用Eloquent可能没问题。
再次使用你的Auth驱动程序,如果你想严格遵守模式,那么是的,你应该编写一个接口代码 - 但问问自己,你是否真的要改变你的Auth实现未来 - 以及额外的工作/成本是否真的值得。
每个项目在要求,预算方面都是独一无二的,尤其是在项目投入使用后变更的可能性。您只需要评估这些因素并确定每个项目的最佳方法。
答案 1 :(得分:0)
正如Taylor Otwell(作者或laravel )在他的书“从学徒到工匠”中提到的那样,存储库是一种分离关注点和避免脂肪控制器的方式
即,它们用于包含应该应用于业务对象的业务逻辑,从数据库中的数据构造的对象......
所以,如果你问我是否会在我的种子课程中使用这种包装,那么我个人不会,因为播种 - 通常 - 不需要任何商业逻辑,并且,在n中-tiers架构,种子可以被认为属于DATA层。
如果有的话,播种必须应用一些业务逻辑,那么你可能想要这样做。 如果员工的经验不足1年,也许你会阻止某项工资被插入......这种逻辑
我很久以前写了一篇文章,介绍了一个简单的关注点分离场景,以解释我们是否开始使用它。
如果您有兴趣,可以查看@ coderwall