Eae galera, vai aí uma pergunta pra quem conhece bem os padrões DAO, Observer, MVC e swing! Sei que é uma pergunta cansativa, então sinta-se a vontade para responder ou não =)
Estou acostumado a trabalhar com Java Web, e implementar o padrão MVC nunca foi problema, tanto usando Servlets quanto outro framework MVC (como Struts ou JSF). Porém, comecei a desenvolver uma aplicação swing, e me deparei com algumas dificuldades implementando este padrão.
Com base nesta implementação “diferenciada” MVC, disponível no site da oracle: http://www.oracle.com/technetwork/articles/javase/mvc-136693.html
Notei que ele propõe fortemente o uso do padrão observer (listeners) para deixar a arquitetura flexível entre a camada Model - View;
1- uma ação é tomada no formulário (clique de um botão, propriedade de um campo mudada, enfim)
2- o formulário executa um método do controlador
3- o controlador itera todos os beans que estão observando ele, e toma a ação necessária (muda o valor de uma propriedade do bean)
4- ao mudar uma propriedade do bean, o bean alerta todos os controllers observadores
5- os controllers observadores alertam todos os formulários observadores
Esta arquitetura é perfeita em uma aplicação que não tem banco de dados! Os formulários serão sempre notificados sobre as mudanças de outro, ou seja, posso ter vários formulários abertos compartilhando um bean, e ao mudar uma propriedade deste bean, todos os formulários serão atualizados.
Porém, ao adicionar a camada DAO, segue o problema: o Bean em sí, terá apenas papel de um transfer-object, ou seja, ele muitas vezes não representará a informação que eu quero que os formulários sejam notificados (por exemplo, em um formulário que tenha uma grid, eu quero que um List de beans sejam delegados a ela, não um único bean).
A solução que estou pensando é: adicionar uma nova camada ao software, na qual tenha componentes que representem as informações da tela (similares aos backing beans do JSF), sendo que estes seriam os objetos a serem amarrados na lista de observadores.
Se alguém puder me esclarecer se esta é uma solução é a viável, agradeço!