存储库模式 - 存储库可以包含除核心CRUD之外的逻辑

时间:2016-03-03 00:47:40

标签: php laravel repository-pattern

所以我理解存储库模式的使用有多种原因,其中之一是抽象与数据源的交互。

我的问题是存储库方法应该是多么简单或复杂。存储库纯粹是为了抽象CORE方法,例如获取,设置,更新,删除数据源,或者可以向存储库添加非常小的方法,如getCountOfUsersThatAreDisabled。好吧,我的意思是这样的方法适合图片,或者我应该将它们放在存储库类之外。

// Laravel Example    

protected $user; //

public function __construct(User $user){
     $this->user = $user;
}

public function getCountOfUsersThatAreDisabled(){
     $this->user->where('disabled', 1);
}

public function find($user_id){ 
     return $this->user->find($user_id);
}

1 个答案:

答案 0 :(得分:0)

你的方式很好,将你的模型交互存储在存储库中是完全可以的,事实上,这绝对是应该的方式。

但是从你的方法开始:

public function getCountOfUsersThatAreDisabled(){
     $this->user->where('disabled', 1);
}

我更喜欢缩短方法名称,并将where-method参数添加为主方法参数。

public function getCountOfUsers(array $where=["disabled", 1]){
     call_user_func_array([$this->user, "where"] , $where);
}

这样你的方法更具可读性和更通用性,你也可以将它用于不同的WHERE值,即使你想将更多的2个参数传递给where方法(例如:$ where = [“id”,“ >“,100])。

希望这有帮助。