@slip31

Как правильно работать с зависимостями в контроллере?

Есть сущность
class Company {

    private $name;

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

я хочу сохранить её
interface RepositoryInterface {
    
    public function add(Company $company): void;
    
}
class MySqlRepository implements RepositoryInterface {

    private $db;

    public function __construct(DbConnection $db) {         
         $this->db = $db;
    }
    public function add(Company $company): void {
        $name = $company->name;
        $stmt = $this->db->prepare("INSERT INTO company (name) VALUES $name");
        $stmt->execute();
    }
}

с помощью сервиса
class CompanyService {

   private $repository;

    public function __construct(RepositoryInterface $repository) {         
                $this->repository = $repository;
    }
    public function createCompany($dto): void {
        $this->repository->add($dto);
    }
}

Ну и контроллер
class Controller {
    private $service;

    public function __construct(CompanyService $service) {         
        
                $this->service = $service;
    }
    
    public function actionCreate() {
        //* получаем dto из формы
        $dto;
        $this->service->createCompany($dto);
    }
}

Правильно я понимаю, что мне придется пробрасывать везде:
$db = new DbConnection('127.0.0.1', 'root', 'dbname', '');
$repository = new MySqlRepository($db);
$service = new CompanyService($repository);

И как то передавать это в контроллер с которым я работаю? Ведь у сервиса в конструкторе репозиторий, у репозитория в конструкторе подключение к базе данных? Это должно как то создаваться в конструкторе контроллера?
class Controller {
    private $service;
/** Где это должно быть? */
    $db = new DbConnection('127.0.0.1', 'root', 'dbname', '');
$repository = new MySqlRepository($db);
$service = new CompanyService($repository);

*///
    public function __construct(CompanyService $service) {         
        
                $this->service = $service;
    }
    
    public function actionCreate() {
        //* получаем dto из формы
        $dto;
        $this->service->createCompany($dto);
    }
}


Как правильно это делается по ООП?
  • Вопрос задан
  • 137 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
29 мар. 2024, в 11:11
10000 руб./за проект
29 мар. 2024, в 10:00
10000 руб./за проект
29 мар. 2024, в 09:59
750 руб./в час