D - Dependency Inversion Principle
Introdução
O princípio SOLID é um conjunto de cinco princípios de design de software que visam tornar o código mais fácil de entender, manter e estender. Cada letra do acrônimo SOLID representa um desses princípios.
D - Dependency Inversion Principle (Princípio da Inversão de Dependência)
- Módulos de alto nível não devem depender de módulos de baixo nível. Ambos devem depender de abstrações.
- As abstrações não devem depender de classes concretas. As classes concretas devem depender de abstrações.
Definições
- Módulo de alto nível (ou classe): classe que executa uma ação como uma ferramenta.
- Módulo de baixo nível (ou classe): a ferramenta necessária para executar a ação.
- Abstração: representa uma interface que conecta as duas classes.
- Classe concreta: Como a ferramenta de fato funciona.
Esse princípio visa reduzir a dependência de uma classe de alto nível na classe de baixo nível, introduzindo uma interface.
Exemplo - Violação do Princípio DIP
O exemplo abaixo viola o DIP
<?php
class Mailer
{
public function send()
{
//
}
}
class SendWelcomeMessage
{
private $mailer;
public function __construct(Mailer $mailer)
{
$this->mailer = $mailer;
}
}
Exemplo do Princípio DIP
O Exemplo abaixo demonstra como podemos fazer uso do DIP
<?php
interface Mailer
{
public function send();
}
class SmtpMailer implements Mailer
{
public function send()
{
//
}
}
class SendGridMailer implements Mailer
{
public function send()
{
//
}
}
class SendWelcomeMessage
{
private $mailer;
public function __construct(Mailer $mailer)
{
$this->mailer = $mailer;
}
}