Esiste un modello di progettazione che descrive la separazione di un modulo da un modello

1

Sto lavorando su un'applicazione web implementata in C #, che segue le convenzioni MVC.

Questa applicazione contiene una pagina che mi consente di creare o aggiornare un Wingding. La vista restituisce un modello Wingding completo al controller che posso creare o aggiornare.

Il problema è che la pagina ha anche una casella di controllo che mi permette di creare Wingdings identici per gli tutti utenti. Il codice corrente aggiunge una variabile al Modello di avvolgimento per acquisire tali dati, in modo che possa essere restituito dalla vista.

Mi sembra ovvio che la pagina debba avere un oggetto Wingding Page Form che viene passato dalla vista al controller, invece di aggiungere variabili extra al modello che non verranno salvate al DB.

So che ciò conta come separazione delle preoccupazioni, ma esiste un modello di progettazione più specifico che descrive la separazione di un da un modello?

    
posta Gustav Bertram 01.12.2013 - 19:29
fonte

2 risposte

2

Sembra che tu stia cercando un modello di visualizzazione.

Il modello di vista è un oggetto che incapsula solo i dati necessari per la visualizzazione da visualizzare. Esempio:

public class UserInformationViewModel
{
    public string DisplayName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    public string StateID { get; set; }
    public string Zip { get; set; }

    public SelectList States { get; set; }
}

In questo esempio, States è un elenco di stati o province, utilizzato per popolare un elenco a discesa. I dati provengono da più tabelle, ma contenuti in un singolo oggetto.

Negli scenari smart client, il modello di vista può contenere anche la logica di visualizzazione, come la convalida e la modifica dello schermo in base ai dati selezionati dall'utente.

    
risposta data 02.12.2013 - 03:47
fonte
1

Esistono diverse soluzioni:

1.) IMHO la soluzione più pulita è quella casella di controllo come un campo separato e passarlo al controller, quindi sa cosa fare.

2.) È possibile utilizzare un modello PresentationModel per incapsulare tutto ciò che il controller deve conoscere e passare quell'oggetto.

A parte questo, credo, nel modo in cui descrivi il tuo caso d'uso, che hai un difetto nel tuo modello. Se crei gli stessi articoli per più utenti, allora il discriminatore è un riferimento per l'utente nel tuo modello, non è vero? Quindi devi passare al controller il tuo progetto dell'avvolgimento e l'elenco degli utenti.

    
risposta data 01.12.2013 - 20:10
fonte

Leggi altre domande sui tag