Skip to main content

Neste artigo estarei apresentaremos um design pattern muito poderoso e muito fácil de se aplicar em um projeto, conhecido como Strategy.

Ele não só irá facilitar sua vida como desenvolvedor, mas também manterá seu código bem estruturado e escalável. Evitando que você tenha que fazer aquele monte de if’s no seu sistema.

Mas afinal… O que é um pattern em design pattern?

Antes de tudo, se você ainda não sabe o que é ou nunca utilizou um pattern, eles são tipos de designs de código para situações que encontramos constantimente no nosso dia a dia como desenvolvedores.

Seus objetivos são manter seu sistema bem organizado e manutenível, aumentando assim a escalabilidade e facilitando a manutenção da sua aplicação.

Além disso,eles são independentes da linguagem de programação, então não importa se seu sistema está escrito em Java, C#, Javascript, etc.

Entendendo seu funcionamento

Para quevocê possa realmente entender o que estou falando, vou criar um cenário fictício para exemplificar seu comportamento.

Imagine que temos uma funcionalidade em uma aplicação, que calcula o valor do pedágio em uma estrada. O valor deste pedágio leva em consideração o tipo de veículo, ou seja, cada tipo de veículo (moto, carro, caminhão, etc) irá pagar uma taxa de pedágio diferente.

De primeira,podemos pensar em fazer essa atribuição ao valor do pedágio da seguinte maneira:

functioncalculateTollValue(typeOfVeichule) {  
  if( typeOfVeichule === “motorcycle”){
   // lógica que realiza o cálculo com base no tipo de veículo
  }
  else if( typeOfVeichule === “car”){
     // logic
  }
  else if( typeOfVeichule === “truck”){
     // logic
  }
  …
}

Mas perceba quantos if’s tivemos que acrescentar ao nosso código para realizar o cálculo do pedágio pelo tipo de veículo. Digamos que agora o sistema precisará ter mais 5maneiras diferentes de realizar o cálculo, além das que já existem, será que a melhor solução para isso seria adicionando mais condições? Eu acredito que não,e irei de mostrar agora como solucionar esse problema.

Para não precisarmos acrescentar mais condições ao nosso código, mantendo ele mais escalável, iremos aplicar o pattern Strategy que recomenda separarmos a lógica em algoritmos menores e direcionar o fluxo conforme o parâmetro informado na nossa função calculateTollValue.

Logo, iremos criar três funções de cálculo diferentes, uma para cada tipo de veículo possível, visando separar a lógica e invocar o algoritmo quando necessário.

MotorCycleTollValueStrategy
calculate()

CarTollValueStrategy
calculate()

TruckTollValueStrategy
calculate()

Essa é umaótima abordagem caso você esteja utilizando Java ou outras linguagens onde você possa trabalhar com interfaces.

Caso vocêesteja trabalhando com NodeJS, existe uma maneira bem simples. Apenas vamos criar um arquivo chamado TollValueStrategy e deixar sua estrutura da seguinte maneira:

function motorcycleTollValue(){}
function carTollValue(){}
function truckTollValue(){}module.exports[“motorcycle”] =motorcycleTollValue;
module.exports[“car”] = carTollValue;
module.exports[“truck”] = truckTollValue;

Assim mantemos um código fonte e três métodos, um para cada tipo de veículo, divindo a lógica em funções menores da maneira com que o pattern sugere. E o mais legal agora, é como iremos invocar o método correto, na nossa função calculateTollValue:

function calculateTollValue(typeOfVeichule) {  
 require(“TollValueStrategy”)[typeOfVeichule]()
}

Conclusão

Agora que você entendeu como utilizar o pattern não significa que precisa sair tirando todos os if’s do seu código. Lembre-se, complexidade desnecessária é custo.

Isto é só uma maneira de facilitar a manutenção da sua aplicação e melhorar sua estruturada. Basta que você analise o cenário do seu sistema para entender sefaz sentido ou não aplica-lo.

Espero que tenha gostado!

Aproveite para aprender mais e leia nosso artigo sobre O que realmente é um algoritmo recursivo.

Leave a Reply