Sto scrivendo un'applicazione PRISM/MVVM/WPF. È un'applicazione LOB, quindi ci sono un sacco di regole complicate. Ho notato che il View Model sta iniziando a gonfiarsi. Ci sono due problemi principali.Refactoring Bloated ViewModel
Uno è che per mantenere MVVM, sto facendo un sacco di cose che ritengono hacky come aggiungere un sacco di proprietà alla mia VM. La vista si lega a quelle proprietà per tenere traccia di ciò che sembra ricevere informazioni specifiche. Ad esempio, un booleano tiene traccia dello stato di un lungo processo in esecuzione nella VM, quindi la vista può disabilitare alcuni dei suoi controlli mentre il processo a lunga esecuzione funziona. Ho letto che questo problema potrebbe essere risolto con Attached Behaviors. Guarderò di più in questo. Nelle app MVVM di esempio che vedi online, questo non è un grosso problema perché sono troppo semplificate.
L'altro problema è il numero di comandi nella mia VM. In questo momento ci sono quattro comandi. Sto definendo i comandi nella VM usando RelayCommand di Josh Smith (fondamentalmente il DelegateCommand in PRISM) in modo che tutta la logica aziendale viva nella VM. Considerai di spostare ciascun comando in un'unità di lavoro separata. Non sono sicuro che il modo migliore per farlo.
Quali modelli state usando per mantenere pulite le vostre macchine virtuali? Posso già sentire qualcuno rispondere con "il tuo punto di vista e la VM è troppo complicata, dovresti suddividerli in molte view/VM". Non è certamente troppo complicato da una prospettiva di Ux: ci sono 2 pulsanti, una combobox e una listbox. Inoltre, da una prospettiva logica, è un dominio coesivo. Detto questo, sono molto interessato ad ascoltare come gli altri hanno a che fare con questo tipo di problema.
Grazie per l'input.
commento stupido, ma non posso resistere: "cosa c'è di sbagliato con gonfiare"? È un modo di vivere, un modo di sviluppo del software ;-) –
Ottima domanda. Il mio viewPodel WPF è pieno di hack per aggirare le limitazioni in WPF quando si cerca di fare correttamente MVVM. La maggior parte di queste cose è banale in un'app MVP WinForms. – Damien
Potrebbe essere possibile verificare MVPVM. Separa essenzialmente la VM in modo che la VM si occupi solo di associazione dati e la Presenter gestisce i comandi. Non mi piace il modo in cui perdi la comodità del comando bind ma lo fa per una VM più pulita. – bygrace