[RESOLVIDO] Duvida em relação ao padrão de projeto OBSERVER

18 respostas
leokaos

Seguinte: no sistema q estou trabalhando eu tenho uma entidade IMOVEL. O sistema tem q exportar diariamente uma quantidade x de imoveis para dois portais: PORTAL A e PORTAL B. entaum, criei uma classe abstrata, CONTROL, para que controlasse a conversão de um IMOVEL para um padrão qq e enviasse ao destino adequado, PORTAL A webservice e PORTAL B uma base MySQL externa. Daí surgiram duas classes CONTROL_PORTAL_A e CONTROL_PORTAL_B que fazem a conversão de uma lista de IMOVEL para o formato adequado. Além disso, para facilitar a manipulação dessa lista, criei uma interface, CONVERTER, de forma q passado um imovel eu tenha ele convertido no formato adequado, CONVERTER_PORTAL_A e CONVERTER_PORTAL_B , até aki maravilha. entretanto, quero colocar essas duas classes control sendo observadas por um JFrame q atualizaria uma JProgressBar. Minha duvida é a seguinte, como criar um arquitetura de notificação de forma q eu consiga mandar o valor da ProgressBar e a string q quero mostrar? eu pensei no seguinte: mandar a string + “#” + valor, atraves do metodo notifyObservers(Object arg) ,mas achu q seria mta gambiarra.

18 Respostas

FernandoFranzini

Bom…eu não entendi seu contexto, pq vc explica coisas fora da sua duvida…
A intenção principal para o observer é notificar indeterminados objetos da mudança de outro dinamicamente…
Ou seja, não entra no seu cenário descrito…
Concluindo, pelo que vc descreveu, vc não tem cenário para aplicar o observer.

leokaos

vlw pela resposta!!

assim, na classe CONTROL_PORTAL_A eu quero mostrar o progresso dela numa JProgressBar, entaum pensei em cada vez q uma fase importante acontecer eu notificar a JProgressBar para mudar o valor e a string dela, dessa forma naum posso usar o Observer?

FernandoFranzini

leokaos:
vlw pela resposta!!

assim, na classe CONTROL_PORTAL_A eu quero mostrar o progresso dela numa JProgressBar, entaum pensei em cada vez q uma fase importante acontecer eu notificar a JProgressBar para mudar o valor e a string dela, dessa forma naum posso usar o Observer?


Acredito que não…
Acho JprogresseBar com um threadzinha separada ja resolve…

leokaos

mas aih como eu faria? passaria a Jprogressbar para CONTROL_PORTAL_A via metodo ou no construtor? naum queria juntar interface com modelo…

FernandoFranzini

leokaos:
mas aih como eu faria? passaria a Jprogressbar para CONTROL_PORTAL_A via metodo ou no construtor? naum queria juntar interface com modelo…

Qualquer um…

leokaos

entaum mas aih eu naum estaria misturando o modelo com a interface? se amanha eu quiser mudar de progressbar para um label, terei q mexer na classe do modelo, o q eu queria era seguir o modelo MVC, deixando como mostrar os dados para a interface e o modelo apenas avisasse a interface de uma modificação no estado… naum eh assim o modelo MVC?

FernandoFranzini

leokaos:
entaum mas aih eu naum estaria misturando o modelo com a interface? se amanha eu quiser mudar de progressbar para um label, terei q mexer na classe do modelo, o q eu queria era seguir o modelo MVC, deixando como mostrar os dados para a interface e o modelo apenas avisasse a interface de uma modificação no estado… naum eh assim o modelo MVC?

Como vc esta apenas relatando seu problema sem restrições ou cenários eu apenas estou te dando sugestões…
Realmente vc esta certo…caso não queira furar MVC…vai ter q fazer um callback polimórfico…
Mas ainda não é obsever…

leokaos

eita essa eu nunca tinha ouvido :frowning: como faço isso?

FernandoFranzini

leokaos:
eita essa eu nunca tinha ouvido :frowning: como faço isso?

kkkkk
Parte do observer é feito com calback…

leokaos

ok vou verificar

leokaos

opa essa implementação que vc me passou realmente é mais trabalhosa, mas achu q mto melhor em termos de OO… jah implementei e tah funcionando maravilha vlw!!!

FernandoFranzini

JSE ja tem observer pronto!! Não precisa fazer na unha… java.util.Observable

leokaos

caro FernandoFranzini,

olhando depois com mais calma a documentação e o artigo q o wellington.nogueira me passou sou obrigado a concordar com o artigo. para fazer observable com java do jeito q vc havia dito, é realmente MTO ruim, alto acoplamento entre os componentes é realmente uma caracteristica que naum serve para os sistema atuais. e o fato de ter q estender a classe Observable e o fato de java naum possuir herança multipla, tb eh extremamente ruim…

além do mais, do jeito do artigo vc consegue criar novos eventos e adicionar facilmente coisa q vc naum teria do outro jeito já q vc teria q mexer dentro da classe q tem o metodo update. Do outro jeito basta estender o evento para criar um novo.

vlw mesmo assim!!!

FernandoFranzini

leokaos:
caro FernandoFranzini,
olhando depois com mais calma a documentação e o artigo q o wellington.nogueira me passou sou obrigado a concordar com o artigo. para fazer observable com java do jeito q vc havia dito, é realmente MTO ruim, alto acoplamento entre os componentes é realmente uma caracteristica que naum serve para os sistema atuais. e o fato de ter q estender a classe Observable e o fato de java naum possuir herança multipla, tb eh extremamente ruim…
além do mais, do jeito do artigo vc consegue criar novos eventos e adicionar facilmente coisa q vc naum teria do outro jeito já q vc teria q mexer dentro da classe q tem o metodo update. Do outro jeito basta estender o evento para criar um novo.
vlw mesmo assim!!!

Eu discordo de vc’s por alguns motivos:

  1. Tome cuidado com que vc leem por ai…quando alguem disse “isso não é bom” esta contextualizando um ou um conjunto de aplicações podendo não ser verdade para outros cenários. Normalmente temos que entender o contexto da coisa.
  2. A implementação do obsever do java é compatível com o GOF e pode ser usado sem nenhuma restrição.
  3. A pontuação arquitetural do camarada do link indicado foi características de falta de flexibilidade em cima de 1 implementação desse padrão …isso não quer dizer que é ruim ou não funciona…Eu mesmo poderia apontar outros problema na implementação sugerida…pontuando coisas que O MEU CONTEXTO poderia estar pedindo…
    Por exemplo vc disse… do jeito do artigo vc consegue criar novos eventos e adicionar facilmente mas se eu preciso do observer sem a necessidade de criar novos eventos? na verdade é tudo uma questão de cenário.
  4. O padrão é apenas uma referencia…vc pode fazer a sua variação do padrão dependendo do cenário da sua necessidade…
leokaos

caro FernandoFranzini,

acredito que mesmo em outro contexto, o fato de vc ser forçado a estender a classe de observable já um fator decisivo, naum? se fosse em C++, eu até concordo pq tem herança multipla… sobre criar um novo evento, achu q eh mais correto pois naum aumenta o acoplamento entre componentes facilitando a vida…

achu a implementação de listeners é melhor… realmente naum consigo pensar num cenario onde observable eh melhor… vc poderia me dar exemplos de cenarios onde o observable eh melhor que o modelo de listener? apenas para melhorar a discussão…

FernandoFranzini

Se na sua solução a classe observable já herdada de alguem…é um problema sim. Caso contrário não.
Mesmo assim se fossem existem formas de se contornar isso…
Como eu falei tudo depende do contexto…
Não quero entrar em discussões de cenários aqui, se vc já conclui que a implementa do jeito tal é melhor para vc…tudo bem! vai em frente.
Não é isso q esta em questão.
T+

WellingtonRamos

Não sei qual implementação de Observer você está usando mas sugiro dar uma olhada neste artigo: http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/arqu/observer.htm

WellingtonRamos

leokaos:
opa essa implementação que vc me passou realmente é mais trabalhosa, mas achu q mto melhor em termos de OO… jah implementei e tah funcionando maravilha vlw!!!
Concordo contigo.

@FernandoFranzini o artigo cita essa implementação e descreve motivos para não utilizar o Observable.

Criado 13 de setembro de 2011
Ultima resposta 14 de set. de 2011
Respostas 18
Participantes 3