Olá pessoal!
Acho que esse é um problema até comum…
Supondo que num domínio (no meu caso é de telefonia) existem várias coisas que tem que ter um histórico, por exemplo:
- que ramais pertecem a qual pessoa/departamento numa certa data
- que tarifas telefônicas estavam em vigor numa certa data
- que impostos eram cobrados numa certa data
- que operadoras telefônicas existiam numa certa data
- que números de telefone perteciam a uma operadora numa certa data
Então, tendo várias Classes que precisam ter data, numa primeira idéia eu pensei em fazer uma super classe abstrata comum que teria atributos validadeInicio e validadeFim. Quando validadeFim fosse null é o objeto em vigor atualmente.
Aqui uso MySql e Hibernate, mapeando cada hierarquia de objetos numa tabela. Usando a solução acima eu perderia a verificação de banco do unique, pois teria várias cópias da mesma coisa na mesma tabela.
Outra coisa é que, imaginando os objetos Operadora Telefonica, Central Telefonica e Numeros de Telefone, todos possuindo uma data histórica. Se uma Operadora possui Centrais que possui Números de Telefone, quando eu altero um Número de Telefone devo gerar histórico também da Central e Operadora que a possuem? E o contrário, quando altero Operadora e gero uma cópia histórica dela, devo gerar histórico de Centrais e Números de Telefone também?
Dei uma olhada num Tópico relacionado, conheço o pattern Memento e li sobre um Analisys Pattern Snapshot do Martin Fowler. Tem umas outras complicações também do tipo relações bitemporais (Temporal databases no wikipedia).
Alguém tem sugestões, opiniões, experiências ou links para pesquisa que possam compartilhar sobre esse assunto?
Obrigado!
