Domanda

Sto lavorando su un'applicazione WPF, e sto strutturando utilizzando il modello MVVM. Inizialmente ho avuto un'idea che le ViewModels dovrebbero essere riutilizzabile, ma ora non sono più troppo sicuro.

  • Dovrei essere in grado di riutilizzare i miei ViewModels se ho bisogno di una funzionalità simile per un'applicazione WinForms?
  • Silverlight non supporta tutte le cose WPF fa - dovrei essere in grado di riutilizzare per le applicazioni Silverlight?
  • Che cosa succede se voglio fare una GUI Linux per la mia applicazione. Poi ho bisogno del ViewModel per costruire in Mono - E 'questo qualcosa che dovrei sforzo per?
  • E così via ..

; si dovrebbe scrivere classi ViewModel con una specifica vista in mente, o pensare di riusabilità?

È stato utile?

Soluzione

Per rispondere alla tua domanda, pensare a Responsabilità unico principio:

  

"Una classe dovrebbe avere uno, e solo   uno, motivo di cambiare ".

Direi, entro limiti ragionevoli, in genere non si vuole riutilizzare un ViewModel per più viste. Il motivo principale direi per questo, è perché sarebbe dare il vostro ViewModel più di un motivo per cambiare. In altre parole, sarebbe bisogno di cambiare se uno o l'altro vista cambia, e, a mio parere, che è due motivi per cambiare. Dove si ferma? Mi piacerebbe mantenere le cose semplici in questo caso, e si legano uno ViewModel alla vista.

Un'altra cosa a cui pensare con MVVM con WPF è dati Templating. E 'molto più facile da realizzare se ogni ViewModel si rivolge a una e una sola vista.

Altri suggerimenti

Proprio in generale, applicare il principl YAGNI - probabilmente non si ha intenzione di averne bisogno. A meno che non si possono vedere queste cose come potenzialmente accadendo, mi piacerebbe tenere con l'approccio più semplice per ottenere il vostro software di lavoro per i requisiti che hanno attualmente.

Nella mia mente, l'obiettivo principale di MVVM è quello di eliminare il codice che non possono essere facilmente testato da unit test . Poiché un modello di vista può essere testato unità ma una vista non può, ciò si ottiene facendo la vista come muto possibile. Idealmente, come può essere fatto con XAML, la vista è completamente data-lega dichiarativi e solo su un modello di vista. Di qui il "no code-behind" mantra.

La riutilizzabilità del modello vista attraverso diverse tecnologie di interfaccia utente non è realmente un obiettivo di MVVM. Se lo provate probabilmente sarete tentati di spostare il codice specifico per la tecnologia di interfaccia utente alla visualizzazione di nuovo per mantenere la vista del modello riutilizzabile. Ciò andrebbe contro l'obiettivo principale di verificabilità.

Se davvero trovate a dover supportare diverse tecnologie di interfaccia utente, allora si poteva ancora scomporre la logica comune dei modelli vista in uno strato "presentazione" condivisa. Io non lo farei fino sicuri che è necessario però.

Questa è una vecchia questione, così ho esitato per aggiungere un'altra risposta. Ma tutte le risposte pubblicate finora hanno perso il punto. La risposta da MSDN è molto chiaro : Il ViewModel è molto specificamente destinate ad essere condivisa da molti viste vari sistemi operativi, come dimostrato in questa figura:

entrare descrizione dell'immagine qui

Fare altrimenti sarebbe inevitabilmente codice ridondante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top