Faça com que as bibliotecas sejam dependentes de sua Aplicação
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.