Nesse artigo mergulharemos em um mundo fascinante da programação sob a ótica de Clean Code, Domain-Driven Design (DDD) e Programação Orientada a Objetos (POO). Como programador e arquiteto de software apaixonado, você já sabe que dominar linguagens como JavaScript e TypeScript é apenas parte do desafio. A verdadeira magia acontece quando conseguimos transformar linhas de código em algo elegante, claro e fácil de manter. É por isso que exploraremos dicas essenciais que o ajudarão a elevar suas habilidades de programação a um novo patamar.
1 – Defenda e proteja a todo custo o uso de “const” em detrimento de “let”. Uma cláusula “const” semanticamente diz que essa informação não deve ser reatribuída. E se essa informação não deve ser reatribuída, por que motivos vamos querer correr o risco de usar “let”? Use “let” em escopos pequenos e fechados, como por exemplo, uma somatória (ou nem isso, pois poderia ser um “reduce”).
2 – Seus métodos e funções devem ter apenas um nível de abstração e ser lidos como uma poesia, daí entra o uso de métodos privados.
3 – Encapsulamento e os modificadores “protected” e “private”. Além deles serem excelentes para ocultar detalhes de implementação das classes clientes, servem de apoio para aumentar a legibilidade dos métodos públicos. Extraia lógicas de mais níveis de abstrações, para métodos expressivos de nível 1. Além de ganhar em reuso, se houver necessidade de alterá-los, será em apenas um único local.
4 – Quando utilizar “else”? Em 99.9% dos casos, um “else” ou “else if” é completamente desnecessário, pois apenas aumentará a carga cognitiva do programador e a margem esquerda de indentação do código.
Existem diversas técnicas para eliminar “ifs” e “else”:
- Adicionar cláusula de guarda
- Substituir condicional por polimorfismo
- Consolidar condicional
- Decompor condicional
- Padrões como “chain of responsibility”
- “State” e “Strategy”
Lembrando que código orientado a objetos evolui a partir de pontos de extensão, e não adicionando mais um “if/else”.
5 – Os Data Transfer Object (DTOs) são responsáveis por trafegar dados entre camadas, que são divisões lógicas responsáveis por cada etapa de uma aplicação:
- Camada de negócio: responsável por regras empresariais
- Camada de aplicação: responsável por regras de negócio da aplicação
- Camada de infraestrutura: responsável por dependências externas como drivers de acesso a banco, HTTP Client etc.
6 – Existem 2 tipos de validações: as de tipos de dados e as de negócio.
O que é uma validação de tipo de dados? Para um dado vindo de um input do usuário, que representa uma idade, ele precisa ser numérico. Essa validação ocorre no controller. Mas para meu domínio, além da idade ser do tipo numérico, ela deve ser um número inteiro maior ou igual a 18 e no máximo 60. Esse é um tipo de validação de negócio e ela deve ficar dentro da entidade que representa uma idade.
Em casos de validações de negócio complexas, existem padrões como “Specification” e “Notification”, postulados por Martin Fowler e Eric Evans.
Caso de uso faz a dança das entidades e implementa as regras da aplicação, e quando preciso de alguma informação específica sobre minhas entidades, pergunto para o domínio, que é onde as regras de negócio residem.
Abaixo segue um exemplo de um caso de uso para criar um usuário: CreateUserUseCase
Imagine a programação como uma forma de arte, onde a clareza e a simplicidade são as maiores virtudes. À medida que você avança em sua jornada, defendendo o uso de “const” em vez de “let” e criando métodos que se assemelham à poesia em sua legibilidade, está pavimentando o caminho para se tornar um verdadeiro mestre da programação. Lembre-se de que a Programação Orientada a Objetos não se trata de acumular “if/else,” mas sim de evoluir a partir de pontos de extensão.
Você agora tem ferramentas para eliminar “ifs” e “else” e utilizar Data Transfer Objects com maestria. Isso o preparará para enfrentar desafios de desenvolvimento de software com confiança. Continue aprimorando suas habilidades, compartilhando conhecimento e explorando as diversas técnicas disponíveis. À medida que você escreve código de maneira magistral, lembre-se de compartilhar seus aprendizados, pois assim contribuirá para a evolução da arte da programação. Afinal, a beleza está nos detalhes, e a programação é um universo infinito de descobertas e criatividade.
*As opiniões aqui colocadas refletem minha opinião pessoal e não necessariamente a opinião da Compass UOL.