Ekranowanie zerowalnych właściwości domeny za pomocą ViewModel
Używam Entity Framework 4.0 i korzystam z obiektów POCO. Kiedy zapełniam obiekty POCO z bazy danych, tłumaczę wartości właściwości na własne obiekty domeny, które możemy nazwać moim modelem.
Koniecznie, czy pola mojego Modelu są puste, zależy od tego, czy wartość, którą mapuje w bazie danych, pochodzi z kolumny NULL lub NOT NULL. Nie będę wchodził w szczegóły, ale wartości muszą być puste w DB, ponieważ użytkownik może częściowo zapisać szkic obiektu przed opublikowaniem go publicznie. Mając to na uwadze, mam kilka pól, które są puste. Powiedzmy, że mój model wygląda tak:
public class MyModel
{
public int? Field1 {get; set; }
public DateTime? Field2 {get; set; }
public int Field3 {get; set; }
}
Jeśli użyję tego modelu w moim widoku, wraz z polami dopuszczającymi wartości zerowe, zaczynam otrzymywać błędy, które mówią mi, że nie mogę używać wartości dopuszczalnych dla wartości null jako wartości w różnych miejscach, takich jak pomocniki HTML itp.if (Model.MyBoolField.HasValue && Model.MyBoolField.Value) { // etc }
, ale to wydaje się nieporęczne dla widoku.
Rozważałem utworzenie obiektu ViewModel, który dziedziczy po moim oryginalnym obiekcie domeny i manew
, niezawierające wartości pustych wersji moich pustych pól, które zwracają odpowiednią wartość, jeśli wersja podstawowa ma wartość NULL. Więc coś w stylu:
public class MyViewModel : MyModel
{
public new int Field1
{
get { return base.Field1 ?? 7; }
}
public new DateTime Field2
{
get { return base.Field2 ?? DateTime.Now; }
}
}
Mój problem z tym polega na tym, że nie zawsze znam dobrą wartość „domyślną” do wyświetlenia. Co zrobić, jeśli rzuciłem wyjątek w getterze modelu wyświetlania, gdy wartość bazowa ma wartość null? Czy to kiepska praktyka?
W zasadzie szukam najlepszej praktyki dotyczącej sposobu obsługi pól dopuszczających wartości zerowe w modelu, szczególnie podczas wyświetlania w widoku.