Domanda

Sto installando un'applicazione n-tier con MVC, Ninject e NHibernate (il mio primo utilizzo di queste tecnologie). Per amor di chiarezza, i livelli sono un livello "dati", un livello "Servizi", e un livello "Web" (tutti sono progetti separati).

Con MVC, avete i vostri modelli che sono nella cartella "Modelli". Sembra necessario mettere i miei modelli qui per creare viste fortemente tipizzato e per mantenere in generale con la filosofia di MVC.

Tuttavia, con NHibernate, ho anche bisogno dei miei modelli nel livello "dati" in modo che la mappatura può avvenire e che NHibernate può istanziare oggetti reali per tornare al livello di servizi.

La duplicazione delle classi attraverso progetti non è molto secco e li astrarre nella propria biblioteca non sembra di giocare bene con MVC (né nella pratica né la filosofia).

Qualche idea? Come si struttura il tuo O / RM oggetti vs modelli MVC?

È stato utile?

Soluzione

Continuo a modelli Entity Framework / classi del livello dati e utilizzare la cartella Tutti i modelli di progetto MVC per i modelli di presentazione e leganti modello.

Altri suggerimenti

Il modello dei dati è che è cosa propria. Il modello in MVC è qualcosa di diverso. E 'il modello di ciò che si sta andando a visualizzare, che può o non può essere il tuo modello di dati. Sei Data Model può trascendere strati, oppure no.
Prendete per esempio il modulo di iscrizione standard. Il modello dei dati può comprendere il nome utente, la password e una serie di lezioni di storia di login, un flag che indica che è attiva e molto altre cose. Il modello in MVC, può veramente solo cura di username e password, e che l'utente digitare la password due volte. Il vostro modello di dati davvero bisogno di due campi password? No. Tuttavia il modello nella MVC fa. Quindi, due creature differenti.

Continuo a tutti i miei modelli nel livello di dati a causa di NHibernate. Date un'occhiata a S # arp Architettura di un ottimo modo di mantenere il vostro presentazione pulita . I modelli non devono essere fisicamente nel vostro progetto web per il vostro punto di vista a essere fortemente tipizzati.

Hai ragione circa il principio DRY qui. Ho tenere i miei oggetti LINQ to SQL separato dai miei oggetti di business e ho alcuni doppioni e non mi fa stare bene ma sembra non v'è una semplice soluzione questo ..

Ho avuto un momento difficile prendere questa decisione, ma ho visto il blog di Rob Conery, mentre la costruzione del MVC Storefront e alla fine ho deciso di andare in questo modo (oggetti ORM e gli oggetti di business)

  

Con MVC, avete i vostri modelli   sono nella cartella "Modelli". Sembra   necessario mettere i miei modelli qui per   creare Visualizzazioni fortemente tipizzato e per   generalmente tenere con la filosofia di   MVC.

Nessun modello può essere tutto quello che vuoi. Vorrei ancora utilizzare un modello di presentazione se fosse necessario, ma non ho alcuna obiezione a usare le entità NHibernate nel vostro punto di vista.

Con NHibernate non si ha realmente bisogno di un livello di dati dal momento che la sessione stessa è il livello di dati.

Il livello di servizio sembra un'idea valida, ma solo se si pensa di avere più client per questo livello.

In caso contrario, avrei solo 1 progetto ed utilizzare gli spazi dei nomi per separare i miei livelli. Esso si basa più veloce ed è più facile da implementare.

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