Sono nuovo in MVC/MVP e sto imparando creando un'applicazione Winform.in MVC/MVP
Ho creato in qualche modo Modelli, Presentatori e Viste ... Ora dove si adattano le mie convalide.
Penso che la convalida del tipo di dati iniziale (come solo i numeri nel campo Età), dovrebbe essere eseguita alla vista. Mentre le altre convalide (come se l'età è entro 200) dovrebbero essere fatte per modello.
Per quanto riguarda la convalida tipo di dati, la mia opinione espone i valori come proprietà
public int? Age
{
get
{
int val;
if (Int32.TryParse(TbxAge.Text, out val))
{
return val;
}
return null;
}
set
{
TbxAge.Text = value;
}
}
posso eseguire la convalida separatamente, ma come faccio a informare presentatore che la convalida è ancora in sospeso, quando si tenta di accedere alla proprietà Age?. In particolare quando il campo è facoltativo.
È buona norma lanciare un'eccezione di validationpending, ma il presentatore deve prenderla in ogni punto.
La mia comprensione è corretta o mi manca qualcosa.
Aggiornamento (per motivi di chiarezza): In questo semplice caso in cui il campo età è facoltativo, cosa devo fare quando l'utente ha digitato il suo nome anziché un numero. Non posso passare nulla perché significherebbe che il campo è stato lasciato vuoto dall'utente. Quindi, come informo il relatore che sono stati immessi dati non validi ...
Dovrei aggiungere, ciò che stai tentando di fare è possibile, ma è sbagliato. Tuttavia, se si è bloccati su questo approccio, è necessario utilizzare gli eventi per proporre errori di convalida nell'app. Utilizzando l'approccio "stupido" disaccoppiato che ho citato, nel complesso viene fornita un'app semplificata. – Finglas
Ok .. Se stai dicendo che dovrei fare la validazione Datatype in Presenter ... Allora le mie viste dovrebbero esporre tutti i valori come proprietà stringa, che potrebbero essere letti e convalidati dal controller? –
Non tutti come stringhe. Usa i tipi primitivi per cominciare. Prendi il tuo esempio di età. Un int è un int se non il suo WinForms o ASP.NET MVC. Sono entrambi C#. Puoi sempre considerare questi primitivi in classi di valore personalizzate come PersonalDetails (in cui l'età verrebbe memorizzata). Queste classi di valore sarebbero quindi utilizzate come "ViewModel". Quello che non vuoi fare con il pattern MVP/MVC sono tipi di ritorno specifici per la tua vista. Gli stream HTML di E.g non funzionerebbero in un'app WinForms, tuttavia una stringa/tipo personalizzato che rappresenta un frammento di testo sarebbe universale. – Finglas