La decisione di stabilire se qualcosa è stato modificato o meno è preferibile a una raccolta di oggetti che possono eseguire il rilevamento delle modifiche o il controllo sporco. Il tuo modello di visualizzazione non è il posto migliore per questo.
Avere un insieme di classi chiamato "modello di dominio" contenente la logica aziendale e l'utilizzo di un ORM (Object Relational Mapper) può eseguire il controllo sporco dei modelli di dominio invece del modello di visualizzazione.
Germán ha detto:
It is not the view model. Its the model of the mvc.
Ruby on Rails lo ha reso popolare, ma avere una raccolta di "modelli" per l'intera applicazione presenta alcuni inconvenienti, principalmente in base al fatto che la logica di visualizzazione e formattazione si confonde con la logica aziendale. Questo è il motivo per cui negli ultimi anni i "modelli di visualizzazione" sono diventati più popolari, con "modelli di dominio" contenenti la logica aziendale. Se si dispone di questa separazione, il rilevamento delle modifiche desiderato può essere realizzato con un ORM come Entity Framework o NHibernate .
Monitoraggio delle modifiche agli oggetti e concorrenza ottimistica da Microsoft inizia nella giusta direzione, ma è un po 'troppo per la tua applicazione. In realtà, la ricerca del tracciamento delle modifiche all'oggetto c # nel tuo motore di ricerca preferito può darti alcuni buoni esempi. Dopo una rapida ricerca, il pacchetto ChangeTracking NuGet sembra un buon candidato.
L'idea principale è che qualcos'altro sta monitorando i valori del tuo oggetto prima e dopo un'operazione per vedere cosa è cambiato, in modo che i tuoi modelli / modelli di visualizzazione / modelli di dominio non debbano rilevare manualmente queste modifiche.
Germán ha commentato:
The model is based on events. A dirty check should be performed, but when? Something could go wrong if I try to access data between an edition and a dirty check.
In tal caso, leggere l'articolo di Microsoft che ho postato sopra potrebbe essere la soluzione migliore. A giudicare dai nomi dei tuoi metodi nell'esempio di codice, sembra che tu stia usando Java. Mentre l'articolo di Microsoft si concentra su C #, gli stessi principi di base si applicano a Java. Una ricerca di tracciamento delle modifiche agli oggetti java potrebbe anche prestarsi a soluzioni più specifiche per il tuo stack tecnologico.