by John Vandivier
nota: Maio de 2018: Lido do TypeORM ao LoopBack: uma retrospectiva para uma perspectiva actualizada!
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
Este artigo analisa as soluções de mapeamento Relacional de objetos (ORM) no ecossistema JavaScript, e identifica uma solução ideal baseada em requisitos específicos.
o que é uma ORM e por que é tão importante?as soluções ORM são úteis para facilitar o desenvolvimento de API com base em dados. Os usuários têm necessidades concretas que conduzem o modelo de dados de uma aplicação. No desenvolvimento do legado, esta arquitetura de dados é tipicamente implementada e a versão controlada usando scripts de banco de dados como scripts SQL. Uma biblioteca separada é então usada para a aplicação servidor para executar ações CRUD no banco de dados.
ORMs funcionam como uma API de alto nível para executar CRUD, e hoje em dia a qualidade ORMs também nos permite inicializar os dados através de código. Manipulação complexa de dados, Limpeza e assim por diante, é muitas vezes mais fácil em código. Embora existam ferramentas dedicadas de extração, transformação e carga (ETL), as mesmas tarefas ETL podem ser facilmente implementadas em ORM.a implementação de extrato, transformação e carga com código permite que um sistema integre mais facilmente dados de fontes muito diferentes. As bases de dados SQL de múltiplos sabores, dados NoSQL, dados do sistema de arquivos e dados de terceiros podem ser integrados em uma única linguagem com um ORM JavaScript.
finalmente, o controle de dados orientado a código também permite que um sistema implemente o uso de dados em tempo de execução ou no processo de construção, e adapte o uso flexivelmente durante o processo de desenvolvimento conforme necessário.
recapitulando, Realiza melhorar a produtividade do desenvolvedor, fornecendo uma API de alto nível, em um único idioma, com a funcionalidade que tradicionalmente necessitam de várias ferramentas diferentes e conjuntos de habilidades. Menos necessidades de habilidade, necessidades de ferramentas e horas necessárias facilita a margem do projeto. Requisitos imprevistos e cronologia do projeto são mais bem preparados com configuração flexível de dados de compilação e de execução.
capacidades ORM preferidas
o contexto específico do projecto que leva a esta revisão ORM requer a implementação de uma aplicação JavaScript universal de vanguarda, semelhante ao CMS.
frameworks universais de vanguarda em JavaScript vêm em essencialmente 3 sabores: Angular, React, e Vue. Ou seja, universal Angular, próximo, e Nuxt.
nó nativamente suporta as operações do sistema de arquivos, de modo que os requisitos de dados do sistema de gestão de conteúdo equivalem a uma preferência por suporte de banco de dados abrangente. No total, são considerados os seguintes requisitos::
- Suporte para Mongo e MySQL, com preferência para suporte a opções adicionais
- Integrar com Webpack
- integração com Express
- Mínimo de sucesso para o desempenho em tempo de execução
- Intuitiva sintaxe
- funcionalidades Extra
- Alta Github estrela problema rácio
- mantido Activamente, sem criar falhas ou preterido dependências
Os Candidatos e os Resultados
Cada candidato recebeu uma pontuação entre 0 e 10 para cada preferencial capacidade. Uma pontuação de 5 significa aceitável. A média de uma coluna pode ser superior ou inferior a 5. Por exemplo, um ORM com suporte para múltiplas bases de dados NoSQL e nenhum suporte para qualquer banco de dados SQL receberá uma pontuação entre 2 e 4. 0 indica a completa falta de um recurso.
a special shout-out to joi, pg, and knex. Estas bibliotecas não estão cheias de ORMs, mas são ótimas no que fazem. Se você não precisa de um ORM completo, dê uma olhada e veja se eles podem atender a sua necessidade.
conclusão
os totais reflectem a utilidade global de cada solução. Os 5 melhores resultados foram:
- Loopback
WaterlineMongoose TypeORMSequelize
uma combinação de necessidades específicas do projecto, factores omitidos, e preferência pessoal levar às 3 melhores escolhas.
Waterline is heavily integrated into the Sails framework and Mongoose only supports MongoDB.
Sequelize e NodeORM2 estão restritos ao SQL e eles não têm geração API.
devido à sintaxe TypeScript, TypeORM se integra bem com um projeto Angular.
Como desenvolvedor, eu recomendo prototipagem mais de uma solução superior para identificar o vencedor real. Os 3 melhores soluções, que são todos os protótipos candidatos, incluem:
- Loopback
- TypeORM
- Caminte
eu enviei esta informação para outros desenvolvedores no projeto, e, como uma equipe, nós decidimos experimentar TypeORM primeiro. Volte mais tarde para a retrospectiva!