Laravel 真正的存储库模式
Laravel real repository pattern
我正在 Laravel 中实施存储库模式,并且对实施有疑问。
例如,我可以使 UserRepository
class 具有遵循 Eloquent
标准的方法:
public function create(array $properties)
{
return $this->entity->create($properties);
}
public function update($id, array $properties)
{
return $this->find($id)->update($properties);
}
public function delete($id)
{
return $this->find($id)->delete();
}
然后在我需要对我的用户做某事的地方注入该存储库。
我在这里看到的问题是...例如,当我这样做时,后面会发生什么:
$this->userRepository->authenticatedUser()->posts
如果通过 Eloquent
调用 posts
关系,这是否违反了存储库模式?
拥有 "real" 存储库模式是否意味着处理通过 User
模型加载的所有可能关系?
保持干燥。在这里,您只需复制 Eloquent 已经提供的大量代码。
但是,如果调用更复杂并且您不想在整个代码库中重复逻辑,则可以使用 RepositoryPattern。
即
public function clientContact($clientId) {
return \Auth::user()->manager()->superBoss()->company()->clients()->where('client_id', $clientID)->primaryContact()->firstOrFail();
}
这样的话就说得通了。
但是如果您想要经过身份验证的用户的帖子,那么只需使用 eloquent 关系即可。
$posts = \Auth::user()->posts()->get();
我正在 Laravel 中实施存储库模式,并且对实施有疑问。
例如,我可以使 UserRepository
class 具有遵循 Eloquent
标准的方法:
public function create(array $properties)
{
return $this->entity->create($properties);
}
public function update($id, array $properties)
{
return $this->find($id)->update($properties);
}
public function delete($id)
{
return $this->find($id)->delete();
}
然后在我需要对我的用户做某事的地方注入该存储库。
我在这里看到的问题是...例如,当我这样做时,后面会发生什么:
$this->userRepository->authenticatedUser()->posts
如果通过 Eloquent
调用 posts
关系,这是否违反了存储库模式?
拥有 "real" 存储库模式是否意味着处理通过 User
模型加载的所有可能关系?
保持干燥。在这里,您只需复制 Eloquent 已经提供的大量代码。
但是,如果调用更复杂并且您不想在整个代码库中重复逻辑,则可以使用 RepositoryPattern。
即
public function clientContact($clientId) {
return \Auth::user()->manager()->superBoss()->company()->clients()->where('client_id', $clientID)->primaryContact()->firstOrFail();
}
这样的话就说得通了。
但是如果您想要经过身份验证的用户的帖子,那么只需使用 eloquent 关系即可。
$posts = \Auth::user()->posts()->get();