2009-06-02 10 views
12

Che tipo di convenzione di denominazione è appropriata per le classi ViewModel?Come chiamate le classi ViewModel?

Esempio: per HomeController, Vista indice? HomeIndexViewModel non sembra giusto.

risposta

2

EmployeesViewData.

Questo è quello che uso e quello che ho visto nelle applicazioni di esempio.

Informazioni sull'esempio aggiunto: Imho il nome della classe deve specificare il tipo di dati che contiene. ".... IndexViewData" è piuttosto privo di significato. Cosa viene visualizzato esattamente in quella pagina? Prova a sintetizzarlo in 1 o 2 word (s) e aggiungi "ViewData" dietro di esso.

Oppure basta prendere il nome del controller e rilasciare l'"indice". HomeViewData mi suona bene.

0

Preferisco HomeViewModel, o utilizzando l'esempio di impiegato precedente, CreateEmployeeViewModel, EditEmployeeViewModel, ecc. L'idea è che "ViewModel" enfatizzi il fatto che abbiamo a che fare con problemi di presentazione e disambigura ViewModels da qualsiasi oggetto del modello di dominio che tu possa avere.

1

Cerco di mantenere i nomi dei miei modelli di presentazione agnostici sul tipo di presentazione con cui verranno presentati. Potrei usare inizialmente il mio oggetto modello per una vista ASP.NET, ma in seguito potrei anche usarlo in un'app WCF o WinForms. Provo a chiamare i miei modelli in modo tale da logicamente descrivono ciò che essi contengono, senza confondere con "Viewdata", "ViewModel", "Modello", ecc

Esempi:

ProductsWithPageInfo 
ProductWithAttributesAndTags 
ClientAndBillingDetail 
UserAccountWithAssociatedGroups 

Ecc

+0

Cosa stai facendo se hai una pagina che ne ha più di una, diciamo una pagina con ProductsWithPageInfo che richiede anche ProductWithAttributesAndTags? – Alex

+0

Bene, questi tipi sono già aggregazioni di altri tipi. Ad esempio, ProductsWithPageInfo ha un IList , int PageNumber e int PageCount. Ogni oggetto "modello" di presentazione contiene tutto ciò che è necessario per rendere una vista particolare. A volte, se c'è un sacco di cose in un modello, aggiungerò Etc alla fine: ProductAttributesPurchaseHistoryEtc, dove Etc significa piccoli dettagli (come numero di pagina e conteggio) che non devono essere rappresentati nel nome del classe. Nel caso del tuo esempio: ProductsWithAttributesAndTagsEtc – jrista

0

Ho usato il termine busta come parte dei miei nomi, che ho iniziato a utilizzare poco prima di leggere il capitolo 1 del libro Wrox e ho scoperto che il termine più comunemente accettato è ViewModel.

Tuttavia, questi ViewEnvelopes che creo sono solo per l'incapsulamento molto semplice quando ho due o più modelli (tipicamente non correlati) fortemente tipizzati che mi piacerebbe consegnare alla mia vista. Lo fanno non contengono qualsiasi altra funzionalità --- la busta è intesa solo come meccanismo di consegna in questo senso, mentre il termine ViewModel, per me, sembra meno descrittivo per come lo sto usando, e forse anche più ambiguo da qual è il suo vero scopo.

Potrei creare, ad esempio, una classe CustomerUpdateEnvelope che esiste esclusivamente per consegnare un oggetto Cliente e un oggetto NewsTicker non correlato, ad esempio, alla mia vista Aggiornamento cliente.

21

Io uso il seguente schema, perché è chiaro e inequivocabile:

  • Modello: Foo
  • Vista: FooView
  • ViewModel: FooViewModel
0

piuttosto tardi per questo particolare filo, ma Ho scritto alcuni suggerimenti leggermente più dettagliati su ViewModel naming conventions in un post del blog, che potrebbe essere utile ad altri.

Problemi correlati