Jeśli zostanie wykonana client validation
, gdy konieczne będzie wykonanie domain level validation
?Wyświetl weryfikację modelu i sprawdzanie poprawności modelu domeny
Używam ASP.NET MVC
dla moich aplikacji internetowych. Lubię rozróżniać moje domain models
i . Moje modele domen zawierają dane pochodzące z mojej bazy danych, a modele widoków zawierają dane dotyczące moich widoków/stron.
Powiedzmy, że pracuję z danymi klientów.
Będę miał tabelę w mojej bazie danych o nazwie Customers
.
będę mieć klasę klienta, który mógłby wyglądać następująco:
public class Customer
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
I będę CREATE VIEW klient modelu reprezentować tylko tych danych, które mam na moim zdaniem:
[Validator(typeof(CustomerCreateViewModelValidator))]
public class CustomerCreateViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
Będę miał widok utworzenia, który akceptuje mój CustomerCreateViewModel
i wiąże moje pola wejściowe z moim modelem widoku:
@model MyProject.ViewModels.Customers.CustomerCreateViewModel
@using (Html.BeginForm())
{
<table>
<tr>
<td>
@Html.TextBoxFor(x => x.FirstName)
@Html.ValidationMessageFor(x => x.FirstName)
</td>
</tr>
<tr>
<td>
@Html.TextBoxFor(x => x.LastName)
@Html.ValidationMessageFor(x => x.LastName)
</td>
</tr>
</table>
<button id="SaveButton" type="submit">Save</button>
}
Jak widać, mam CustomerCreateViewModelValidator
, który zawiera moje zasady sprawdzania poprawności. Po wprowadzeniu pewnych danych do pól tekstowych użytkownik kliknie przycisk przesyłania. Jeśli niektóre pola są puste, sprawdzanie poprawności nie powiedzie się. Jeśli wszystkie wymagane pola zostaną wprowadzone, sprawdzanie poprawności powiedzie się. Będę wtedy mapowania danych z mojego widoku modelu do mojego modelu domeny tak: model domeny
Customer customer = Mapper.Map<Customer>(viewModel);
Ten klient mi zdać go na moim warstwy repozytorium i dodaje dane do mojego stolika.
Kiedy należy wykonać sprawdzanie poprawności w modelu domeny? Wszystkie moje walidacje sprawdzam na moim modelu widoku. Czy mogę zweryfikować swoje dane w moim modelu domeny tuż przed dodaniem go do bazy danych, ale widząc, że został on sprawdzony w modelu widoku, czy nie byłoby to po prostu replikowanie tego samego sprawdzania poprawności po stronie klienta?
Czy ktoś mógłby podzielić się niektórymi informacjami na temat tej procedury sprawdzania oryginalności?
Czy masz oddzielne reguły sprawdzania poprawności między warstwami? Mam na myśli to, czy jest możliwe, aby coś ważnego w UI nie było uważane za ważne w domenie? –
W tej chwili oba powinny być takie same. Generalizuję weryfikacje, nie tylko specyficzne dla moich projektów. –
Byłbym jednak przekonany, że DDD skłania się do metody instancji 'Validate()' na każdym obiekcie domeny, który się sprawdza. Jestem jednak najdalej od eksperta od DDD. +1 za interesujące pytanie. –