Faça com que as bibliotecas sejam dependentes de sua Aplicação

Andrew Rosário
2 min readSep 30, 2020

--

Recentemente a mais famosa biblioteca para manipulação de datas em JavaScript, o Moment.js, foi oficialmente descontinuada. Os próprios criadores sugerem alternativas mais modernas como o Luxon e o date-fns.

Se o seu projeto utiliza o Moment.js em dezenas ou centenas de lugares já pode imaginar o trabalho que vai ser para substituí-lo. A dor de cabeça pode ser ainda maior se o projeto não possuir cobertura de testes.

São em situações como esta que você deveria repensar a arquitetura da sua aplicação.

O verdadeiro custo do software é sua manutenção. Ter uma arquitetura bem fundamentada ajuda a reduzir os custos da manutenção do sistema.
- Robert C. Martin

Se você precisa sair alterando vários lugares então a sua regra de negócio é dependente da biblioteca, sendo que num sistema bem estruturado a situação é a inversa. A biblioteca que deve depender da sua regra de negócio.

Programe para Interfaces

Primeiramente analise a ação que o seu sistema efetuará e implemente somente a assinatura do método a partir de uma Interface. Ela servirá como um protocolo onde as partes externas deverão segui-la estritamente. No código abaixo utilizo TypeScript mas o exemplo é aplicável a qualquer outra linguagem.

O Padrão de Projeto Adapter

Como o próprio nome já diz, utilizaremos uma espécie de adaptador.
O Adapter é uma classe ou objeto especial que converte a interface de uma implementação para que outra classe ou objeto possa entendê-lo. Este é o lugar ideal para colocarmos as bibliotecas externas implementando a Interface criada anteriormente.

Agora temos um código totalmente desacoplado. Desta forma agora é o Moment.js que segue as regras propostas pela aplicação. E se você precisar trocar de biblioteca basta alterar somente seu Adapter sem ter a preocupação de que outras partes do sistema irão quebrar.

Conclusão

Criar essa camada adicional no início pode parecer custoso, mas a longo prazo os ganhos são enormes. O seu software sempre estará mudando, as bibliotecas que ele utiliza também mudam e ficam depreciadas.

Ter uma arquitetura com essas regras proporciona uma proteção para que a manutenção seja feita com pouquíssimo esforço e a aplicação sempre fique atualizada com as mais recentes tecnologias.

--

--

Andrew Rosário
Andrew Rosário

Written by Andrew Rosário

Desenvolvedor Front-end, mentor e palestrante. Apaixonado por tecnologia e por compartilhar conhecimento.

Responses (1)