2015-04-11 12 views
7

Ho lavorato con implementazioni di record e data mapper attivi di ORM sufficienti per conoscere i problemi relativi all'utilizzo di ORM implementato da record attivi nei miei progetti di grandi dimensioni. In questo momento sto pensando di migrare uno dei miei progetti su node.js e provare a trovare gli strumenti simili che sto usando in questo momento. Dopo la ricerca non ho trovato alcun ORM node.js che segue il pattern del mapper dei dati. Sono tutti record attivi. Forse mi manca qualcosa e puoi dirmi che esiste un buon ORM popolare per node.js che non segue pattern di record attivi?Javascript node.js ORM che segue il pattern data-mapper

Le librerie Ive guardavano:

+0

Prova [StrongLoop] (http://strongloop.com/), è possibile associare i tipi alle tabelle e generare un client REST da utilizzare con l'API REST generata dai mapping. Non so se questo è quello che stai cercando, ma non fa male metterlo là fuori come un commento? :) – furier

+0

@furier non sembra orm – pleerock

risposta

11

Dopo molta frustrazione del momento esistono ORM per Javascript ho scritto la mia ORM che supporta dattiloscritto/ES6/ES5 e segue i modelli di dati mapper e tutti gli altri best practice - TypeORM

-5

La distinzione tra modello di dati-mapper e record attivo in realtà non ha senso nel linguaggio dinamico come JavaScript. In genere il data mapping è più leggero nella lingua digitata, ma in JS non fa davvero la differenza. Dalla cima della mia testa, posso citare due progetti molto popolare che probabilmente non si conosce:

Waterline.js è un'astrazione Sails, che funziona abbastanza bene sulla parte superiore di molti sistemi di database.

Se si considera MongoDB per il proprio DB - Mongoose.js.

+4

in realtà ha senso anche in javascript. Ho già lavorato con le librerie javascript lato client che seguono il pattern di record attivo e stavano solo uccidendo il mio app app Non ho riscritto le stesse librerie nello stile data mapper – pleerock

+2

record attivo e mapper dei dati sono modelli completamente diversi con disegni diversi. Non importa se è JavaScript o Java, lo schema è probabilmente lo stesso. –

1

Ho scritto un ORM per Node.js chiamato node-data-mapper; è disponibile qui: https://www.npmjs.com/package/node-data-mapper. È un ORM per Node.js che utilizza il pattern data-mapper. Lo sviluppatore utilizza semplici vecchi oggetti JavaScript durante la lettura e la scrittura nel database. Le relazioni tra i tavoli non sono definite rigidamente, il che rende l'unione molto flessibile, a mio avviso comunque, sebbene alquanto dettagliata. L'algoritmo di mappatura dei dati effettivo è veloce e breve e la complessità è lineare (la trasformazione da dati DB tabulari a un oggetto JavaScript normalizzato viene eseguita in un ciclo).

Ho anche fatto del mio meglio per renderlo abbastanza fault tolerant. C'è una copertura del 100% del codice e, mentre so che non prova l'assenza di difetti, ho provato a testare il più accuratamente possibile.

Ho modellato l'interfaccia molto liberamente dopo Doctrine 1. (Ho usato LINQ, Doctrine 1 e 2 e Hibernate abbastanza ampiamente, e di quegli ORM mi piace l'interfaccia per Doctrine 1 il migliore. Node-data-mapper non è una porta JavaScript di Doctrine, comunque, e l'interfaccia è significativamente diversa.) L'interfaccia di query restituisce promesse usando il modulo deferred.

Ho modellato le condizioni (ad esempio le clausole WHERE e ON) dopo le condizioni di MongoDB. Si spera che ciò renda le condizioni un po 'intuitive fornendo allo stesso tempo un modo per fare query riusabili (in particolare, query SELECT complesse che possono essere filtrate in modo sicuro in molti modi diversi). Le condizioni sono trattate come un linguaggio specifico del dominio, sono lessate, analizzate e compilate.

In ogni caso, il modulo è qualcosa che uso nei miei progetti personali, ma mi piacerebbe ricevere un feedback da altri sviluppatori nella comunità! Ho provato a fornire molti esempi per far funzionare le persone rapidamente. Attualmente il modulo supporta solo MySQL, ma sto lavorando per aggiungere supporto per MSSQL.