我正在Laravel中实现一个存储库模式,并对实现有疑问。
例如,我可以让UserRepository
类的方法遵循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
如果通过posts
调用Eloquent
关系,是否违反了存储库模式?
拥有"真实"存储库模式意味着处理通过User
模型加载的所有可能的关系?
答案 0 :(得分:2)
保持干燥。在这里,您只需复制Eloquent已经提供的大量代码。
但是,如果调用更复杂并且您不想在整个代码库中重复逻辑,则可以使用RepositoryPattern。
即
public function clientContact($clientId) {
return \Auth::user()->manager()->superBoss()->company()->clients()->where('client_id', $clientID)->primaryContact()->firstOrFail();
}
在这种情况下,它是有道理的。
但是如果您想要经过身份验证的用户的帖子,那么只需使用雄辩的关系。
$posts = \Auth::user()->posts()->get();