Как не нарушать SOLID? Роутер работает так :[
'pattern' => '~^/news/([a-zA-Z0-9\-]+)$~',
'class' => 'vendor\app\Frontend\Controllers\News',
'method' => 'getSingle',
'params' => ['news_url'],
],
Имеем класс, метод и параметр.
Далее Controller Resolver создает объект контроллера и пошло поехало.
В контроллере соответственно есть зависимости, самая банальная - модель.
Если правильно зависеть от абстракций а не от конкретных классов(не создавать объекты в конструкторе),будет ли правильным передавать зависимости в роутинге, к примеру как то так:[
'pattern' => '~^/news/([a-zA-Z0-9\-]+)$~',
'class' => 'vendor\app\Frontend\Controllers\News',
'method' => 'getSingle',
'someDependencies'=>['vendor\app\Frontend\Models\News', 'vendor\app\Common\AccessControl'],
'params' => ['news_url'],
],
Или есть более адекватный выход?

21 Авг 2019 в 07:04
258 +1
0
Ответы
1

Передача зависимостей через роутинг не является хорошей практикой с точки зрения принципов SOLID. Вместо этого лучше всего использовать Dependency Injection Container (DIC) для управления зависимостями и их инъекции в конструктор класса контроллера. DIC позволяет легко управлять зависимостями, обеспечивая разделение ответственностей и уменьшая связанность компонентов.

Примерно такой код может выглядеть с использованием DIC:

$container = new Container();
$container['newsModel'] = function($container) {
return new vendor\app\Frontend\Models\News();
};
$container['accessControl'] = function($container) {
return new vendor\app\Common\AccessControl();
};
$container['controller'] = function($container) {
return new vendor\app\Frontend\Controllers\News($container['newsModel'], $container['accessControl']);
};
$router->addRoute('~^/news/([a-zA-Z0-9\-]+)$~', [
'class' => $container['controller'],
'method' => 'getSingle',
'params' => ['news_url'],
]);

Таким образом, мы используем DIC для создания объектов зависимостей и их инъекции в контроллер, обеспечивая легкость управления зависимостями и соблюдение принципов SOLID, особенно принципа Dependency Inversion.

20 Апр 2024 в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир