2008-12-15 13 views
8

Pracuję na stronie MVC, która jest pierwszą moją firmą. Jedną z rzeczy, które często robię, jest tworzenie list wyboru w kontrolerze, umieszczanie ich w widoku danych i czytanie je podczas tworzenia html.DropDownList. to kilka rzeczy, które wydają mi się śmierdzące w sposobie, w jaki to robię.Wybieranie użycia list w asp.net mvc

  1. niektóre strony mogą powtórzyć listę rzeczy (stopa zarząd pokoju hotelowym wheer użytkownik może dodać dowolną liczbę pokoi w hotelu, ponieważ potrzebują), obecnie używam tego samego SelectList, jest to dobra praktyka, lub czy powinni mieć po jednym?

  2. z poprzednim przykładem "pokój" to ascx renderowany przez wywołanie renderpartial lub ajax przez jquery. jaki jest najlepszy sposób, aby kontroler przekazał listę wyboru, aby Ascx mógł z niej korzystać, obecnie dodaję do widoku danych dla strony, która przekazuje jej dane widoku do renderpartial, ale potem na wywołanie ajaxu metoda działania również musi dodać wybierz listę do Viewdata dla ascx, nie wiem, czy to najlepszy sposób.

  3. Mam repozytorium, które przechowuje te "statyczne" dane i zwraca je jako listę ogólną, więc za każdym razem, gdy kontroler potrzebuje danych, trafia do repozytorium dla listy (jest kilka więcej niż tylko tablica, rzeczy jak tytuły dla ludzi, panów, panów itp.) Podejrzewam, że jakiś rodzaj pamięci podręcznej byłby lepszy, ponieważ dane rzadko się zmieniają.

Czy ktoś ma jakieś porady w tych dziedzinach?

Odpowiedz

3
  1. Jeśli te listy SelectList są całkowicie równe, to na pewno lepiej użyć jednej listy dla wielu DropDownLists.

  2. Wygląda na to, że jest powszechnie używane. Używam również podobnego podejścia, ale myślę o przeniesieniu niektórych kontrolek do Html.RenderAction, ponieważ przechodzenie przez ViewData strony do kontroli również nie jest dobre dla mnie. Tak, wiem, że to nie będzie czysty MVC :)

  3. Jeśli twój ORM obsługuje pamięć podręczną, oczywiście go używaj.

Ale także jeśli projekt nie jest mały i myślisz, że będzie nadal rosnąć, polecam wdrożyć warstwie usług (PoEAA wzór) powyżej repozytoriów, które będą zawierający logiki biznesowej i logiki zarządzania cache zbyt.

Jeśli chcesz zarządzać pamięcią podręczną w przejrzysty sposób, bez wpływu na warstwę dal lub mvc, myślę, że najlepszym podejściem jest użycie AOP.

+0

OK. Jest mały i niezmienny, jak mogę go łatwo buforować? – Shimmy

0

Jednym ze sposobów jest umieszczenie potrzebnych danych do listy wyboru w modelu za pomocą wpisanego widoku. Widok może iterować po danych w modelu, aby wygenerować dowolne wybrane listy, których potrzebuje. Możesz także spychać obiekt bezpośrednio do kolekcji ViewData, ale myślę, że posiadanie wpisanego widoku skutkuje znacznie czystszym kodem.