5

Widziałem to na całym SO, blogach i książkach, gdzie autorzy mówią, że dodajesz ViewModels specyficzne dla twojego widoku w twoich projektach Modelowych jako owijki dla twoich podstawowych obiektów modelu. Chodzi o to, aby było to bardzo proste i ukierunkowane, gdy idziesz do wiązania modelu z widokiem. Oto dobry przykład: Rendering and Binding Drop Down Lists using ASP.NET MVC 2 EditorForCzy korzystanie z ViewModels i odwołań do System.Web.Mvc narusza wzór MVC?

Jednak trochę mnie irytuje fakt, że istnieją odniesienia do System.Web.Mvc w moim modelu, który w przeciwnym razie mógł zostać użyty do wielu gniazdek (być może API WCF, Silverlight itp.), ale teraz mam konkretne odniesienia do bibliotek dll MVC, które będą wymagane do zbudowania mojego projektu modelu.

Moje pytanie brzmi: czy to narusza wzorce MVC, gdy zaczynamy dodawać IEnumerable<SelectListItem> do naszych klas modeli? I czy istnieje realna alternatywna warstwa, aby przenieść to i jak, tj. Kontroler?

Wszelkie uwagi lub komentarze doceniane.

+0

spójrz na przykładowy projekt mvc stąd http://valueinjecter.codeplex.com/, robi się to bez jakiejkolwiek logiki w viewmodels – Omu

Odpowiedz

5

Ja osobiście tworzę tylko listę wyboru w locie w widoku, z bardziej wielokrotnego użytku listy IEnumerable w moim modelu, co oznacza, że ​​mój model nie ma nic związanego z SelectListami, SelectListItems lub czymkolwiek specyficznym dla MVC.

Przykład jak obiecał - utworzyć SelectList w widoku, przy użyciu wszystkich normalnych bity widok silnika ...

<%= Html.ListBox("SelectedStuff", 
     new SelectList(Model.SomeOptions, "id", "name", Model.SelectedStuff)) %> 
+0

czy tworzenie list wyboru w locie uniemożliwia użycie wpisanego widoki i ich odpowiedniki w metodzie HtmlHelper? – mirezus

+0

Nie - po prostu tworzysz listę wyboru wewnątrz widoku ... Dodam przykład do mojej odpowiedzi. – Fenton

+0

To wydaje mi się brzydkie;) Zawsze robię IEnumerable dla mojego modelu widoku w kontrolerze (który jest również specyficzny dla MVC) i uzyskuję czystsze widoki. – Necros

1

Nie, ViewModels są przeznaczone do spożycia przez widok i powinny być umieszczone w internecie projekt. Jednak twój rzeczywisty model nie powinien mieć odniesienia do MVC ani twojego projektu internetowego. Pomyśl o tym, że Twój ViewModel stanowi pomost pomiędzy tą siecią a Twoim Modelem.

3

ma to naruszać wzory MVC gdy możemy rozpocząć dodawanie IEnumerable do naszych klas modelu?

Nie bardzo, ALE jeśli próbujesz użyć Domain Driven Design lub oddzielenia problemów pomiędzy Tobą a warstwą MVC/prezentacji niż jest to naruszenie.

  • Modele są twoimi obiektami, twoją domeną , twoimi obiektami warstwy biznesowej.

  • ViewModels to ekrany, formularze księgowań, wyświetlaj wiaderka danych.

Modele map do modeli ViewModels, które mogą zawierać elementy zależne od MVC. Pomyśl, czy to w ten sposób, ViewModels są bezpośrednio dla MVC. Modele mogą dotyczyć usługi, winform, WPF lub dowolnej programowej prezentacji systemu sytemu biznesowego.

Powiązane problemy