laravel - 类中的 Laravel 责任
问题描述
我有一个关于 Laravel 的项目,需要进行重构。我已经阅读了关于服务提供者和依赖注入的内容并且有一些问题。这是一个简短的结构:user
模型、event
模型、favorite user
模型等。此外,所有模型都有控制器。每个event
都有一个creator
和client
(user
关系)。在每一堂课中,我都在注入适当的服务:User
服务、Event
服务、服务等。让我们考虑这个Favorite user
例子 - 我想要:delete
user
class UserController extends Controller
{
/**
* @var UserService $userService
*/
protected $userService;
/**
* UserController constructor.
* @param UserService $userService
*/
public function __construct(UserService $userService)
{
$this->userService = $userService;
}
protected function delete(int $id)
{
$user = User::find($id);
if ($user) {
$this->userService->setUser($user);
$this->userService->delete();
}
}
在用户服务中,我正在处理用户删除 - 更新相应的字段。另外,我需要取消所有用户事件并删除喜欢的用户。我的问题是我应该在哪里做?我应该注入event
和favorite user
服务 inUserController
还是 in UserService
?或者也许有更好的方法来执行此操作。提前谢谢
解决方案
似乎您有很多取决于删除用户的操作,所以我会考虑使用事件并在每个侦听器内部处理它的细节。
class UserController extends Controller
{
/**
* @var UserService $userService
*/
protected $userService;
/**
* UserController constructor.
* @param UserService $userService
*/
public function __construct(UserService $userService)
{
$this->userService = $userService;
}
protected function delete(int $id)
{
if(!$this->userService->delete($id)) {
// return some error;
}
event(new UserWasRemoved($id));
// return success response
}
class DeleteUserService {
protected $user;
public function __construct(User $user)
{
$this->user = $user;
}
public function delete($id){
return $this->user->delete($id);
}
}
// app/Providers/EventServiceProvider
class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
UserWasRemoved::class => [
CancelUserEvents::class,
RemoveUserFavorites::class,
// etc...
],
];
}
推荐阅读
- javascript - 我对用于选择随机数的逻辑感到困惑
- postgresql - postgreSQL 服务器未加载
- haskell - Haskell Data.HashMap.Strict.InsOrd 能够检索最后一个元素
- javascript - 在 javascripts 和 php 中连接数字
- node.js - 如何每 2 分钟执行一次类的方法?
- bash - 选项卡完成忽略 Bash/Debian 中的一些文件
- php - 以相同的形式创建和更新
- c# - 删除动态创建的 HTML 表行 - 生命周期/视图状态问题
- mysql - SELECT INTO 在存储过程中不起作用
- perl - Perl 变量赋值副作用