2008-09-08 14 views
5

Attualmente sto lavorando per mettere insieme uno strumento ORM abbastanza semplice da servire come framework per vari progetti web per un cliente. La maggior parte dei progetti è interna e non richiede enormi quantità di concorrenza e tutto andrà contro SQL Server. Ho suggerito di utilizzare strumenti ORM come SubSonic, NHibernate e una serie di altri progetti open source, ma per ragioni di manutenibilità e flessibilità vogliono creare qualcosa di personalizzato. Quindi la mia domanda è questa: quali sono alcune caratteristiche che dovrei assicurarmi di includere in questo strumento ORM? A proposito, userò MyGeneration per creare i modelli di generazione del codice.Buone caratteristiche per un ORM

+1

Il client non dovrebbe preoccuparsi del tipo di ORM utilizzato e invece convincerli che otterranno il loro prodotto/servizio sul mercato più rapidamente quando implementeranno tecnologie open source/librerie di terze parti (jQuery, Enterprise Library, ecc.). – Kane

+0

NHibernate è più manutenibile e più flessibile dell'ORM di uno sviluppatore povero di homebrew, uno dei consulenti qui costruito per uno dei nostri progetti. – JasonTrue

risposta

1

È necessario utilizzare lo stile ibibernato, secondo la mia esperienza, e disporre di una sorta di mappa, tra gli oggetti e il database. Ciò consente ai tuoi oggetti di avere alcune cose che sono difficili da rappresentare in un database ma che sono più facili da rappresentare in POCO.

Generation è una buona partenza, dando classi che soddisfano lo schema, ma se si pensa di mantenere qualcosa o testare qualsiasi cosa, la mappatura è dolore adesso per piacere in seguito.

Subsonic è un ottimo modello e il suo open source, se si deve andare in generazione, usa i propri modelli in myGeneration per ottenere un vantaggio.

BTW: Ho fatto quello che stai facendo, e ho finito con qualcosa di molto simile al subsonico, e ora consiglio ai miei clienti di prendere la fonte subsonica, e forchetta loro stessi.

23

Per amore di tutto ciò che è sacro (e delle donne e dei bambini), fare tutto il possibile per convincerli a non andare con una soluzione O/RM personalizzata. Perché le persone vogliono reinventare la ruota quando esistono già ruote perfettamente funzionanti open source?!?!

+0

Beh, sono assolutamente d'accordo ... Sono un grande fan sia di SubSonic che di NHibernate, ma in questo caso penso che il Cliente stia andando quasi sempre indietro. –

3

L'IMO che scrive il tuo OR/M è una delle peggiori decisioni progettuali che tu possa mai prendere. "manutenibilità e flessibilità" sono esattamente le ragioni per NON scrivere il proprio OR/M.

Si prega di leggere See 25 Reasons Not To Write Your Own Object Relational Mapper, e vedere se il cliente vuole davvero pagare quanto costa per costruire qualcosa di simile NHibernate ($ 7.6M) o SubSonic ($ 1.5M). Perché, come detto sopra ChanChan, ti ritroverai con qualcosa di simile.

1

Forse solo forse, hai bisogno di alcune "caratteristiche" che non esistono ancora nelle soluzioni esistenti. Forse hai anche bisogno di qualcosa di più semplice. 1,5 $ per Subsonic è semplicemente oltraggioso. Forse vuoi usare POCO. Forse vuoi usare le cose facilmente in uno scenario a 3 livelli. Forse non si vuole per supportare tutti i RDBMS sul pianeta, in modo da poter hardcode e ottimizzare il codice solo per la vostra destinazione. Forse vuoi implementare il monitoraggio degli oggetti più intelligente. Forse alcune decisioni di progettazione prese dagli orms esistenti ti fanno impazzire ....

Io stesso sto usando un orm personalizzato sviluppato da me stesso e io, e sono soddisfatto che l'ho fatto. Non c'è nessun drago nascosto sotto il tappeto, nessuno scenario a sorpresa. Il mio orm fa exacty quello che voglio fare, niente di meno, niente di più.

5

Se il client non è interessato a OSS a causa di (reale o immaginario) le percezioni sul supporto, avete considerato una delle top-qualità ORM di terze parti commerciali quali LightSpeed che viene fornito con una bella GUI designer strumento

LightSpeed ORM http://www.mindscape.co.nz/images/chrome/screendump.jpg

Mindscape (l'azienda che vende LightSpeed) è una società neozelandese con sede vicino a dove vivo, ho incontrato alcuni dei sviluppatori lì, e so che sono famosi per avere l'assistenza clienti incredibile. E ti danno il codice sorgente quando acquisti il ​​software, così puoi modificarlo come preferisci.

Probabilmente non si desidera eseguire il proprio ORM a meno che non sia necessario e che il cliente sia disposto a consegnare una stupida quantità di denaro per farlo.

0

Nessuno lo ha ancora menzionato; ma vai con LLBLGen. Puoi personalizzare il modello come preferisci e puoi anche, ovviamente, scrivere il tuo codice personalizzato nelle classi generate. Compralo. Non ti guarderai mai indietro e dirai "Grazie setoso!" quando funziona in modo coerente splendidamente. (Non l'ho scritto, ma lo adoro). Se non funziona per te, potresti anche dire "Accidenti a te!". Ma è improbabile, tuttavia lo offro come opzione.

L'unica cosa negativa che ho notato su LLBLGen è stato il supporto per il passaggio tra database/server al volo. Non supporta una funzione che mi piacerebbe; vale a dire la capacità di rilevare che una determinata entità che hai recuperato non "esiste" in un nuovo database a cui sei passato. Ma questo è un caso raro.

Suggerisco LLBLGen, perché stavo scrivendo il mio OR/M quando l'ho incontrato. Mai guardato indietro

2

C'è un gruppo di post di Davy Brion (un commissario di NHibernate) che per qualche motivo è costretto a scrivere un ORM personalizzato per un cliente.

Alcune delle cose che copre sono: Classi

  • mappatura tabelle
  • Fuori la funzionalità di sicurezza CRUD
  • Entità idratante
  • Sessione Livello cache
  • Esecuzione personalizzato query

Sicuramente vale la pena controllare ng out, se DEVE andare su questo percorso: Build Your Own Data Access Layer Series

0

Il tuo lavoro come consulente (sembra che sia quello che sei) è quello di sfruttare la tua esperienza nell'implementazione per i tuoi clienti di una soluzione che si adatta ai loro desideri con un costo minimo e investimento nel tempo.

Se vogliono costruire e vendere un OR/M. L'andare in città a farne uno. Se vogliono qualcos'altro, usane uno che esiste già per portare a termine il lavoro.

Se insistono a spendere soldi, ne comprano uno esistente (non chiamerò nessuno, ma esistono alcuni buoni che non sono gratuiti).

1
  • cache di secondo livello

    Consente di mantenere le istanze entità in-memory

    • automatico dirty-checking

      permette aggiornamenti cambiamenti in un oggetto senza caricarla.

    • potente linguaggio di query

    • Potente cascata operazione

    • strategia potente generatore di chiavi primaria

      quadro ORM strategia migliore generatore di chiavi primaria pick-up in base al database di destinazione

    • Supporto alla elementi compositi

    • supporto ad eventi

      onSave, onUpdate e così via

    • buona documentazione e libri di riferimento

    • Supporto per lo stato della conversazione

riguarda,

0

Prova ad usare Devart LinqConnect - tutte le funzionalità LINQ to SQL e il vasto supporto dei server di database più diffusi: Oracle, MySQL, Postgre, SQL Server e SQLite. Incredibile strumento di modellazione visiva, strumento di monitoraggio avanzato, supporto di alta qualità - come risultato l'ho imparato solo in tre settimane durante l'esecuzione del mio progetto.

Problemi correlati