Php Laravel存储库模式契约

Php Laravel存储库模式契约,php,design-patterns,laravel,laravel-4,repository-pattern,Php,Design Patterns,Laravel,Laravel 4,Repository Pattern,我正在尝试使用Laravel实现存储库模式。我可以理解使用接口来抽象数据存储的好处 但是接口中定义的方法返回的对象呢。它们是否也应该在某种抽象类中定义 例如: class UserRepository implements UserInterface { protected $user; public function __construct(Model $user) { $this->user = $user; } public

我正在尝试使用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
我打破了设计模式吗?

简短回答:是的


长句回答:根据《圣经》,你总是必须依赖抽象,而不是具体。如果有一天您需要更改该模型的实现,那么您必须更改该存储库类,这也违反了规则。

谢谢您的回答。因此,为了使我的业务逻辑独立于雄辩的模型,我似乎必须在一个“AbstractedUser”类中抽象用户,该类将实现存储库接口。所有其他商业实体也是如此。然后我可以扩展这些抽象类,并向它们传递有说服力的模型。我是不是设计过度了?