Olá, eu estou trabalhando em um projeto onde tem classes que tem dependências e essas dependências também tem dependências e assim um caminho sem volta...
Bom, eu queria saber se estou fazendo certo (eu acho que sim). Eu uso o construtor para injetar dependências que realmente é necessário para uma classe, um ID, ou algo assim...
Eu fiz o exemplo abaixo que é a forma que eu uso, que creio que esteja certo.
Esse model não é injetado como dependência e sim instânciado no momento da criação do objeto ExemploRepo()
, pois pelo que sei, se eu coloco ele como dependência preciso suprir essa dependência sempre que precisa da minha classe ExemploRepo
.
class ExampleRepo implements iRepository
{
protected $model;
protected $mailService;
public function __construct()
{
$this->model = new User();
$this->mailService = new MailService('smtp');
}
public function create($data)
{
$this->model->create();
$this->mailService->sendMail($data['email']);
// Faz todo o trâmite de criação
}
}
No projeto que estou trabalhando atualmente toda as instâncias é repassado para o construtor como injeção de dependência. Nesse caso, não consigo refatorar pra melhorar esse código porque essas dependência, também tem dependências... Exemplo no código abaixo.:
class ExampleRepo implements iRepository
{
protected $model;
protected $mailService;
public function __construct(User $model, MailService $mailService)
{
$this->model = $model;
$this->mailService = $mailService;
}
public function create($data)
{
$this->model->create();
$this->mailService->sendMail($data['email']);
// Faz todo o trâmite de criação
}
}
Pelo que estudei e pelo que aprendi estudando design patterns o mais certo é o primeiro caso, pois assim a gente não precisa SEMPRE suprir dependências de outras classes que também tem dependências. Isso gera um problema que se expande em todo o projeto e eu estou com esse problema nesse exato momento e foi isso que me fez questionar a forma certa de estar utilizando os constructors
e injeção de dependência
.
Afinal, estou certo?