Laravel存储库模式合同

时间:2014-02-07 14:36:54

标签: php design-patterns laravel laravel-4 repository-pattern

我正在尝试使用Laravel实现存储库模式。我可以理解使用接口来抽象数据存储的好处。

但是接口中定义的方法返回的对象呢?它们是否也应该在某种抽象类中定义?

例如:

class UserRepository implements UserInterface {
    protected $user;

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

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

在我的控制器中执行此操作:

$user = UserRepository::find(1);
$user->name
我打破了设计模式吗?

1 个答案:

答案 0 :(得分:6)

简短回答:是的。

答案很长:根据Dependency Inversion Principle,你总是要依赖于抽象而不是结核。如果有一天您需要更改该模型的实现,您将不得不更改该存储库类,也违反Open-Closed Principle