Subsonic Vs NHibernate

voti
72

Qual è la concensus su quando utilizzare uno di questi strumenti impervie verso l'altro? Trovo Subsonic molto utile in termini di fare le cose in fretta, ma su grandi progetti tende non in scala, ei suoi legami con il vostro modello di dominio per il vostro modello di database. È qui che entra in gioco NHibernate come ti dà pocos leggeri che non sono collegati al vostro modello di database, ma il tempo di setup è molto più lungo.

È pubblicato 04/08/2008 alle 17:29
fonte dall'utente
In altre lingue...                            


15 risposte

voti
83

Ho chiesto questa domanda un sacco e davvero si tratta di quanto si vuole perdere tempo. Non posso dirvi quanto dannoso commenti di Chris Cyvas RE scala SubSonic sono stati - e sono stato rispondere a questi da allora :(.

L'accordo è - perf-saggio, SubSonic scale molto bene. In termini di crescita del progetto - qualsiasi strumento si utilizza richiederà la vostra attenzione. Anche NHibernate.

Ho scritto un post su come utilizzare il modello di Repository con DI (come si farebbe con qualsiasi strumento NHIb o per quella materia) con SubSonic 2.1:

http://blog.wekeroad.com/blog/subsonic-writing-decoupled-testable-code-with-subsonic-2-1/

Ho anche scritto un post sulle prestazioni di Subsonic:

http://blog.wekeroad.com/blog/subsonic-scaling/

Spero che questo ti aiuti.

Risposto il 12/09/2008 a 22:54
fonte dall'utente

voti
45

Mi consiglia SubSonic se il progetto funziona con la vista ActiveRecord che il database è il tuo modello. Otterrete una classe per tavolo e tutto funziona magicamente. Naturalmente, è possibile modificare e sovrascrivere le cose, ma se voi (o il vostro progetto) fondamentalmente d'accordo con l'approccio di classe-per-tavolo, mi piacerebbe guardare in NHibernate perché inizia con la più complessa (ma più flessibile) approccio di mappare la tua modello di dominio al database.

Se stai usando una relativamente semplice database che è sotto il vostro controllo (come nel caso, è possibile modificare le colonne senza l'invio di otto moduli per una svista board review divisione database), io consiglierei di iniziare con SubSonic e trasferirsi in NHibernate se SubSonic non lo fa soddisfare le vostre esigenze.

Risposto il 06/08/2008 a 22:47
fonte dall'utente

voti
31

Per quello che ne vale la pena ... Ho avuto la possibilità di utilizzare entrambe le tecnologie abbastanza abit più dato che questa domanda. E devo soggiorno che, se queste tecnologie si sceglie questioni molto poco. Certo NHibernate permette alle entità di business per essere un po 'meno accoppiati alla struttura del database, ma ho ancora scoprire che ci sono molte occasioni in cui avete ancora a piegarsi alla volontà del database.

A mio parere l'unico vero modo per separare totalmente il modello di dominio dal modello di database è quello di scrivere il proprio DTOS (essenzialmente pocos per il passaggio di dati in tutto), e poi la mappa di nuovo al vostro ORM di scelta nel vostro livello di dati. Ma nella maggior parte dei casi, questo approccio mi ha più problemi rispetto al suo valore.

Risposto il 05/03/2009 a 10:23
fonte dall'utente

voti
13

Un po 'fuori tema, ma in un modo simile. Hai guardato Castello ActiveRecord è scritto in cima NHibernate ed elimina la necessità di trascorrere del tempo la creazione di mappature XML da codice al database. Come NHibernate è possibile strutturare gli oggetti del dominio che si desidera e poi generare uno schema di database da questa struttura.

Utilizzando ActiveWriter , uno strumento contribuito, si può facilmente mappare dal database a oggetti di dominio.

Risposto il 05/08/2008 a 06:07
fonte dall'utente

voti
9

Si può prendere in considerazione guardando Fluent NHibernate; che rende la gestione NHibernate un gioco da ragazzi. Non so quanto sia difficile potrebbe essere quella di passare uno schema esistente, ma se si sta costruendo una nuova applicazione è bello per definire il modello di dominio e generare il database in praticamente qualsiasi server di database che si può pensare. Dalla lettura gli altri commenti qui, credo Fluent NHibernate NHibernate porta alla pari con SubSonic per facilità di configurazione.

Risposto il 04/03/2009 a 21:17
fonte dall'utente

voti
7

Ho scritto un post sul blog di recente circa ORM NET che ha Subsonic in essa, e ActiveRecord. Dalla mia esperienza dipende da ciò che il progetto sta facendo, Subsonic funziona molto meglio se si proviene da un background di SQL ma NHibernate ha più ontop di esso. ActiveRecord è un bene per i piccoli progetti, non sono convinto che sia più veloce per i progetti più grandi di attaccare a NHibernate.

Risposto il 07/10/2008 a 11:10
fonte dall'utente

voti
7

Non posso dare un buon confronto come io non ho ancora effettivamente utilizzato NHibernate su un progetto, ma ho usato SubSonic e sono stati molto contenti. Finora, non ho colpito grossi ostacoli quando lo si utilizza.

Scopri questo post da Rob Conery, uno dei creatori di SubSonic. Si parla di come separare il codice SubSonic dal resto delle app. Egli cita anche il fatto che questa architettura si permetterebbe di scambiare successivamente fuori SubSonic per qualche altro strato di accesso ai dati, come NHibernate o LINQ to SQL.

So che in realtà non rispondere alla tua domanda, ma spero che questo aiuta ancora.

Risposto il 04/09/2008 a 20:25
fonte dall'utente

voti
5

Ho valutato entrambi e credo che non sarebbe giusto raccomandare uno sopra l'altro senza capire che cosa i vostri obiettivi sono. Nella tua domanda lei ha dichiarato le differenze bene e credo che deve essere il vostro fattore decisivo. Personalmente ho usato entrambi e continuerò ad usare sia a seconda del progetto.

  • NHibernate è la mia scelta per i progetti su scala più grande, perché il suo uso di leggero POCO di. Se dovessi cambiare mai il mio ORM "Credo" questo sarebbe molto più facile da refactoring.
  • SubSonic è la mia scelta quando ho un progetto di scala più piccola. Credo che le prestazioni saggio subsonico scala bene. Tuttavia, mi sento strettamente accoppiati con esso perché è così inciso nel mio progetto. Nel più piccolo progetto riesco ancora a passare fuori perché il codice di base è così piccolo e davvero mi aiuta a strappare il codice come pubblicizzato.
Risposto il 26/01/2009 a 14:37
fonte dall'utente

voti
4

Anche in questo caso un po 'off-topic, ma io secondo Castello ActiveRecord - piuttosto che utilizzare il database come modello (approccio Subsonic) o passare ore in spaghetti di XML (approccio NHibernate) si piazzano gli attributi per le classi del modello.

È possibile anche ottenere ActiveRecord per generare lo schema del database per voi.

Abbiamo utilizzato questo approccio su un bel paio di progetti ora ed i benefici sono i seguenti:

  • facile percorso di aggiornamento per NHibernate se necessario in futuro
  • Il supporto per semplici modelli di ereditarietà - ad es. Auto -> Vehicle
  • Lo schema che genera è più probabile come si sarebbe creato comunque, in modo da poter trascorrere più tempo a costruire l'applicazione, piuttosto che preoccuparsi di mantenere il vostro modello / db in sincronia.
Risposto il 16/09/2008 a 13:15
fonte dall'utente

voti
4

Penso che praticamente inchiodato. Subsonic genera codice, quindi gli oggetti di business sarà riflettente della vostra struttura del database. NHibernate utilizza file di mapping che mappano gli oggetti di business alla base di dati così gli oggetti possono essere strutturati come più vi piace.

Quali sono le dimensioni di un progetto è questo? Ci sarà il supporto a lungo termine necessaria? È il rapporto costo-efficacia di Subsonic andando per compensare eventuali problemi di scala?

Risposto il 04/08/2008 a 18:12
fonte dall'utente

voti
3

Considerate la vostra squadra e dimensioni del progetto quando si considera ActiveRecord.

Nella mia esperienza, ActiveRecord è un'astrazione in cima NHibernate che inizia perde come un colabrodo quando si cerca di scenari più complicati.

Se si dispone di uno schema da moderatamente a fortemente complicato o non semplice, bastone con NHibernate. È possibile scomporre e analizzare è vicino alla perfezione.

L'altro luogo si potrebbe ottenere nei guai è quando si ha bisogno di una query moderatamente complicato. ActiveRecord nasconde un sacco di implementazione di NHibernate ... ma avrete bisogno per una query complessa, che diventerà molto difficile se siete completamente familiarità con HQL. Essere membri del team attento non si limitano a mettere mano ai bordi invece di imparare NHibernate e HQL.

Risposto il 02/10/2008 a 20:26
fonte dall'utente

voti
3

Siamo bootstrap con subsonico ed ora stiamo cercando di valutare se ci accingiamo a passare a NHibernate ora che siamo in corrispondenza dei punti di dolore di subsonica.

La nostra altra opzione è quella di creare un po 'di terra di mezzo in cui usiamo subsonico per interrogare e caricare oggetti arbitrari con il loro "eseguire come lista digitato" funzionalità che fa una mappatura basata nome fuori di un'istruzione SQL stile LINQ arbitraria. O per cercare di ricreare alcuni di esso in NHibernate e refactoring il resto.

Allora io dico subsonico ha senso in piccole applicazioni, ma la manutenzione su applicazioni subsoniche diventa piuttosto peloso, abbiamo tempi particolarmente duri con codice di validazione si sovrappongono, e pre / post nel codice innescato eventi. Per un modello di record attivo, subsonico è sicuramente l'80% lì, ma lo fa quarantina in modo traballante, e vi impedisce di avere un reale controllo sulla tua gerarchia di ereditarietà, dal momento che ogni classe deve ereditare un tavolo per tornare a quel tavolo.

Risposto il 30/08/2008 a 07:18
fonte dall'utente

voti
2

Credo che si dovrebbe attenersi a quello che si può utilizzare al meglio. L'obiettivo finale è il codice di qualità produttività e buona performante. Se si conosce SubSonic in e out quindi attenersi ad esso e se si sa NHibernate in stick profondità NHibernate. Questo è questione molto soggettiva. Si dovrebbe anche prendere in considerazione il fatto che ciò che il vostro team membri stanno avendo esperienza con. Se siete bravi a farlo si sarà in grado di mantenere facilmente.

Ho visto grandi progetti che utilizzano SubSonic mentre NHibernate è già famoso e ampiamente utilizzato.

La decisione di scegliere ORM non dipende solo dal ORM stesso.

Risposto il 03/11/2009 a 06:52
fonte dall'utente

voti
2

Abbraccia l'impedenza non corrispondente!

controllalo

:)

O non fare. Se si desidera prestazioni, fai da te. Se si desidera facile e veloce, andare con NHibernate e ActiveRecord. Se ti piace far finta che in realtà sa cosa sta succedendo a livello di accesso ai dati, utilizzare NHibernate e sedersi con XML per tutto il giorno per ottenere una relazione molti a molti di andare ... O semplicemente ... err .. fai da te - ADO.Net FTW!

Risposto il 08/02/2009 a 02:51
fonte dall'utente

voti
0

Il consiglio che ho ottenuto sul tema è che Subsonic non scala per gestire scenari più complessi e così se si va su questa strada ci si ritroverà con un lavoro cercando di scambiare sopra ad un ORM più avanzato.

Sono quindi più interessati a utilizzare NHibernate per i casi complessi, Castello di Active Record per i casi più semplici e sto tenendo d'occhio Fluent NHibernate che dovrebbe rendere NHibernate mappatura molto più facile (soprattutto una volta che il supporto di mapping basato convenzione è migliorato).

Risposto il 25/10/2008 a 15:20
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more