Disclaimer
Este texto foi inicialmente concebido pela IA Generativa em função da transcrição do episódio do nosso canal, Dev Eficiente. Se preferir acompanhar por vídeo, é só dar o play.
Introdução
No episódio de hoje, vamos falar sobre o que considero o "feijão com arroz" da programação orientada a objetos: a coesão e o encapsulamento. Essas são características fundamentais que podem fazer toda a diferença na manutenção e na evolução de sistemas. Apesar de serem princípios antigos, ainda vejo projetos onde não são utilizados de forma consistente.
A ideia é simples: aproveitar os recursos básicos da linguagem para aumentar a coesão e facilitar o trabalho com o código. Vamos explorar como isso pode ser feito com exemplos práticos e discutir os benefícios desse enfoque.
O Princípio da Coesão
Coesão, no contexto de programação orientada a objetos, significa que os atributos e métodos de uma classe estão relacionados e trabalham juntos de forma consistente. Isso pode ser alcançado através do encapsulamento, criando métodos que operam sobre os atributos internos da classe.
Por mais básico que pareça, muitos projetos ainda ignoram esse princípio. Classes de serviço e casos de uso muitas vezes acumulam lógicas que poderiam estar melhor organizadas dentro de entidades ou abstrações apropriadas. Isso compromete a manutenção do código e aumenta sua complexidade.
Exemplo: Trabalhando com Classes de Endereço
O código aqui foi inspirado num projeto da Apache chamado OffBiz. O código dele pode ser encontrado no github.
Considere uma classe Address
com um atributo que representa diferentes tipos de endereços. A lógica para verificar se um endereço é do tipo "work" ou "pref" poderia estar encapsulada dentro da própria classe. Veja como isso melhora a testabilidade e a coesão:
Antes:
for (Address address : addresses) {
if (address.getAddress().equals(AddressType.WORK) || address.getAddress().equals(AddressType.PREF)) {
break;
}
}
Após o ajuste:
if (address.hasWorkAddress()) {
// Lógica simplificada
}
Essa alteração distribui a responsabilidade, torna o sistema mais testável e ainda, de brinde, faz com que a lógica de verificação de endereço seja reutilizável.
Benefícios da Abordagem
Adotar o feijão com arroz do encapsulamento e coesão traz vários benefícios:
- Melhor Testabilidade: Classes mais coesas ajudam na distribuição da complexidade, fazendo com que os testes das partes fiquem mais simples.
- Reutilização de Lógica: Ao encapsular a lógica em métodos específicos das suas classes que tem estado (geralmente suas entidades), você evita redundâncias e promove o reaproveitamento do código.
- Separar Responsabilidades: A divisão clara de responsabilidades reduz a complexidade das classes de serviço e melhora a manutenção do sistema.
- Utilização de Recursos da Linguagem: Você maximiza o uso de padrões da linguagem, sem criar camadas adicionais ou abstrações desnecessárias.
Conclusão
Promover coesão e encapsulamento não deve ser um esforço extra. Deveria ser uma habilidade automática, aplicada sem esforço ao identificar oportunidades no código.
Ao adotar essas práticas, você melhora a manutenção, a confiabilidade e a testabilidade do sistema, utilizando apenas os recursos padrão da linguagem. Isso é o básico bem feito, o "feijão com arroz" que pode transformar a qualidade do código.
Sobre a Jornada Dev + Eficiente
A Jornada Dev + Eficiente é um treinamento focado em fazer você crescer na carreira como uma pessoa cada vez mais especializada em Design e Arquitetura de Software.
A Jornada pavimenta este caminho fazendo com que você seja cada vez mais capaz de colocar código de qualidade em produção com cada vez mais velocidade.
Para conhecer mais, acesse https://deveficiente.com/kr/lp
Top comments (0)