Как добиться инверсии управления в шаблоне фронт-контроллера? - PullRequest
0 голосов
/ 20 ноября 2018

Я застрял при внедрении зависимостей между контроллерами-сервисами, сервис-базой данных, я чувствую, что это беспорядок.

Все запросы перенаправляются в index.php из public_html, там

В index.php из public_html я создаю объект приложения, обслуживаю его маршрутизатором и настраиваю некоторые маршрутынапример:

$app = new Application(new Router());
$app->addRoute('/questions', (Object)[
   'controller' => 'QuestionsController',
   'action' => 'getAllQuestions'
]);

Я сопоставляю URI с маршрутами регулярного выражения и как-то «динамически» создаю экземпляр контроллера в зависимости от маршрута внутри Application.php, который отображается на контроллер, и действия:

 if(class_exists($this->controllerNamespace)){
  $this->router->setController(new $this->controllerNamespace);
  call_user_func_array([$this->router->getController(), $this->router->getAction()], [$this->router->getParams()]);
 }

Внутри контроллера я бы создавал экземпляр объекта Service и вызывал метод для получения результатов db.

Службе, в свою очередь, нужен объект базы данных для взаимодействия с базой данных и моей базой данных.Я полагаю, что класс - это что-то вроде синглтона:

static function getInstance():Database
{
    if (NULL == self::$database) {
        self::$database = new Database();
    }
    return self::$database;
}

, поэтому я не знаю, какой сервис нужен контроллеру, пока я на самом деле не нахожусь внутри контроллера, а база данных, созданная внутри класса сервиса, просто кажется неправильной, какя могу улучшить все это?

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

app
 src
  Controllers
   Questions
   Answers
  Core
   Controller
   Database
   Router
   Service
   View
  Services
   Questions
   Answers
  Views
   index.php
  Application.php
  Config.php
 tests
 vendor
logs
public_html
 assets
 index.php
 .htaccess
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...