Sto affrontando un problema in cui ho un modello per il quale voglio implementare una GUI. Poiché sto esplorando MVVM e WPF, ovviamente utilizzerò un modello di visualizzazione tra la vista e il modello. Avrò anche bisogno di aggiungere coordinate ad alcune classi di modelli che rappresentano oggetti che possono essere trascinati nella GUI. Al momento, questa è l'unica aggiunta a queste particolari classi di modelli di cui ho bisogno. Almeno in questo momento. Allo stesso tempo, quasi tutte, se non tutte, le informazioni contenute negli oggetti del modello sono interessanti per la vista.
Le classi di modelli più importanti sono:
- Tabella
- Colonne
-
Dipendenze
-
Le tabelle conoscono le sue colonne.
- Le colonne sanno a quale tabella appartengono.
- Le colonne sanno 1 .. * Dipendenze
- Le dipendenze conoscono 1 .. * colonna rappresenta una dipendenza per.
Ovviamente sarebbe possibile modificare il modo in cui questi oggetti si conoscono, se necessario.
La vera domanda qui però è; Come faccio a rendere le classi modello disponibili per la vista, quando allo stesso tempo aggiungo le coordinate a tabelle, colonne e dipendenze?
Un modo potrebbe essere quello di creare qualcosa del genere:
public class TableViewModel
{
public Model.Table ModelTable { get; private set; }
public List<ColumnViewModel> Columns { get; set; }
public float X { get; set; }
public float Y { get; set; }
}
Si tratta di un modo preferibile per inoltrare un oggetto Modello "esteso" alla vista o esistono modelli appositamente progettati per questa attività?
L'eredità normale tra gli oggetti in Model e View Model funzionerebbe? Non sono sicuro, però, mi piace l'accoppiamento che potrebbe causare.
O dovrei creare classi del modello di vista che sono adattate per adattarsi alla vista e quindi mappare le proprietà dall'oggetto Model all'oggetto View Model? Questo rimuoverà completamente l'accoppiamento tra View e Model, ma creerà due oggetti in memoria, e in questo caso questi potrebbero essere modelli molto grandi. Il garbage collector lascerà cadere gli oggetti del modello poiché non ci saranno più riferimenti ad essi dopo che sono stati mappati sul modello di visualizzazione?