MVCBr – Como usar Observer do Framework

“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):

   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);

Do outro lado esta o distribuidor de notícias, aquele que grita que precisa entrar um cliente preferêncial na fila:

   uses MVCBr.Observable;
   ..
    
   // em algum lugar em que a notícia nasce
   TMVCBrObservable.send(  'reorganizar.fila',   TJsonObject.parse(   '{"qtde":1}' ) );


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