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.
