Single Class da servire come modello di vista e contenitore per modulo inviato

1

Vedo il seguente disegno nel codice che fa parte del progetto di applicazione Web predefinito in Visual Studio:

Una singola classe di modello di dati costruita e decorata con varie annotazioni di convalida dei dati. Ad esempio, esiste una classe RegisterViewModel simile a questa:

public class RegisterViewModel
{
    [Required]
    [EmailAddress]
    [Display(Name = "Email")]
    public string Email { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 8)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}

Questa classe ha due scopi:

  1. È il "modello di vista" o il tipo per la vista che consiste nel modulo html con cui l'utente si registra. I dettagli html e i metadati di validazione jquery possono essere estratti automaticamente dalle annotazioni dei dati della classe.
  2. Quando l'utente invia il suo modulo al server, i dati del modulo vengono memorizzati in un oggetto dello stesso tipo; per esempio. in questo caso la firma dell'azione Register ha il seguente aspetto:

    public async Task<ActionResult> Register(RegisterViewModel model)

Tra le altre cose, ciò consente di eseguire la convalida sul lato server utilizzando le stesse annotazioni di dati.

È un modello comune e accettabile? È un progetto per cui lottare quando costruisci le mie forme?

    
posta Isaac Kleinman 17.11.2015 - 19:22
fonte

2 risposte

-1

Bene, non vedo niente di strano qui. La convalida di ViewModel è una cosa comune. Anche se, direi, anche quell'entità di dominio dovrebbe essere validata. Qui è un buon articolo sull'argomento.

    
risposta data 18.11.2015 - 09:41
fonte
-1

Il ViewModel che mostri è un modello che si intende utilizzare con una vista. In quanto tale, dispone di strutture per aiutare a visualizzare i dati e le strutture per aiutare a ricevere i dati.

In applicazioni molto piccole, potresti prendere in considerazione l'utilizzo di quella struttura dati come modello di dati primari.

Tuttavia, nelle applicazioni gravi, non modellerai i tuoi dati in questo modo. Tra le altre cose, dovresti avere una sola password memorizzata nel tuo repository e, cosa più importante, memorizzare le password separatamente dai dati specifici dell'utente e deve essere crittografata. In altre parole, ViewModel è una rappresentazione del modello di business sottostante ai fini dell'interazione con l'utente, e non lo stesso del tuo modello di business.

    
risposta data 18.12.2015 - 13:18
fonte

Leggi altre domande sui tag