2014-02-07 58 views
2

我想使用Laravel实现存储库模式。我可以理解具有抽象数据存储接口的优点。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 

我我打破了设计模式?

回答

6

简答:是的。

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

+0

谢谢你的回答。 那么为了让我的业务逻辑独立于Eloquent模型,我似乎必须在实现存储库接口的“AbstractedUser”类中抽象用户。所有其他商业实体也一样。 然后我可以扩展这些抽象类并将它们传递给雄辩模型。 我在设计这个吗? – Joyce