Progettazione di un'applicazione MVVM [chiuso]
-
27-10-2019 - |
Domanda
Sono qui molto scettico sul design della mia applicazione .....
Ecco il diagramma per la mia applicazione
è giusto ??ot ho bisogno di cambiare qualcosa ...
Elaborerò il diagramma ....:
Libreria comune: contiene classi ErrorCodes, classi di utilità ecc.
Logger: quadro di registrazione
Gestione delle eccezioni: Framework per la gestione delle eccezioni
Visualizza: contiene: tutti i diversi XAML per visualizzazioni come UserControls, Windows, Popup
ViewModel: contiene ViewModel per le diverse viste.
Modello: contiene i diversi livelli come ... Livello aziendale, livello di accesso ai dati ecc.
Livello entità: contiene gli oggetti entità come dipendente, azienda, ecc.
Casella file: specifica la lettura / scrittura da un file / database ....
Soluzione
È difficile dire cosa stai cercando di fare con la tua domanda, ma a mio parere i livelli MVVM dovrebbero assomigliare a questo:
Modello : dati grezzi e convalida di dati non elaborati. Forse anche un
INotifyPropertyChanged
, ma nient'altroViewModel : logica aziendale, accesso ai dati, convalida avanzata basata su regole aziendali e così via
Visualizzazioni : grazioso livello dell'interfaccia utente che consente agli utenti di interagire con i ViewModel. Nient'altro.
Ad esempio, un modello potrebbe avere una proprietà File
, ma non dovrebbe essere responsabile della visualizzazione della finestra di dialogo del file, del salvataggio del file nel database o della verifica che il file abbia un'estensione .pdf. Questo genere di cose è compito del ViewModel.
<”Modifica
Vedo l'aggiornamento che hai apportato alla tua domanda. È un buon inizio, ma ecco i problemi che ho con esso:
-
I tuoi modelli dovrebbero essere oggetti di dati grezzi. Non dovrebbero contenere nulla di più avanzato di qualcosa come la convalida della lunghezza di una proprietà.
-
Onestamente non consiglierei di separare le viste, i modelli e i modelli di visualizzazione in 3 livelli separati. L'ho fatto una volta e si è rivelato essere un incubo di manutenzione. Ora metto insieme tutti gli oggetti correlati. Ad esempio, metterei
FileModel
,FileViewModel
eFileView
insieme eSearchModel
,SearchViewModel
eSearchView
insieme -
Creerei un livello di accesso ai dati che sarebbe responsabile di eseguire tutti i dati di lettura / scrittura nel / dal database (suppongo che questo potrebbe essere il tuo "livello entità").
-
Per piccoli progetti, tendo a usare i miei oggetti entità come i miei modelli, quindi i modelli diventano parte del mio livello DAL, anche se so che non è consigliato.
-
Non dimenticare che con MVVM i tuoi ViewModels sono la tua applicazione, non le tue viste. La vista dovrebbe riflettere il contenuto del ViewModel e non viceversa.