“Observer” é inigmático. Você nem esperava e chega aquela notícia que alguma coisa aconteceu. A janela estava lá mostrando uma fila de clientes em atendimento, mas de repente alguém gritou que chegou um cliente com preferência no atendimento e a fila precisa ser reorganizada para acomodar aquele cliente com preferência… Certamente você já viu um cenário deste ou participou de uma fila destas.
Vejamos os atores para o cenário: de uma lado existe alguém pronto para receber a informação de necessidade de reorganizar a fila, ele fica lá só esperando alguém gritar – de outro tem um lá na porta da instituição com sede de saber novidades para sair falando para todo mundo.
Trabalhar com “Observer” é em outras palavras montar uma rede de informação de notícias. Existe um ator que assina o serviço de notícia e outro que distribui as notícias – é isto que um “patterns observer” faz.
Olhando para o MVCBr, o primeiro passo é assinar o serviço de notícias (aquele que fica esperando uma notícia para tomar uma ação):
[code]
uses MVCBr.Observable;
… on form show
// assinar o serviço de notícias
TMVCBrObservable.subscribe( form1, ‘reorganizar.fila’,
procedure (json:TJsonValue)
var nQtde:integer;
begin
nQtde = json.getvalue<integer>(‘qtde’);
abrirVagaNaFila(nQtde);
end);
…. on destroy
// retirar a assinatura do serviço
TMVCBrObservable.UnSubscribe(form1);
[/code]
Do outro lado esta o distribuidor de notícias, aquele que grita que precisa entrar um cliente preferêncial na fila:
[code]
uses MVCBr.Observable;
..
// em algum lugar em que a notícia nasce
TMVCBrObservable.send( ‘reorganizar.fila’, TJsonObject.parse( ‘{"qtde":1}’ ) );
[/code]
Quando o “observer” recebe a notícia, ele com sede de espalhar a notícia, sai procurando todo mundo que se candidatou para receber aquele serviço… e pá… manda a notícia uma-a-uma para cada assinante.
Aproveitem: git