| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/02/2010 18:01:48
|
Jean_Utf
Thread.start()
Membro desde: 26/03/2008 19:21:15
Mensagens: 46
Offline
|
Alguém conhece um padrão para desenvolvimento de Camada de protocolo?
Por exemplo, o meu sistema recebe mensagens binárias e deve interpretar de que tipo é essa mensagem,
para tomar a decisão de que objetivo criar.
Pode haver mensagens do tipo A, B, C... meu sistema deve "olhar" dentro do pacote e instanciar
o objeto MensagemA, ou MensagemB ou MensagemC.
Mais ou menos uma serealização e deserealização.
Se existir algum design pattern que aborde isso, vai ser bem vindo.
Não sei se fui claro.
Valeu.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/02/2010 09:01:10
|
brunohansen
JavaEvangelist
![[Avatar]](/images/avatar/1e0feeaff84a19bf3936e693311fa66d.jpg)
Membro desde: 27/03/2006 11:11:34
Mensagens: 391
Offline
|
Eu uso o Proxy para representar localmente objetos remotos.
Ainda não estou bem certo se é seu caso...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/02/2010 09:16:10
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20584
Localização: Curitiba/PR
Online
|
Eu utilizava os padrões Strategy juntamente com o FactoryMethod. O Strategy definia um conjunto de "MessageDecoders". Uma mensagem de protocolo pode precisar ser quebrada em duas ou três estruturas diferentes, por isso esse padrão era conveniente. O FactoryMethod era só uma interface na qual, dado um pacote, sabia que decoder escolher e como devolver o resultado.
This message was edited 1 time. Last update was at 08/02/2010 09:16:41
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/02/2010 09:41:48
|
Jean_Utf
Thread.start()
Membro desde: 26/03/2008 19:21:15
Mensagens: 46
Offline
|
Massa.. vou dar uma estudada pra ver se consigo adaptar no meu projeto.
Valeu!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/02/2010 09:48:22
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20584
Localização: Curitiba/PR
Online
|
O legal é que, como cada mensagem geralmente tem um message code, você pode criar um HashMap com o id da mensagem e o decoder. Aí vc só faz assim:
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/02/2010 10:06:09
|
Jean_Utf
Thread.start()
Membro desde: 26/03/2008 19:21:15
Mensagens: 46
Offline
|
Quase isso que estou fazendo... mas ao invez de um HashMap, eu uso um Factory.
O que tive de fazer diferente foi o retorno. Não posso retornar um Message porque quem espera
precisaria saber o tipo dessa message.
O que eu fiz foi uma Factory de ITratadorOperacao, com um método tratarOperacao(bytes), que no seu caso é o HashMap.
Eu seto os bytes nesse método, e a instância de ITratadorOperacao que recebi da factory, trata os dados.
Foi a única solução que pensei.
Valeu cara!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/02/2010 10:14:11
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20584
Localização: Curitiba/PR
Online
|
No caso o método decode() é o método fábrica.
Para testar o tipo da mensagem retornada, basta usar o instanceOf.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/02/2010 10:20:19
|
Jean_Utf
Thread.start()
Membro desde: 26/03/2008 19:21:15
Mensagens: 46
Offline
|
Sim, sim... poderia usar também um getTipo da vida e fazer um switch...
Mas quero fugir disso... tentar deixar o mais encapsulado e escalável possível.
Pra quando adicionarem um novo tipo de mensagem, eu tenha que alterar a menor quantidade (nenhuma de preferência) de classes possível,
e apenas ADICIONAR classes novas.
Mas é isso ae... valeu!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/02/2010 10:44:07
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20584
Localização: Curitiba/PR
Online
|
Eu usava novamente um map, que associava uma determinada class de mensagem a um MessageHandler. Depois, sempre que uma mesagem nova era criada, havia apenas 2 pontos do código a serem alterados: a) A criação de um novo decoder. b) A criação de um novo handler. A mensagem era codificada pela fábrica, e então entregue a todos os handlers, listeners daquela determinada classe. Eu também incluí um globalHandler para caso alguém queira ouvir absolutamente tudo (muito útil para geração de log).
This message was edited 1 time. Last update was at 08/02/2010 10:44:24
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/02/2010 14:12:57
|
Jean_Utf
Thread.start()
Membro desde: 26/03/2008 19:21:15
Mensagens: 46
Offline
|
Massa... vou utilizar essa idéia aqui.
Valeu!!
|
|
|
 |
|
|