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();