Domanda

Qualche tempo fa abbiamo iniziato a sviluppare un nuovo progetto che ha al suo interno circa 25-30 differenti classi / tipi / modelli che sono fortemente legati gli uni agli altri sia attraverso 1: N, N: M o N:. 1 rapporti

Allora siamo andati con un sistema di OODBMS .net nativo fondamentalmente perché ciò ci ha permesso di fare era prendere il nostro modello a oggetti e semplicemente aggiungere alcuni metodi relativi persistenza (-calls) qua e là e che eravamo pronti ad andare. Tuttavia, nel corso del tempo abbiamo incontrato sempre più avvertimenti, davvero male, non risolvibile (in tempi ragionevoli) limitazioni che ci ha costretto a implementare soluzioni alternative lenti con conseguente problemi di mediocri prestazioni e scalabilità per le tasse di orizzonte e di licenza sono quasi aumentato di un fattore 5 per noi con nessun cambiamento da parte nostra (hanno ottenuto acquistati da grandi inc.).

Per questo stiamo attualmente cominciando a cercare una soluzione a lungo termine in termini di scalabilità / prestazioni e la manutenzione. Abbiamo dato un'occhiata in altri oodbms'es "reali" e sempre imbattuti principali interruttori per noi e quindi abbiamo iniziato a guardare un po 'più avanti e fondamentalmente stiamo pensando ORM ora, che si spera teniamo la maggior parte della attenzione per i nostri oggetti, invece di litigare con SQL.

Quindi, fondamentalmente ecco la mia domanda: qualcuno ha qualche esperienza del mondo reale con Entity Framework di Microsoft o di qualsiasi altro ORM NET che mantiene la configurazione come mantenibile possibile così come si comporta bene in entità a stretto contatto / fortemente correlati? La quantità di dati che negozio non è sorprendente o estesa in qualsiasi tipo (ci aspettiamo un totale di 100k istanze in tutte le entità entro i prossimi 3 anni).

Qualcuno ha qualche idea / suggerimenti per un ORM e / o esperienza migrazione da un'OODBMS a RDBMS?

È stato utile?

Soluzione

Come si dispone di un modello di oggetto esistente e si sta cercando di migrare verso una soluzione ORM allora direi NHibernate sarebbe certamente una buona scelta. Ecco perché:

  1. Non dovrete fare (m) eventuali integrazioni / modifiche alle classi del modello di dominio per supportare la persistenza. NHibernate va un lungo cammino verso il sostegno persistenza ignoranza nel modello di dominio, anche se si possono trovare avete bisogno apportare alcune modifiche minori come la marcatura più metodi / proprietà come virtuale di quello che altrimenti farebbe per esempio.
  2. Dopo la mappatura del modello di oggetto esistente, è possibile generare lo schema per il database. Si tratta di un risparmio di tempo enorme per il dominio guidato (o solo agli oggetti modello di prima) di sviluppo. Questa funzionalità è supportata tramite il metodo FluentConfiguration.ExposeConfiguration () con fluente NHibernate o tramite lo strumento hbm2ddl con file di mapping standard di NHibernate. Questo aiuta anche, naturalmente, con manutenzione -. Modifiche al modello a oggetti può essere riflessa rapidamente lo schema del database
  3. Uso fluente NHibernate per la mappatura contribuisce a rendere la mappatura iniziale abbastanza veloce come si ottiene completamento automatico e un modello semplificato di mappatura. Questo aiuterà anche a dare la manutenibilità siete alla ricerca di - la mappatura è dichiarata nel codice con fluente NHibernate, in modo da strumenti di refactoring cambierà la mappatura di conseguenza. Si può anche trovare che è possibile utilizzare Fluent NHibernate automapping ed evitare manualmente la mappatura vostro modello a oggetti per la maggior parte.

Utilizzando Entity Framework per questo sarà più difficile. Mentre Entity Framework è un ORM in grado, sotto molti aspetti, non è così maturo come NHibernate e ci sono un paio di motivi, in questo caso specifico il motivo per cui penso che probabilmente non è la scelta migliore:

  1. Si dovrà fare un sacco di modifiche al modello di oggetto esistente per supportare Entity Framework. Se si desidera utilizzare gli strumenti attualmente in dotazione per Entity Framework si avrà probabilmente bisogno di migrare il codice per classi parziali generate che ereditano dalla classe base quadro EntityObject entità. Questo requisito eredità può o non può essere un problema per voi a seconda del modello oggetto esistente. Si potrebbe evitare questo sostenendo alcune interfacce nel codice, ma questo è non banale e penso che si perde un sacco di supporto incorporato attrezzature per la gestione delle mappature.
  2. È quasi certamente necessario creare manualmente lo schema del database. Con un buon modello di oggetti di dimensioni questo non è in genere un compito insignificante.
  3. Il quadro entità non supporta trasparente caricamento lazy fuori dalla scatola. Sono sicuro che trasparente lazy loading è qualcosa a cui siete abituati con un'OODBMS, ed è supportato dalla maggior parte dell'altro (compresa NHibernate ovviamente), ma con Entity Framework, troverete che è necessario per gli oggetti in modo esplicito .load () relativi ORM (entrambi i genitori e le relazioni figlio) prima di riferimento nel codice. Ci sono soluzioni per questo (ad esempio, questo ), ma non è un built-in funzione.

Nel complesso, a mio parere, per lo sviluppo object-prima, o dove si sta cercando di sfruttare un modello di oggetto esistente, NHibernate è una scelta migliore. Per gli sviluppi data-centric, Entity Framework (o LINQ to SQL o addirittura subsonico) diventano scelte più sostenibili.

Si consiglia inoltre di valutare le offerte ORM commerciali come Lightspeed - I hanno poca esperienza con questo particolare strumento stesso (clienti in genere oggetto di pagare per un ORM quando ci sono buone alternative gratuite), ma è molto apprezzato.

Altri suggerimenti

Non ho alcuna esperienza con OODBMSes, ma la mia esperienza con NHibernate + MS SQL Server è stato molto positivo in termini di far rispettare e cascata cambiamenti giù uno-a-molti, molti-a-uno e molti-a- molte relazioni.

Quale strumento OODBMS stai usando? Potrebbe essere possibile che un OODBMS -. Esiste strumento di migrazione> RDBMS, ma non sono a conoscenza di alcun

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