imaginem que tenho um sistema que mapeia uma tabela de um banco de dados num objeto, através do padrão DAO.
Tenho um campo na tabela que é mapeado para um atributo da classe correspondente. Se eu instanciar um objeto, correspondendo a um registro, gostaria de alterar este atributo toda vez que alterassem o campo relativo na tabela do BD.
É algo semelhante ao padrão Observer: quero que o objeto esteja inscrito como “ouvinte” da tabela, e altere seu atributo toda vez que alteremos a tabela.
Como fazer isso de maneira bonita do ponto de vista de OO ?
Nai sei se entendi direito, mas se você quiser alterar dados de outras tabelas quando uma é alterada você pode utilizar triggers. Acho que isso resolveria o seu problema.
Olha, nunca passei por uma situação como essa. Mas acho que se você está implementando a parte de persistencia no banco, você consegue capturar a alteração antes de ela ser efetuada, isso não resolveria o problema?
Na verdade os usuários alteram ao banco através de um sistema, e eu estou programando um outro sistema que vai atuar somente como leitor deste banco. Eu quero saber quando os usuários alteram o banco e realizar operações específicas.
É simples assim: eu quero programar um “listener” de banco de dados.
Se qualquer aplicação (incluindo aplicações não-Java) estiverem alterando a tal tabela, talvez seja necessário criar um trigger que logue as alterações em uma outra tabela. Aí você, periodicamente, consulta a tal tabela. Mas isso é uma “solução genérica”.
Veja a documentação do seu banco de dados (e diga qual é o seu banco, oras!) para ver qual é a melhor solução para seu caso.
Se o que você quer implementar é um log de auditoria, ou então um sistema de replicação, existem coisas prontas (às vezes no próprio banco, às vezes como produto de terceiros).