关于在Laravel中为每个模型创建存储库

时间:2014-06-18 20:45:42

标签: laravel repository

我刚刚开始学习laravel存储库,很快就出现了一个关于存储库和模型的问题。

假设我在app/models目录中有20个模型。如果我想在切换ORM时让我的应用程序更灵活,这是否意味着我需要制作20个不同的存储库?我什么时候应该选择创建存储库?

1 个答案:

答案 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.)

一般来说,对于除了最简单的应用程序之外的所有应用程序,我认为存储库模式是值得预先支付额外费用的,并且您的工作是帮助利益相关者理解,从长远来看,维护成本会大大降低,测试和改变。