Podczas opracowywania aplikacji ASP.NET MVC, która umożliwia aktualizację modelu, musisz wiedzieć, jak pobrać zaktualizowany model widoku i dopasować go z powrotem do modelu, który jest teraz aktualizowany. Wydaje się, że istnieje kilka różnych sposobów na zrobienie tego i zastanawiam się, czy któryś z nich nie jest prawidłowy MVC (podobnie jak posiadanie danych kontrolera, które powinny znajdować się w modelu, nie jest właściwym MVC)?
Wszystkie modele View mają identyfikator: Plusy
- Zawsze upewnij się, że możesz dopasować do swojego modelu.
Cons
- Musisz bardzo uważać, aby żaden identyfikator nie został zmieniony, w przeciwnym razie użytkownicy mogą aktualizować wiersze, do których nie powinni mieć dostępu.
Tylko modele z minimalnym widokiem mają identyfikator: zalety
- Konieczne jest znacznie mniej sprawdzania, aby użytkownicy nie aktualizowali danych, do których nie powinni mieć dostępu.
Cons
- Znacznie trudniej jest wyśledzić, które modele widoków pasują do jakiego modelu.
- Nadal musisz sprawdzić kilka modeli widoków z identyfikatorami, aby upewnić się, że użytkownik nie aktualizuje danych, do których nie powinien mieć dostępu.
Żaden model widoku nie ma identyfikatora:
Plusy
- Nie ma potrzeby sprawdzania identyfikatorów aktualizacji.
Cons
- Musisz porzucić bezpaństwowość.
Mam więc dwa pytania.
Po pierwsze, czy jest właściwy / niepoprawny wybór? (Jeśli nie, oznacza to, że wybór jest kwestią opinii, a moje drugie pytanie oparte jest na opinii i powinno zostać zignorowane).
Po drugie, jeśli istnieje poprawny / niepoprawny wybór, co to jest?
Aby wyjaśnić komentarz, mówię, gdy masz model widoku, który jest naśladowaniem obiektu bazy danych.
Przemyśl to:
public class InvoiceViewModel //Does not have ID, does not relate to model.
{
public CustomerViewModel CustomerVM { get; set; } //Maybe has ID? Does relate to model.
public AddressViewModel BillingAddressVM { get; set; } //Ditto
public AddressViewModel ShippingAddressVM { get; set; } //Ditto
public List<InvoiceLineItemViewModel> ItemVMs { get; set; } //Each one has an ID?
}
nie to:
public class InvoiceViewModel
{
public Customer Customer { get; set; }
public Address BillingAddress { get; set; }
public Address ShippingAddress { get; set; }
public List<InvoiceLineItem> Items { get; set; }
}
You have to abandon statelessness.
- Właśnie wybrałeś użycie MVC bez sensu.