为了账号安全,请及时绑定邮箱和手机立即绑定

从 Laravel 中的 Repository Pattern 调用事件可以吗?

从 Laravel 中的 Repository Pattern 调用事件可以吗?

PHP
一只斗牛犬 2021-11-13 19:10:11
我有我创建模型的存储库模式。我想每次创建模型时都调用事件,我应该从控制器还是从存储库中调用?如果我在存储库模式中这样做,我会打破单一责任原则吗?这是我的代码示例class FriendshipRepository implements IFriendshipStorageRepository{    public function create(User $user, User $follower): Friendship    {        $friendship = Friendship::create([            'user_id' => $user->id,            'follower_id' => $follower->id        ]);        event(new FriendshipCreatedEvent($friendship));        return $friendship;    }    public function destroy(User $user, User $userToUnfollow)    {        $friendship = $user->getFriendship($userToUnfollow);        $friendship->delete();        event(new FriendshipDeletedEvent($friendship));    }}或者我应该在控制器和存储库之间多做一层?新层将使用存储库和调用事件,但控制器只会调用该新层。
查看完整描述

2 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

我喜欢将服务用于此类用例。您的控制器可以调用NewFriendshipService.

该服务将实现一个工作流,如下所示:

  • 在数据库中创建关系(使用您的存储库)

  • 向新朋友发送通知

  • 计算新的好友推荐(“你可能也认识这个人”)

  • ...

然后,该服务可以充当控制器和存储库之间的某种“中间件”。这里的好做法是,服务只实现工作流,而不直接实现业务逻辑。


查看完整回答
反对 回复 2021-11-13
?
暮色呼如

TA贡献1853条经验 获得超9个赞

为了尊重单一职责原则,您可以使用观察者类Eloquent Observers

当您执行 Eloquent 操作(例如createddeleted关于您的用例)时,Laravel 会“自动”调用它的方法


查看完整回答
反对 回复 2021-11-13
  • 2 回答
  • 0 关注
  • 166 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信