首页 > 解决方案 > 类中的 Laravel 责任

问题描述

我有一个关于 Laravel 的项目,需要进行重构。我已经阅读了关于服务提供者和依赖注入的内容并且有一些问题。这是一个简短的结构:user模型、event模型、favorite user模型等。此外,所有模型都有控制器。每个event都有一个creatorclientuser关系)。在每一堂课中,我都在注入适当的服务:User服务、Event服务、服务等。让我们考虑这个Favorite user例子 - 我想要:deleteuser

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

在用户服务中,我正在处理用户删除 - 更新相应的字段。另外,我需要取消所有用户事件并删除喜欢的用户。我的问题是我应该在哪里做?我应该注入eventfavorite user服务 inUserController还是 in UserService?或者也许有更好的方法来执行此操作。提前谢谢

标签: laravellaravel-5eloquent

解决方案


似乎您有很多取决于删除用户的操作,所以我会考虑使用事件并在每个侦听器内部处理它的细节。

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...
        ],
    ];
}

推荐阅读