A Fábrica de Arquitetos III - Chain Of Responsibility Pattern



...

Falaaaaaa meu consagrado, tudo bem?? Comigo está ótimo e hoje damos continuidade a nossa série sobre padrões de projeto, antes de começarmos deixa eu dar uma satisfação pra vocês sobre o porquê essa série tinha sido pausada.

Eu estava em um processo de estudo constante no quesito arquitetura para poder trazer mais qualidade para os meus artigos, e hoje estamos voltando com um dos padrões mais legais de se implementar, o Chain Of Responsibility.

 

 

O que é?

 

Frequência de uso: 3/5 — Médio Baixo

Apesar de ter uma pouca frequência de uso o Chain Of Responsibility é um dos melhores padrões quando necessitamos ter uma cadeia de processamento.

Ele é um padrão da família dos comportamentais, dependendo de alguma circunstância ele toma alguma atitude.

Traduzindo para na forma literal, Chain Of Responsibility significa Cadeia de responsabilidade, o objetivo desse padrão como o próprio nome diz é criar uma cadeia onde cada elemento aponta para o próximo.

 

 

A primeira vista parece meio confuso, mas vamos lá, imagine que você está trabalhando em um sistema de uma transportadora, e foi solicitado para que você realizasse a funcionalidade de cálculo de frete para a entrega de algum produto, também foi pedido que, dependendo do tamanho do produto o valor do frete iria ser alterado.

Para ser calculado o valor do frete o tamanho do produto poderia estar entre pequeno, médio ou grande.

Logo abaixo está um código que é muito comum se ver em diversos sistemas

 

Esse tipo de código funciona, porém não é a melhor forma de se verificar qual decisão tomar, imagine que ao invés de 3 parâmetros para verificar tenha mais de 50, iria ter 50 IF’s no mesmo método? Isso torna o código massante, um código sujo e mal escrito.

Agora que ja conseguimos ter uma visão geral do porque esse padrão se torna necessário em algumas situações, vamos implementar o padrão já mencionado.

 

 

Mãos no Código!

 

Usando o mesmo exemplo do frete, vamos criar um simples exemplo que demonstra seu uso.

Para início precisamos da nossa entidade, que no nosso caso será o Produto

 

Dentro da nossa entidade temos um enum chamado ProdutoTamanho, essa será a nossa prorpiedade que iremos utilizar na hora de verificar qual elemento da cadeia irá processar nosso frete.

 

Agora vamos iniciar a implementação do padrão, primeiramente nós precisamos de uma classe abstrata que será herdada por todos elementos da cadeia, nessa classe também tem o método que aponta para o próximo elemento.

 

Vamos falar um pouco mais sobre essa classe, perceba que ela tem o método abstrato CalcularFrete, onde cada elemento da cadeia que herdar essa classe terá sua própria implementação, também temos o método SetCalculador, esse método é utilizado para indicar qual será o próximo elemento da cadeia.

Por fim precisamos agora dos elementos da cadeia, que no caso são os tipos de frete (grande, médio e pequeno).

Grande

 

Médio

 

Pequeno

 

Agora que temos os 3 elementos da nossa cadeia, vamos montar a cadeia.

 

 

Perceba que eu instânciei os tipos de frete, o primeiro elemento da nossa cadeia é o FreteGrande, caso o produto seja elegível a ele o processamento para o mesmo será realizado, senão ele irá mandar para o próximo elemento da cadeia, que no nosso caso é o FreteMedio, que funciona da mesma forma, se for elegível, realiza a ação, senão passa para o próximo e assim sucessivamente até o último elemento da cadeia.

Perceba que montamos a ordem dos elementos na cadeia utilizando o SetCalculador nas instâncias específicas.

Por fim temos um simples teste do funcionamento do nosso padrão.

 

 

Conclusão

 

No artigo de hoje tivemos a volta da série “A Fábrica de Arquitetos” onde eu demonstrei a implementação de um dos patterns mais bacanas da família dos comportamentais, o Chain Of Responsibility, espero que você tenha entendido como aplicar e como esse padrão pode deixar seu código mais limpo e com um melhor design.

Agradeço a atenção e bons estudos!!!!!

Caso precise entrar em contato, me mande uma mensagem aqui.

Baixe o projeto clicando aqui.