Se client validation
viene eseguito quando è necessario eseguire domain level validation
?Visualizzazione convalida del modello rispetto alla convalida del modello di dominio
Io uso ASP.NET MVC
per le mie applicazioni web. Mi piace distinguere tra il mio domain models
e il view models
. I miei modelli di dominio contengono i dati provenienti dal mio database e i miei modelli di visualizzazione contengono i dati sulle mie viste/pagine.
Diciamo che sto lavorando con i dati dei clienti.
Avrò una tabella nel mio database chiamato Customers
.
avrò una classe cliente che potrebbe essere simile a questo:
public class Customer
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
E farò un creare vista del cliente il modello per rappresentare solo i dati che ho sul mio punto di vista:
[Validator(typeof(CustomerCreateViewModelValidator))]
public class CustomerCreateViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
avrò una creazione di vista che accetta la mia CustomerCreateViewModel
e lega i miei campi di input alla mia vista del modello:
@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>
}
Come potete vedere, ho un CustomerCreateViewModelValidator
che contiene le mie regole di convalida. Dopo che l'utente ha inserito alcuni dati nelle caselle di testo, farà clic sul pulsante di invio. Se alcuni campi sono vuoti, la convalida fallisce. Se vengono inseriti tutti i campi richiesti, la convalida ha esito positivo. Io poi mappare i dati dal mio modello di vista al mio modello di dominio in questo modo: modello di dominio
Customer customer = Mapper.Map<Customer>(viewModel);
Questo cliente prendo e passare sul mio strato repository ed aggiunge i dati al mio tavolo.
Quando deve essere eseguita la convalida su un modello di dominio? Faccio tutta la mia convalida sul mio modello di vista. Posso convalidare i miei dati nel mio modello di dominio appena prima di aggiungerlo al database ma vedendo che è stato convalidato sul modello di visualizzazione, non sarebbe solo la replica della stessa validazione sul lato client?
Qualcuno potrebbe per favore condividere un po 'di luce su questo argomento di convalida?
Avete regole di convalida separate tra i livelli? Con ciò intendo, è possibile che qualcosa di valido nell'interfaccia utente non sia considerato valido nel dominio? –
Al momento entrambi dovrebbero essere uguali. Sto generalizzando sulle convalide, non solo specifiche per i miei progetti. –
Avrei però pensato che DDD si sarebbe orientato verso un metodo di istanza 'Validate()' su ogni oggetto di dominio che si auto convalida. Sono più lontano da un esperto di DDD però. +1 per una domanda interessante. –