Classe modello di composizione con funzione di modifica

3

Ho una classe modello come sotto. Ho bisogno di modificare gli oggetti, ma il modello deve sapere quando qualsiasi oggetto è stato modificato. Inoltre ho bisogno di fornire molto spesso gli oggetti all'interno della vista, che è chi li modificherà eventualmente. Ecco perché ho bisogno di un metodo di modifica, ma non conosco un modo corretto per farlo.

public class Container {
    private List<Item> items;

    public Item get(int index) {
         return items.get(index);
    }

    //edit method here
    //notify edit
}
    
posta germanfr 07.06.2016 - 15:14
fonte

2 risposte

1

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.

    
risposta data 07.06.2016 - 16:47
fonte
0

Because Item objects have one field that is in another collection in the model. If one changes the other must update, so that's why I need to know

Questo è il schema di osservazione . Non sono sicuro che tu abbia a che fare con 1: 1 o 1 con 1 poiché hai indicato che ci sono due raccolte ma lo schema osservatore è fondamentalmente una cosa che tiene una collezione di tutte le cose che si preoccupano del suo stato e dire quelle cose quando quello stato cambia. Queste cose potrebbero essere una cosa se 1 a 1 è ciò di cui hai bisogno.

Nulla dice che non potresti avere tre raccolte in corso prima del tuo completamento. Assicurati che ognuno abbia una buona ragione per esistere.

    
risposta data 08.06.2016 - 13:27
fonte

Leggi altre domande sui tag