Melhor maneira de lidar com o estado sujo em um modelo ORM

Eu não quero ninguém dizendo"você não deve reinventar a roda, use um open source ORM"; Eu tenho um requisito imediato e não posso mudar.

Eu estou fazendo um pequeno ORM, que suporta o armazenamento em cache. Mesmo não suportando o cache, eu precisaria desse recurso de qualquer forma, para saber quando escrever um objeto para armazenamento ou não. O padrão é o DataMapper.

Aqui está minha abordagem:

Eu quero evitar a introspecção em tempo de execução (ou seja, adivinhando atributos).Eu não quero usar um gerador de código CLI para gerar getters e setters (realmente eu uso o NetBeans, usando ALT + INSERT).Eu quero que o modelo seja o mais próximo de um POPO (antigo objeto PHP simples). Quero dizer: atributos privados, getters e setters "codificados" para cada atributo.

Eu tenho uma classe abstrata chamadaAbstractModel que todos os modelos herdam. Tem um método público chamadoisDirty() com um atributo privado (também pode ser protegido, se necessário) chamado is_dirty. Ele deve retornar true ou false dependendo se houver uma mudança nos dados do objeto ou não desde que ele foi carregado.

A questão é: Existe uma maneira de levantar a bandeira interna"is_dirty" sem codificação em cada setter$this->is_dirty = true? Quero dizer: eu quero ter os setters como$this->attr = $value na maior parte do tempo, exceto que uma alteração de código é necessária para a lógica de negócios.

Outra limitação é que não posso confiar__set porque na classe do modelo concreto os atributos já existem como privados, então__set nunca é chamado nos setters.

Alguma ideia? Exemplos de código de outros ORMs são aceitos.

Uma de minhas ideias foi modificar o modelo de definidores do NetBeans, mas acho que deveria haver uma maneira de fazer isso sem depender do IDE.

Outro pensamento que eu tinha era criar os setters e, em seguida, alterar o nome do atributo privado com um sublinhado ou algo assim. Desta forma, o levantador ligaria para__set e ter algum código lá para lidar com o"is_dirty" bandeira, mas isso quebra o conceito POPO um pouco, e é feio.

questionAnswers(3)

yourAnswerToTheQuestion