我有我創建模型的存儲庫模式。我想每次創建模型時都調用事件,我應該從控制器還是從存儲庫中調用?如果我在存儲庫模式中這樣做,我會打破單一責任原則嗎?這是我的代碼示例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 關注
- 208 瀏覽
添加回答
舉報
0/150
提交
取消