我刚刚开始学习laravel存储库,很快就出现了一个关于存储库和模型的问题。
假设我在app/models
目录中有20个模型。如果我想在切换ORM时让我的应用程序更灵活,这是否意味着我需要制作20个不同的存储库?我什么时候应该选择创建存储库?
答案 0 :(得分:1)
这是否意味着如果我想在切换ORM时让我的应用程序更灵活,我需要制作20个不同的存储库?
没有。它不是。您可以使用所有基本持久性功能实现基本存储库,例如find,save,all等。
然后,您可以使用反射来简单地将调用包装到底层模型对象。
class BaseRepository
{
private $type;
public function constructor($type){
$this->type = $type;
}
/**
* all
*
* @return array all the elements from datastore
*/
public function all()
{
$reflectionMethod = new \ReflectionMethod($this->type, 'all');
return $reflectionMethod->invoke(null);
}
}
然后在您的控制器中或您可以使用指定类型初始化存储库的位置,如下所示:
$repo = new BaseRepo('\FullyQualified\ModelNamespace\Model');
var_dump($repo->all());
我应该何时选择创建存储库?
回答这个问题有点毛茸茸。关于编写应用程序时存储库模型的真正价值有很多争论,特别是当你已经从Laravel的模型层中获得了大量抽象时。
我会根据我对几个问题的回答评估是否使用存储库模式:
1. How likely is this app to be a long term project? (The longer you expect the code to be around the more benefit you will gain from using a repository) 2. What level of abstraction is the stakeholder willing to pay for? (Repositories add flexibility, but cost more up front in terms of cost and time.)
一般来说,对于除了最简单的应用程序之外的所有应用程序,我认为存储库模式是值得预先支付额外费用的,并且您的工作是帮助利益相关者理解,从长远来看,维护成本会大大降低,测试和改变。