Laravel фасад и жестко связанные контроллеры

Мне трудно понять, как я могу сделать это лучше всего. Я понимаю, как фасад работает как синтаксический сахар для представления четкого статического стиля компоновки кода, сохраняя при этом код свободным и тестируемым.

Однако у меня есть следующая проблема. Всякий раз, когда у меня есть контроллер, контроллер зависит от загрузки классов. Давайте возьмем входной класс в качестве примера. Каждый контроллер является контейнером IoC, так что на самом деле это хорошо. Потому что, если я хотел бы изменить входной класс с другим классом. Мне просто нужно создать новый класс, который реализует правильный интерфейс. Однако это означает, что КАЖДЫЙ контроллер в моем приложении зависит от одного и того же класса ввода. Я правильно понимаю?

Итак, я прочитал эту очень хорошую статью: http://www.nathandavison.com/posts/view/16/using-dependency-injection-and-ioc-in-laravel-4-controllers

Короче говоря, он предлагает использовать внедрение зависимостей (DI) в ваших контроллерах. НАПРИМЕР

class UsersController extends BaseController
{
    protected $response;
    protected $request;
    protected $validator;
    protected $hasher;
    protected $user;
    public function __construct(
        Response $response,
        \Illuminate\Http\Request $request,
        \Illuminate\Validation\Factory $validator,
        \Illuminate\Hashing\BcryptHasher $hasher,
        User $user
    ) {
        $this->response = $response;
        $this->request = $request;
        $this->validator = $validator;
        $this->hasher = $hasher;
        $this->user = $user;
    }
    public function getIndex()
    {
        return $this->response->make('Hello World!');
    }
}

а также

$app->bind('UsersController', function($app) {
    $controller = new UsersController(
        new Response,
        $app->make('request'),
        $app->make('validator'),
        $app->make('hash'),
        new User
    );
    return $controller;
});

Это имеет смысл, но это не было философией структуры, потому что она обходит фасад... Я хотел бы услышать мнения об этом подходе. Это хорошая практика или нет?

1 ответ

Решение

Я думаю, что вы следовали тому же учебнику, что и другой парень, на вопрос которого я только что ответил. Вместо того, чтобы повторяться, смотрите мой ответ на его вопрос.

Другие вопросы по тегам