课程中的 Laravel 责任

V-K*_*V-K 6 laravel eloquent laravel-5

我有一个关于 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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

Hel*_*cas 2

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

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
    }
Run Code Online (Sandbox Code Playgroud)
class DeleteUserService {

    protected $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }

    public function delete($id){
       return $this->user->delete($id);
    }
}
Run Code Online (Sandbox Code Playgroud)
// 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...
        ],
    ];
}
Run Code Online (Sandbox Code Playgroud)