2009-06-17 15 views
8

Przeczytałem książkę Professional ASP.NET MVC 1.0, a także czytanie innych źródeł mówiących o użyciu ViewModel zamiast ViewData z kontrolerów do View. Ale widzę tak wiele przykładów ViewData używanych w scenariuszach, które są trudne tam, gdzie nie ma innego sposobu niż uzyskanie czegoś z ViewData. Ale potem czytałem książkę podobną do Pro ASP.NET MVC Framework i wszystko o czym mówi to tylko ViewData, nic o ViewModelu. Czy ViewModel to zupełnie nowa koncepcja?Aby użyć ViewData lub nie używać ViewData

Widzę, że ViewModel jest o wiele lepszym podejściem, ale czy jest to solidna alternatywa? Mam na myśli ViewData jest tak łatwo dostępne w inne rzeczy takie jak obiekt HtmlHelper, gdzie ViewModel nie jest. Lub na przykład użycie go w kontrolce niestandardowej (http://www.codeproject.com/KB/custom-controls/MVCCustomControls.aspx). Czy używam kombinacji obu w zależności od różnych celów? Co się stanie, jeśli chcę uzyskać dostęp do ViewModel w mojej metodzie Extension z jakiegokolwiek powodu? Zgubiłem się tu, jaką ścieżkę wybrać. Wiem, że ViewData nie jest mocno napisany, ale możesz ustawić swój widok, aby określić typ, a tym samym zrobić typ Viewedata, ale po prostu się zastanawiam. Jest tak wiele wsparcia dla ViewData, ale wiem, że ViewModel jest znacznie bardziej abstrakcyjnym i oddzielnym sposobem, jak również jest wpisywany. Po prostu nie chcę ograniczać się do scenariuszy, w których będę musiał pobrać pewne dane, takie jak ViewData, które są łatwo dostępne z innych obiektów, takich jak klasa HtmlHelper.

Myśli? Standardy? Wzruszenie religijne? Czy jestem trochę zbędny, czy po prostu korzystasz z kombinacji i nadal korzystasz z ViewData w innych okolicznościach niż wysyłanie danych z kontrolera do widoku lub czego?

Jeśli w ogóle nie korzystasz z ViewData i zamiast tego używasz ViewModel ze swoimi kontrolerami, wydaje się, że wszystko lub nic w tym, że używasz ViewModel, a zatem ViewData nie ma celu, ponieważ nie masz go ustawionego z niczym od kontrolerów, więc nie ma w tym momencie zastosowania? Czy myliłem kogoś lub znalazłem drogę tutaj? Mylące z tym piekłem to na pewno.

Odpowiedz

2

Cóż, ViewData jest dość szybką metodą implementacji. Jednak robisz wiele literałów, które zazwyczaj nie są dobre. Można to rozwiązać, używając stałych łańcuchowych, co robię ze zmiennymi sesji, ale myślę, że tutaj ViewModel jest znacznie lepszym podejściem. Za każdym razem możesz użyć ViewData, możesz również użyć ViewModel. ViewModel nie musi być tylko twoim obiektem domeny; może to być klasa pomocnicza, która ma nie tylko obiekt domeny, ale pewne dodatkowe właściwości specyficzne dla twojego widoku; właśnie dlatego tam jest. Tak więc z ViewModel masz kompilator, który pomaga ci i wyraźnie z perspektywy OO, jest o wiele czystszy niż tylko przekazywanie kluczy do słownika.

Myślę, że MVC oferuje tutaj dobre podejście. Oferuje i szybkie i brudne (niekoniecznie złe) dla tych, którzy muszą "po prostu to zrobić" i czystsze podejście, z których oba są dość łatwe w użyciu.

Jeśli nie czytałeś samouczka ASP.NET MVC Scotta Gurthiego; Gorąco polecam:

http://weblogs.asp.net/scottgu/archive/2009/04/28/free-asp-net-mvc-nerddinner-tutorial-now-in-html.aspx

+0

Nie mówię o ViewData.Model. Mówię o dodatkowej warstwie klas, która żyje pomiędzy Twoimi widokami i kontrolerem "ViewModels", które wykonują pracę, aby uzyskać pewne obiekty z twojego modelu, aby kontroler mógł z nich korzystać zamiast kontrolera pobierającego elementy z twojej warstwy Model. – PositiveGuy

Powiązane problemy