O primeiro desses padrões que tratarei aqui é Cadeia de Responsabilidade. Nele, a requisição feita por um objeto Cliente é transmitida ao longo de uma sequência de Classes até que a requisição seja suprida por uma delas. Como a ideia é manter as classes o mais desacopladas possível, esse tipo de transmissão da mensagem (requisição) é baseado no conceito de "orientação a dados", ou seja, a estruturação dos dados trafegados na mensagem é o único ponto de contato entre as classes. Aquela Classe que recebe a mensagem deve analisar os dados recebidos e, se não for capaz de atender à requisição, ela deverá retransmitir a mensagem para o objeto seguinte na hierarquia.
Exemplos típicos da aplicação do padrão Cadeia de Responsabilidade envolvem alçadas de aprovação. Imagine, por exemplo, o sistema de compras de uma companhia, onde os Compradores podem submeter os pedidos de compra sem necessitar uma aprovação se o pedido tiver certas características (digamos, um limite máximo de valor) mas que, conforme estas características vão variando, o pedido deve ser submetido a aprovação por níveis hierárquicos cada vez mais altos (supervisor, gerente, diretor, presidente).
O diagrama abaixo mostra as classes participantes da solução para esse cenário utlizando a Cadeia de Responsabilidade.
A nomenclatura das classes participantes da solução é descrita no quadro abaixo:
Handler é a classe que descreve a interface que é disponibilizada para aqueles que pretendem submeter uma requisição. Ou seja, é uma classe abstrata que apenas oferece os pontos de entrada para as requisições que poderão ser feitas; as transações que forem utilizá-la não saberão de antemão quais nem quantos são os níveis hierárquicos existentes, tampouco as regras aplicadas. No diagrama acima, este é o papel da classe TWAprovacao.
É preciso que outras classes sejam criadas para implementar a interface publicada pelo Handler. Essas classes são chamadas de Concrete Handlers, sendo exemplos as classes TWAprovacaoBasica e TWAprovacaoGerente no diagrama. Repare que apenas observando o diagrama não é possível determinar a hierarquia da cadeia de responsabilidades. Isso terá que ser montado através de algum dos padrões criacionais, num ponto em que inevitavelmente teremos que introduzir regras de negócio.
Por fim, a classe que submete uma requisição à Cadeia de Responsabilidades é chamada de Client. A classe TWbusinessObj tem essa função no nosso exemplo.No próximo post eu apresento uma forma de codificar essa solução usando Delphi.


Nenhum comentário :
Postar um comentário
OBS: Os comentários enviados a este Blog são submetidos a moderação. Por isso, eles serão publicados somente após aprovação.
Observação: somente um membro deste blog pode postar um comentário.