我有我创建模型的存储库模式。我想每次创建模型时都调用事件,我应该从控制器还是从存储库中调用?如果我在存储库模式中这样做,我会打破单一责任原则吗?这是我的代码示例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
.
该服务将实现一个工作流,如下所示:
在数据库中创建关系(使用您的存储库)
向新朋友发送通知
计算新的好友推荐(“你可能也认识这个人”)
...
然后,该服务可以充当控制器和存储库之间的某种“中间件”。这里的好做法是,服务只实现工作流,而不直接实现业务逻辑。
暮色呼如
TA贡献1853条经验 获得超9个赞
为了尊重单一职责原则,您可以使用观察者类Eloquent Observers。
当您执行 Eloquent 操作(例如created
和deleted
关于您的用例)时,Laravel 会“自动”调用它的方法
- 2 回答
- 0 关注
- 166 浏览
添加回答
举报
0/150
提交
取消