我有我创建模型的存储库模式。我想每次创建模型时都调用事件,我应该从控制器还是从存储库中调用?如果我在存储库模式中这样做,我会打破单一责任原则吗?这是我的代码示例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 关注
 - 226 浏览
 
添加回答
举报
0/150
	提交
		取消
	