door John Vandivier
NOTE: May 2018: Read From TypeORM to LoopBack: A Retrospective for an updated perspective!
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
Dit artikel bespreekt Object Relational Mapping (ORM) – oplossingen in het JavaScript-ecosysteem en identificeert een ideale oplossing op basis van specifieke vereisten.
Wat is een ORM en waarom is het zo belangrijk?
ORM-oplossingen zijn nuttig om gegevensgestuurde API-ontwikkeling te vergemakkelijken. Gebruikers hebben concrete behoeften die het datamodel van een toepassing aandrijven. In legacy-ontwikkeling wordt deze gegevensarchitectuur meestal geà mplementeerd en versiegestuurd met behulp van databasescripts zoals SQL-scripts. Een aparte bibliotheek wordt vervolgens gebruikt voor de servertoepassing om CRUD-acties uit te voeren in de database.
ORMs werken als een API op hoog niveau om CRUD uit te voeren, en deze dagen staat kwaliteit ORMs ons ook toe om de gegevens te initialiseren door middel van code. Complexe datamanipulatie, schoonmaken en ga zo maar door, is vaak makkelijker in code. Hoewel er speciale extractie -, transformatie-en Load-tools (ETL) bestaan, kunnen dezelfde ETL-taken eenvoudig worden geïmplementeerd in ORM.
het implementeren van extract, transform, en load met code maakt het voor een systeem gemakkelijker om data van zeer verschillende bronnen te integreren. SQL-databases met meerdere smaken, NoSQL-gegevens, bestandssysteem-gegevens en gegevens van derden kunnen allemaal worden geïntegreerd onder een enkele taal met een JavaScript ORM.
ten slotte stelt code-georiënteerde databeheer een systeem ook in staat om datagebruik tijdens het uitvoeren of in het bouwproces te implementeren en het gebruik tijdens het ontwikkelingsproces flexibel aan te passen indien nodig.
om Orm ‘ s te herformuleren, verbeteren ze de productiviteit van ontwikkelaars door een API op hoog niveau te bieden, in één taal, met functionaliteit die traditioneel verschillende hulpmiddelen en vaardigheden vereist. Minder vaardigheidsbehoeften, gereedschapsbehoeften en benodigde uren faciliteert projectmarge. Onvoorziene vereisten en projecttijdlijn worden beter voorbereid met flexibele build-en runtime-gegevensconfiguratie.
geprefereerde ORM-mogelijkheden
de specifieke projectcontext die leidt tot deze ORM-beoordeling vereist de implementatie van een geavanceerde, CMS-achtige, universele JavaScript-toepassing.
Cutting edge universal JavaScript frameworks komen in wezen in 3 smaken: hoekig, React, en Vue. Dat wil zeggen hoekige Universele, Volgende, en Nuxt.
Node ondersteunt native bestandssysteem operaties, dus Content Management Systeem data eisen komen neer op een voorkeur voor brede database ondersteuning. In totaal worden de volgende vereisten in aanmerking genomen: :
- Ondersteuning voor Mongo en MySQL met voorkeur voor ondersteuning van extra opties
- Integreren met Webpack
- Integreren met Express
- Minimaal getroffen om de prestaties op run tijd
- Intuïtieve syntaxis
- Extra functies
- Hoge Github ster probleem ratio
- Actief onderhouden met geen bouwfouten of niet meer in gebruik afhankelijkheden
De Kandidaten en de Resultaten
Elke kandidaat kreeg een score tussen 0 en 10 voor elke gewenste capaciteit. Een score van 5 betekent acceptabel. Het gemiddelde voor een kolom kan meer of minder zijn dan 5. Een ORM met ondersteuning voor meerdere NoSQL-databases en geen ondersteuning voor een SQL-database krijgt bijvoorbeeld een score tussen 2 en 4. 0 geeft het volledige ontbreken van een functie.
een speciale shout-out voor joi, pg en knex. Deze bibliotheken zijn niet vol ORMs, maar ze zijn geweldig in wat ze doen. Als u niet een full blown ORM nodig, neem een kijkje en kijk of ze kunnen uw behoefte aan te pakken.
conclusie
de totalen geven het algemene nut van elke oplossing weer. De top 5 resultaten waren:
- Loopback
- waterlijn
- Mongoose
- TypeORM
- Sequelize
een combinatie van projectspecifieke behoeften, weggelaten factoren, en persoonlijke voorkeur leiden tot de top 3 picks.
Waterline is sterk geïntegreerd in het Sails framework en Mongoose ondersteunt alleen MongoDB.
Sequelize en NodeORM2 zijn beperkt tot SQL en ze missen API generatie.
vanwege de TypeScript syntaxis integreert TypeORM mooi met een hoekig project.
als ontwikkelaar adviseer ik prototyping van meer dan één topoplossing om de echte winnaar te identificeren. De top 3 oplossingen, die allemaal prototyping kandidaten zijn, omvatten:
- Loopback
- TypeORM
- Caminte
Ik heb deze informatie aan andere ontwikkelaars over het project, en als een team besloten om TypeORM eerst uit te proberen. Kom later terug voor de retrospectieve!