@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);
    }
}


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

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

Войти через центр авторизации
Похожие вопросы
от 55 000 до 80 000 руб.
СКАИД Москва
от 60 000 руб.
Paxport Москва
от 140 000 до 190 000 руб.
21 авг. 2019, в 12:43
5000 руб./за проект
21 авг. 2019, в 12:03
3000 руб./в час
21 авг. 2019, в 11:44
750 руб./в час