Dopo aver fatto un paio di progetti che utilizzano il modello MVVM, Im ancora alle prese con il ruolo del ViewModel:MVVM: ViewModel e Business Logic collegamento
Quello che ho fatto in passato: Usando il modello solo come un contenitore di dati . Mettere la logica per manipolare i dati nel ViewModel. (Questa è la logica aziendale?) Contro: la logica non è riutilizzabile.
Cosa sto provando ora: Mantenere ViewModel il più sottile possibile. Spostamento di tutta la logica nel livello del modello. Solo mantenendo la logica di presentazione nel ViewModel. Con: Rende la notifica UI davvero dolorosa Se i dati vengono modificati all'interno del livello del modello.
Quindi vi darò un esempio per renderlo più chiaro:
Scenario: strumento per rinominare i file. Classi: File: rappresentazione di ogni file; Regola: contiene la logica su come rinominare un file;
Se Im seguente approccio 1: Creazione di un ViewModel per file, regola e la vista -> RenamerViewModel. Inserimento di tutta la logica in RenamerViewModel: Contenente un elenco di FileViewModel e RuleViewModel e la logica procedurale. Facile e veloce, ma non riutilizzabile.
Se Im seguente approccio 2: Creazione di una nuova Classe Modello -> Renamer, che contiene un elenco di file, regola und Logica procedere alla interate su ogni file e applicare ogni regola. Creazione di un Viewmodel per file, regole e Renamer. Ora il RenamerViewModel contiene solo un'istanza di Renamer Model, più due ObservableCollections per racchiudere il file e l'elenco delle regole del Renamer. Ma l'intera logica si trova nel modello Renamer. Quindi, se il Renamer Model viene attivato per manipolare alcuni dati tramite chiamate di metodi, ViewModel non ha alcun indizio su cui i dati vengono manipolati. Poiché il modello non contiene alcuna notifica PropertyChange e lo eviterò. Quindi la logica aziendale e di presentazione è separata, ma ciò rende difficile la notifica all'interfaccia utente.
La parte Notification è sempre descritta come la parte ViewModel, ecco perché eviterei di farlo nel Modello. Sembra di fare la stessa cosa due volte. – JDeuker
@ J.D .: certo, ma è quello o l'implementazione dei servizi. La tua chiamata. – Jon
@Jon: +1 per "non farlo mai". Gli sviluppatori abituati al modello N-tier tendono a dimenticare che è OK aggiungere i riferimenti alle librerie WPF alla VM, per restituire oggetti complessi che richiedono la composizione, come un FlowDocument. –