关于 php:Laravel 存储库模式契约 | 珊瑚贝

Laravel Repository Pattern Contract


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

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

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
class UserRepository implements UserInterface {
    protected $user;

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

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

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

1
2
$user = UserRepository::find(1);
$user->name

我是否打破了设计模式?


简短回答:是的。

长答案:根据依赖倒置原则,你总是必须依赖抽象而不是具体。如果有一天您需要更改该模型的实现,则必须更改该存储库类,这也违反了开闭原则。

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


来源:https://www.codenong.com/21630408/

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?