2009-09-30 16 views
9

Szybkie pytania naprawdę.ASP.NET MVC - model Linq to Entities jako ViewModel - czy to jest dobra praktyka?

Obecnie buduję stronę przy użyciu asp.net MVC i framework podmiotu. Mam kilka repozytoriów, które zwracają obiekty lub listy podmiotów. Zauważyłem, że na większości moich stron muszę pobierać dane z różnych powiązanych tabel. Jest to w porządku, o ile ładuję powiązane obiekty przy użyciu "uwzględnienia" w moich zapytaniach - ale czy jest to dobra praktyka?

Czy lepiej byłoby utworzyć niestandardowy obiekt widoku, który zawiera tylko wybrane informacje, których potrzebuję, czy też nie ma nic złego w rysowaniu wykresu obiektów, który może mieć od 5 do 6 tabel tylko po to, by wyświetlić to, czego potrzebujesz do twojego widoku?

Przeprosiny, jeśli to pytanie nie ma zbytniego sensu. I może mieć zasadniczo źle, jak powinien być stosowany model tutaj :)

Dzięki

+0

Dobre pytanie, zainteresuje Cię odpowiedź. – Paddy

+0

+1, miałem podobne pytanie dotyczące używania DTO zamiast modeli encji: http://stackoverflow.com/questions/1450209/is-my-asp-net-mvc-application-structured-properly – Brandon

+0

Dzięki Brandon - po prostu przeczytaj Twój post i tak, wygląda na to, że jesteśmy zaniepokojeni podobnymi rzeczami. Czasami martwię się, że zbyt dużo czasu spędzam martwiąc się o najlepszą praktykę :) – Sergio

Odpowiedz

2

Proponuję przeglądając kod renderowania w swoich poglądów oraz kod publikując na swoich kontrolerów. Czy robią to zbyt skomplikowanym podejściem? Jeśli nie, prawdopodobnie dobrze jest zachować rzeczy takimi, jakie są. Jeśli widok i kod kontrolera zostałyby znacznie uproszczone poprzez wprowadzenie niestandardowego modelu widoku, należy rozważyć jego utworzenie. Modele widoków niestandardowych zasadniczo ograniczają część tej złożoności, która prawdopodobnie jest obecnie przetwarzana w innym miejscu.

+0

To ma sens. Zasadniczo mam obecnie sytuację, w której pobieram różne "tabele" z mojego modelu jednostki. Organizacje-> Budynki-> Pokoje-> Aktywa. Po wyświetleniu szczegółów zasobu muszę również wyświetlić jego informacje o pokoju i budynku. W tej chwili właśnie chwytam spory wykres obiektów i wyciągam to, czego potrzebuję w widoku. Po prostu martwiłem się, że przywiozłem zbyt dużo z modelu. Ale ... to działa. – Sergio

3

Jeśli twoje poglądy zacząć robić rzeczy, jak

<% foreach (var order in Model.Orders.Any(x => x.Products.Any(p => p.Category == "xx")) %>

to na pewno trzeba ViewModel. Możesz iść z

ViewData["flattened_orders"]

jeśli wolisz magiczne ciągi, ale wątpię, tak.

Wówczas potrzebne są dodatkowe atrybuty prezentacji na twoich jednostkach, wtedy musisz ujawnić na nich wszystkie właściwości, aby segregator modelu mógł działać ... potrzebne są dodatkowe informacje tylko do prezentacji, takie jak lista krajów ...

W przypadku prostych aplikacji możesz pominąć ViewModel. Ale dla prostych aplikacji można w każdym razie odpowiedzieć Response.Write i manual SQL ;-)

Tak naprawdę lubię this post o podobnym problemie. Podejście reprezentowane na tym etapie może wydawać się zbyt "akademickie", ale pochodzi z prawdziwych projektów, a im więcej robię ASP.NET MVC, tym bardziej go lubię i zbliżam się do niego.

+0

dziękuję, to dobra rada.Odkrywam, że muszę poruszać się pomiędzy relacjami między podmiotami, aby uzyskać to, czego potrzebuję i zaczynam myśleć, że dane są bardziej płaskie, tym lepiej. – Sergio

Powiązane problemy