av John Vandivier
OBS: maj 2018: Läs från TypeORM till LoopBack: en retrospektiv för ett uppdaterat perspektiv!
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
den här artikeln granskar lösningar för Objektrelationell kartläggning (ORM) i JavaScript-ekosystemet och identifierar en idealisk lösning baserad på specifika krav.
Vad är en ORM och varför är det så viktigt?
ORM-lösningar är användbara för att underlätta datadriven API-utveckling. Användare har konkreta behov som driver datamodellen för en applikation. I äldre utveckling implementeras denna dataarkitektur vanligtvis och versionskontrolleras med databasskript som SQL-skript. Ett separat bibliotek används sedan för serverprogrammet för att utföra CRUD-åtgärder i databasen.
ORMs fungerar som en hög nivå API för att utföra CRUD, och dessa dagar kvalitet ORMs tillåter oss också att initiera data genom kod. Komplex datamanipulation, rengöring och så vidare är ofta lättare i kod. Medan dedikerade Extract, Transform and Load-verktyg (ETL) finns, kan samma ETL-uppgifter enkelt implementeras i ORM.
genom att implementera extract, transform och load med code kan ett system lättare integrera data från mycket olika källor. SQL-databaser med flera smaker, NoSQL-data, filsystemdata och tredjepartsdata kan alla integreras under ett enda språk med en JavaScript ORM.
slutligen tillåter kodorienterad datakontroll också ett system att implementera dataanvändning vid körning eller i byggprocessen och flexibelt anpassa användningen under utvecklingsprocessen efter behov.
För att återställa förbättrar ORMs utvecklarens produktivitet genom att tillhandahålla ett API på hög nivå, på ett enda språk, med funktionalitet som traditionellt skulle kräva flera olika verktyg och färdigheter. Färre kompetensbehov, verktygsbehov och timmar som krävs underlättar projektmarginalen. Oförutsedda krav och projekt tidslinje är bättre förberedda med flexibel bygga och run-time datakonfiguration.
föredragna ORM-funktioner
det specifika projektkontexten som leder till denna ORM-granskning kräver implementering av en banbrytande, CMS-liknande, universell JavaScript-applikation.
Cutting edge universal JavaScript-ramar finns i huvudsak 3 smaker: Angular, React och Vue. Det vill säga Angular Universal, Next och Nuxt.
Node stöder nativt filsystemoperationer, så datakrav för innehållshanteringssystem motsvarar en preferens för omfattande databasstöd. Totalt beaktas följande krav:
- stöd för Mongo och MySQL, med preferens till stöd för ytterligare alternativ
- integrera med Webpack
- integrera med Express
- Minimal träff till prestanda vid körning
- intuitiv syntax
- Extra funktioner
- hög Github stjärna att utfärda förhållandet
- aktivt underhålls utan bygga fel eller föråldrade beroenden
kandidaterna och resultat
varje kandidat fick en poäng mellan 0 och 10 för varje föredragen kapacitet. En poäng på 5 betyder acceptabelt. Medelvärdet för en kolumn kan vara mer eller mindre än 5. Till exempel får en ORM med stöd för flera NoSQL-databaser och inget stöd för någon SQL-databas en poäng mellan 2 och 4. 0 indikerar den fullständiga bristen på en funktion.
en speciell shout-out till joi, pg och knex. Dessa bibliotek är inte fulla ORMs men de är bra på vad de gör. Om du inte behöver en fullblåst ORM, ta en titt och se om de kan tillgodose ditt behov.
slutsats
summorna återspeglar den totala användbarheten för varje lösning. De 5 bästa resultaten var:
- Loopback
- Waterline
- Mongoose
- TypeORM
- Sequelize
en kombination av projektspecifika behov, utelämnade faktorer och personliga preferenser leder till de 3 bästa valen.
Waterline är starkt integrerad i Sails framework och Mongoose stöder endast MongoDB.
Sequelize och NodeORM2 är begränsade till SQL och de saknar API-generation.
På grund av TypeScript-syntaxen integreras TypeORM snyggt med ett Vinkelprojekt.
Som utvecklare rekommenderar jag prototyper mer än en topplösning för att identifiera den verkliga vinnaren. De 3 bästa lösningarna, som alla är prototypkandidater, inkluderar:
- Loopback
- TypeORM
- Caminte
Jag skickade denna information till andra utvecklare på projektet, och som ett team bestämde vi oss för att prova TypeORM först. Kom tillbaka senare för retrospektivet!