Design Pattern Adapter: uma boa solução para lidar com códigos legados

5
 min de leitura

As bibliotecas e frameworks vem e vão e para lidar com elas em uma aplicação, uma excelente opção é aplicando o design pattern Adapter.

Design Pattern Adapter: uma boa solução para lidar com códigos legados

Se você é desenvolvedor JavaScript deve ter ficado surpreso com a notícia de que a tão amada biblioteca “Moment.js” não receberá mais atualizações. Com certeza a primeira coisa que você deve ter pensado é naquele seu projeto que está utilizando a biblioteca. Porém isso não é uma novidade no mundo do desenvolvimento. Na realidade bibliotecas e frameworks vem e vão. Então como podemos lidar com bibliotecas e frameworks de terceiros na nossa aplicação?

Uma excelente opção é aplicando o design pattern Adapter.

O que o é Adapter?

Bom o nome “Adapter” é bastante sugestivo (adaptador em português). A ideia desse design pattern é fazer com que duas interfaces/classes diferentes consigam interagir entre si ou até mesmo substituir uma à outra sem causar um efeito colateral no seu código.Para isso, inserimos uma classe adaptadora que intermediará o retorno da nova ou velha interface para o código em produção. Podemos fazer uma comparação bem prática: os adaptadores de tomada. Quando você tem uma tomada que não é compatível com o cabo de força de seu eletrônico é necessário um "adaptador”. É exatamente o mesmo propósito da classe adapter que vamos inserir no nosso código.

Então voltemos ao exemplo do Moment.js que comentamos no início e vamos utilizar ocaso da depreciação da biblioteca. Tente imaginar quão problemático seria ter que instalar uma nova biblioteca e substituir todo o código legado deixado pelo Moment.js. Seria bom adaptador não é mesmo?! Nesse caso veremos na prática como podemos realizar isso

Aplicando o design adapter

O exemplo que vamos utilizar pode parecer bem trivial. Porém o intuito é exatamente deixa-lo bem simples para assim ficar mais fácil de assimilarmos.

Suponhamos que na nossa aplicação existe uma classe que utilize o Moment.js para converter datas para o formato “dia-mês-ano”. Então a estrutura de nossa aplicação ficaria assim:

Moment.js: classe responsável por executar a conversão de data.

index.js: script para executar nossa função.

Vejamos como nosso código ficou:

Vamos então fazer a migração da biblioteca Moment.js. No nosso exemplo escolhemos a biblioteca date-fns.js para substitui-la. Poderíamos simplesmente reescrever a classe certo? Porém lembre que você está substituindo uma biblioteca. As probabilidades de dar alguma erro e precisarmos voltar para abiblioteca de legada são grandes. Então vamos aplicar o adapter! Começaremos escrevendo duas classes.

A primeira será nossa classe que também realizará a conversão de datas assim como a classeMoment.js: Vamos chamada de Data-fns.js.

Nessa classe temos dois métodos: parseISO e formatToDayMonthYear. ParseIso chama o método com o mesmo nome para transformar o input de string para formatoISO. Já a formatToDayMonthYear realiza a conversão propriamente dita.

Nossa segunda classe se chamará DataAdapter. Ela servirá de adaptador para nossa aplicação:

Nessa classe, nós criamos uma nova instância da classe DataFns dentro do constructor da classe DataAdapter.

Logo em seguida encapsulamos a chamada do nosso método de nossa nova instância em this.dataApi dentro do método formatToDayMonthYear.

Agora vamos modificar nosso index.js para “plugar” nossa classe adapter no nosso script:

Caso precise realizar o rollback e voltar a utilizar o Moment.js basta mudarmos a instância da nossa classe dentro da nossa classe adaptadora.

Conseguiu perceber a função de adaptador de nossa classe DataAdapter?!

Agora a nossa classe adapter será responsável por conectar qualquer mudança na nossa aplicação.

Nesse cenário escolhemos a modificação de uma biblioteca para mostrar como exemplo.Porém adotar esse design pattern desde o início de seu projeto para todas as bibliotecas externas pode lhe poupar muita dor de cabeça.

O código interno do nosso exemplo pode ser encontrado dentro deste repositório.

Caso se interesse mais sobre o assunto e queira se aprofundar recomendo esse artigo Adapter.

E ai o que achou? Comente aqui qual o design pattern que você tem utilizado para acoplar as bibliotecas externas nos seus projetos.

Aproveite para conferir outros conteúdos no Blog da LinkApi, eu recomendo este Guia Completo sobre Vue.js, está sensacional.

Compartilhar esse conteúdo: