🔧 [S.O.L.I.D.] Os Cinco Pilares da Programação Orientada a Objetos. [D] Dependency Inversion Principle - DIP
Nachrichtenbereich: 🔧 Programmierung
🔗 Quelle: dev.to
Continuando a série sobre SOLID, caso não tenha lido o artigo anterior:
[S.O.L.I.D.] Os Cinco Pilares da Programação Orientada a Objetos. [I] - Interface Segregation Principle - ISP
Diego de Sousa Brandão ・ May 25
Neste artigo estarei falando sobre o quinto e último princípio que é:
[D] - Dependency Inversion Principle
Princípio da Inversão de Dependência - DIP
“Módulos de alto nível não devem depender de módulos de
baixo nível. Ambos devem depender de abstrações;
Abstrações não devem depender de detalhes.”
Vamos considerar um exemplo de um sistema de gestão de produtos em uma loja online. Este sistema precisa armazenar informações sobre os produtos em um banco de dados. Inicialmente, podemos implementar isso com uma dependência direta da classe ProductDatabase na classe ProductService. Em seguida, aplicaremos o Princípio da Inversão de Dependência (DIP) para melhorar o design.
Neste exemplo, ProductService depende diretamente de ProductDatabase, o que viola o DIP.
Com DIP
Para seguir o DIP, vamos introduzir uma interface para a interação com o banco de dados e fazer com que ProductService dependa dessa interface em vez de uma implementação concreta.
Implementação ProductDatabase com DIP
Explicação:
Interface ProductRepository: Introduzimos uma interface para definir o contrato para interagir com o banco de dados de produtos.
Implementação ProductDatabase com DIP: Implementamos a interface ProductRepository na classe ProductDatabase. Isso separa a lógica de interação com o banco de dados do restante do código.
ProductService com DIP: ProductService agora depende apenas da abstração ProductRepository, não de uma implementação concreta de banco de dados. Isso permite uma maior flexibilidade e facilidade de manutenção, pois podemos trocar facilmente a implementação do banco de dados sem alterar ProductService.
Ao seguir o Princípio da Inversão de Dependência, garantimos que os módulos de alto nível (como ProductService) dependam de abstrações (como ProductRepository) em vez de depender de implementações concretas. Isso torna o código mais flexível, reutilizável e de fácil manutenção, pois reduz o acoplamento entre os componentes do sistema.
...
🔧 Os pilares da Programação Orientada a Objetos
📈 98.05 Punkte
🔧 Programmierung
🔧 Programação Orientada a Objetos: Herança
📈 68.49 Punkte
🔧 Programmierung
🔧 Programação Orientada a Objetos: Abstração
📈 68.49 Punkte
🔧 Programmierung
🔧 Dependency Inversion Principle
📈 53.07 Punkte
🔧 Programmierung