2011-07-18 15 views
21

Czy modele widoku powinny mieć tylko właściwości, a nie metody?ASP.NET MVC ViewModel z metodami - czy jest "legalny"?

Załóżmy, że mam w moim widoku przycisk radiowy i chcę sprawdzić, czy przycisk radiowy powinien być zaznaczony.

mogłem zrobić to całkowicie moim zdaniem:

@Html.RadioButton("radiobuttonName", "The value", (id == Model.PersonId)) 

czy mogę przenieść tę logikę do viewmodel:

@Html.RadioButton("radiobuttonName", "The value", Model.IsChecked(id) 

użyciu tej metody w viewmodel:

public int PersonId { get;set;} 
    public bool IsChecked(int id) 
    { 
     return (id == PersonId); 
    } 

Czy można to zrobić w całości lub w całości lub w inny sposób?

+0

Praktyka brzmi: jeśli to komplementuje widok, to tak, to dobrze. BUt, które można rozciągnąć zbyt długo :) Tak długo, jak robi to, czego potrzebujesz, aby zrobić w sposób consice. Nie przejmuj się tym zbytnio. – ppumkin

Odpowiedz

12

Możesz mieć metody w swoim ViewModel. Jeśli jest to pojedynczy wynik, który chcesz obliczyć za każdym razem, sugerowałbym dodanie kodu oceny do Twojego numeru Controller i zapisanie wyniku w postaci ViewModel zamiast tego, ale jeśli chcesz oceniać rzeczy za pomocą metody bardziej dynamicznie, a właściwość nie może wykonać dla ciebie to robienie tego w ViewModel jest prawdopodobnie w porządku.

W powyższym przykładzie zalecam wykonanie tego w ViewModel, ponieważ wtedy ViewModel zawiera logikę w jednym miejscu, a nie robi to wiele razy kopiowanie i wklejanie w Twoim View.

+0

Mówi się, że żadna logika nie powinna w ogóle istnieć w ViewModelu. Ta najlepsza praktyka kodowania. Ale miłą funkcjonalnością jest, aby viewModel aktualizował wszystkie swoje właściwości na poczcie zwrotnej, wywołując funkcję do tego celu. (Logika biznesowa jest oddzielona, ​​tylko Linq i pobieranie danych) Zrozumiałem, że jeśli NIE DONT zadeklarujesz właściwość w twoim widoku, że dane WONT zostaną wysłane do klienta, kropka. Więc jest "chroniony" - tylko uważaj co i jak eksponujesz właściwości :) – ppumkin

4

To naprawdę dobre pytanie dotyczące prawidłowego umieszczenia logiki. Twoje podejście to z pewnością legalne - ale czy podąża za duchem MVC? :)

Powiedziałbym, to zależy od tego, czy logika w swojej metodzie stosuje się tylko do tej View/ViewModel lub mogłyby zostać zastosowane w innych ViewModels, które zajmują się tego typu modelu bazowego (w przypadku, Osoba).

Jeśli jest to jednorazowe obliczenie dla celów tego konkretnego modelu ViewModel, należy zachować go w Modelu. Jeśli te obliczenia mogą być ogólnie używane dla obiektów Person, należy rozważyć użycie statycznej klasy usługi, np. PersonService i umieść tam swoje metody.

Powiązane problemy