Hvilken JavaScript ORM skal du bruge i 2018?

BEMÆRK: Maj 2018: Læs fra TypeORM til LoopBack: En retrospektivfor et opdateret perspektiv!

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Denne artikel gennemgår ORM-løsninger (Object Relational Mapping) i JavaScript-økosystemet og identificerer en ideel løsning baseret på specifikke krav.

Hvad er en ORM, og hvorfor er den så vigtig?

ORM-løsninger er nyttige til at lette datadrevet API-udvikling. Brugere har konkrete behov, der driver datamodellen for en applikation. I ældre udvikling implementeres denne dataarkitektur typisk og styres af versionen ved hjælp af databasescripts såsom SQL-scripts. Et separat bibliotek bruges derefter til serverapplikationen til at udføre CRUD-handlinger på databasen.

ORM'er fungerer som et API på højt niveau til at udføre CRUD, og ​​i disse dage giver ORM'er af kvalitet også os mulighed for at initialisere dataene via kode. Kompleks databehandling, rengøring og så videre er ofte lettere i koden. Mens der findes dedikerede Extract, Transform and Load (ETL) -værktøjer, kan de samme ETL-opgaver let implementeres i ORM.

Implementering af ekstrakt, transformation og indlæsning med kode gør det muligt for et system lettere at integrere data fra meget forskellige kilder. SQL-databaser med flere varianter, NoSQL-data, filsystemdata og tredjepartsdata kan alle integreres under et enkelt sprog med JavaScript ORM.

Endelig tillader kodeorienteret datastyring også et system at implementere dataforbrug ved kørselstid eller i byggeprocessen og fleksibelt tilpasse brugen under udviklingsprocessen efter behov.

For at omstille forbedrer ORM'er udviklerens produktivitet ved at tilbyde et API på højt niveau på et enkelt sprog med funktionalitet, der traditionelt kræver flere forskellige værktøjer og færdigheder. Færre behov for færdigheder, behov for værktøj og krævede timer letter projektmargenen. Uforudsete krav og projektets tidslinje er bedre forberedt med fleksibel build- og runtime-datakonfiguration.

Foretrukne ORM-kapaciteter

Den særlige projektsammenhæng, der fører til denne ORM-gennemgang, kræver implementering af en banebrydende, CMS-lignende, universel JavaScript-applikation.

Forkant med universelle JavaScript-rammer kommer i det væsentlige i tre varianter: Angular, React og Vue. Det vil sige Angular Universal, Next og Nuxt.

Node understøtter indbygget filsystemoperationer, så kravene til Content Management System-data udgør en præference for omfattende databasesupport. I alt overvejes følgende krav:

  1. Understøttelse af Mongo og MySQL med fortrinsret til understøttelse af yderligere muligheder
  2. Integrer med Webpack
  3. Integrer med Express
  4. Minimal hit til ydeevne ved kørselstid
  5. Intuitiv syntaks
  6. Ekstra funktioner
  7. Høj Github-stjerne til udstedelsesforhold
  8. Aktivt vedligeholdt uden byggefejl eller forældede afhængigheder

Kandidaterne og resultaterne

Hver kandidat fik en score mellem 0 og 10 for hver foretrukket kapacitet. En score på 5 betyder acceptabel. Gennemsnittet for en kolonne kan være mere eller mindre end 5. For eksempel modtager en ORM med understøttelse af flere NoSQL-databaser og ingen understøttelse af nogen SQL-database en score mellem 2 og 4. 0 indikerer den fuldstændige mangel på en funktion.

En særlig råbe til joi, pg og knex. Disse biblioteker er ikke fulde ORM'er, men de er gode til, hvad de gør. Hvis du ikke har brug for en fuldblæst ORM, skal du kigge og se, om de kan imødekomme dit behov.

Konklusion

Totalerne afspejler den samlede anvendelighed af hver løsning. De 5 bedste resultater var:

  1. Loopback
  2. Vandlinje
  3. Mongoose
  4. TypeORM
  5. Sequelize

En kombination af projektspecifikke behov, udeladte faktorer og personlig præference fører til de tre bedste valg.

Vandlinjen er stærkt integreret i Sails-rammen, og Mongoose understøtter kun MongoDB.

Sequelize og NodeORM2 er begrænset til SQL, og de mangler API-generering.

På grund af TypeScript-syntaksen integreres TypeORM pænt med et Angular-projekt.

Som udvikler anbefaler jeg prototypering af mere end en topløsning til at identificere den rigtige vinder. De tre bedste løsninger, der alle er prototypekandidater, inkluderer:

  1. Loopback
  2. TypeORM
  3. Caminte

Jeg sendte disse oplysninger til andre udviklere på projektet, og som et team besluttede vi at prøve TypeORM først. Kom tilbage senere for retrospektivet!

Hvad synes du om dette resultat? Efterlad en kommentar eller bidrager med dine tanker til denne Slant-sammenligning.