我正在尝试使用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
我打破了设计模式吗?
答案 0 :(得分:6)
简短回答:是的。
答案很长:根据Dependency Inversion Principle,你总是要依赖于抽象而不是结核。如果有一天您需要更改该模型的实现,您将不得不更改该存储库类,也违反Open-Closed Principle。