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

我有我创建模型的存储库模式。我想每次创建模型时都调用事件,我应该从控制器还是从存储库中调用?如果我在存储库模式中这样做,我会打破单一责任原则吗?这是我的代码示例


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));

    }

}

或者我应该在控制器和存储库之间多做一层?新层将使用存储库和调用事件,但控制器只会调用该新层。


一只斗牛犬
浏览 167回答 2
2回答

白衣染霜花

我喜欢将服务用于此类用例。您的控制器可以调用NewFriendshipService.该服务将实现一个工作流,如下所示:在数据库中创建关系(使用您的存储库)向新朋友发送通知计算新的好友推荐(“你可能也认识这个人”)...然后,该服务可以充当控制器和存储库之间的某种“中间件”。这里的好做法是,服务只实现工作流,而不直接实现业务逻辑。

暮色呼如

为了尊重单一职责原则,您可以使用观察者类Eloquent Observers。当您执行 Eloquent 操作(例如created和deleted关于您的用例)时,Laravel 会“自动”调用它的方法
打开App,查看更多内容
随时随地看视频慕课网APP