Aggregator Pattern - generico?

Ae Pessoal,

Tenho uma aplicação que deve gerar uma mensagem que é o registro de todo o seu processamento, mas as partes da mensagem são geradas em diversos locais e não existe um ponto onde todas essas partes estejam disponíveis.

Eu fiz algo assim:

class MessageManager {
    void start() {}
    void addField() {}
    void addFilename() {}
    void stop() {} //envia a mensagem
    
    MessageManager getInstance() {} //ops, singleton
}

addField é chamado diversas vezes e tem uns outros metodos pra ir montando o conteúdo da mensagem.

Depois descobri que existe um pattern chamado Aggregator, nele diz que a base da solução é um stateful filter, mas eu não entendo minha solucao como um filtro (e stateful pra mim é singleton - j2se :slight_smile: ), tem como fazer isso de um modo mais genérico? No meu caso minha aplicacao conhece onde gerar as partes da mensagem e o “gerador” sabe exatamente quais sao as partes da mensagem. Tá feio mas funciona, mas queria saber se tem como ser mais arrumadinho.

Parece que você está usando o padrão Builder.

:roll: ehehehe, tá me complicando … pelo que vi o Builder é pra construir objetos enquanto o Aggregator é para mensagens (é um EAI), mas basicamente são a mesma coisa (tirando que o Aggregator tem que ser stateful já que mensagens são assíncronas e não seguem a sequência de montagem de um Builder).

O problema é que não achei uma descrição com diagrama ou mais detalhes do Aggregator (e não tenho o livro :cry: )

Ahh, desculpa, entendi agora o seu problema.

Bom, o Aggregator é quase igual a um Builder, com a diferença na hora de invocar os colaboradores, tendo que prever a assincronissidade deles.

Então … é assim mesmo né? Tipo, não há uma saída genérica ou um modo de “montar” a mensagem sem estar amarrado ao contexto da aplicação (e colocar um monte de buildPart() no meio do código que tava tão bonitinho)

Meu deu um nó o cara falar em filter … não vi um filtro na minha solução.

EDITADO: o filtro estaria se ao invés de eu montar a mensagem antes do envio eu enviasse as mensagens separadas e montasse depois, pra isso eu teria um filtro pra selecionar as mensagens, certo?