Estratégia de programação - Chega de IFs!

9
 min de leitura

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

Estratégia de programação - Chega de IFs!

Neste artigo estarei te apresentando 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?

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]()
}

Invocando desta maneira, estamos atribuindo a responsabilidade de realizar o cálculo de acordo com o tipo de veículo passado na função como parâmetro.

Como podemos ver, retiramos todos os if’s que tinhamos anteriormente no nosso código,deixando ele simples, fácil de se entender e muito mais flexível, pois caso tenhamos que adicionar mais um tipo de veículo, só precisaremos modificar o arquivo TollValueStrategy, mantendo uma fácil manutenção no nosso código.

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.

 

Compartilhar esse conteúdo: