Domanda

A quanto ho capito, modelli di dominio sono classi che descrivono solo i dati (radici di aggregazione). Sono pocos e non fanno riferimento le librerie esterne (niente di speciale).

Visualizza i modelli d'altra parte sono classi che contengono modello di dominio oggetti così come tutti gli oggetti di interfaccia specifici come SelectList. Un ViewModel include using System.Web.Mvc;.

A tira repository di dati da un database e li invia a noi attraverso oggetti del modello di dominio. Che meccanico o dispositivo crea gli oggetti vista del modello, li popolano da un database? sarebbe una fabbrica che ha accesso al database? Ti sanguinare le classi vista specifici come System.Web.Mvc al repository? Qualcos'altro?

Ad esempio, se si dispone di un elenco a discesa delle città verso il basso, si potrebbe fare riferimento a un oggetto SelectList nella root del vostro oggetto View Modello, proprio accanto al vostro riferimento domain model:

public class CustomerForm {
    public CustomerAddress address {get;set;}
    public SelectList cities {get;set;}
}

Le città dovrebbe venire da un database ed essere sotto forma di un oggetto di lista di selezione. La speranza è che non si crea uno speciale metodo di repository per estrarre fuori solo le città distinte, quindi creare un oggetto ridondante secondo SelectList solo in modo da avere i tipi di dati a destra.

È stato utile?

Soluzione

automapper potrebbe essere utilizzato per convertire i modelli per visualizzare modelli. Ecco un bell'articolo di come è possibile utilizzare nella vostra applicazione ASP.NET MVC.

In sostanza l'azione del controller potrebbe essere simile a questo:

[AutoMap(typeof(ProductModel), typeof(ProductViewModel))]
public ActionResult Index(int id)
{
    return View(_repository.GetById(id));
}

Così si ancora del lavoro con i vostri modelli di dominio nel controller e il filtro azione AutoMap utilizzerà AutoMapper per convertire il modello a un modello vista secondo un file di mapping e passarlo alla vista.

Altri suggerimenti

vorrei suggerire di guardare CQRS (Comando Query Responsabilità segregazione). Sulla base di questo modello, non si ha realmente bisogno per ottenere il vostro modello da repository quindi mappare a ViewModel.

È possibile dedicare un insieme separato di classi per il recupero dei dati (interrogazione) e la visualizzazione sulla vista. È possibile chiamare queste classi Provider o quello che vuoi. Queste classi possono tornare ViewModel o DataSet / oggetti DataTable generici. Ci sono 2 vantaggi di questo approccio:

1- Come ospite non devi preoccuparti di mapping tra modello e ViewModel, quindi più facile la codifica e la manutenzione. 2- Un sacco di volte le proprietà il modello dispone non sono esattamente quello che gli aspetta all'utente di vedere sullo schermo. Alcuni sviluppatori di aggiungere nuove proprietà al loro modello solo per lo scopo di display, che fa sì che il modello a perdere la sua realtà nel lungo periodo. Restituendo ViewModel o DataSet / DataTable direttamente dal tuo provider senza dipendere dal modello, si consente il vostro modello e la vostra ViewModels di evolvere separatamente.

Mosh

Direi che compilazione di un modello di vista da un oggetto di dominio è il responsiblity del controller. Il controllore "Get" azione sarebbe recuperare l'oggetto del dominio dal repository, creare un modello di vista, popolare il modello di vista e poi passarlo alla vista.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top