txs:contrib:peertube_a18:concepts_sequelize

Introduction à Sequelize

Sequelize est un ORM ( Object-relational mapping) SQL basé sur les promesses .

Notion d'ORM

Un ORM permet de faire le lien entre les bases de données relationnelles et l’approche orientée objet. Souvent, sur un système de gestion de bases de données (SGBD), on peut stocker et manipuler seulement des valeurs scalaires (entiers, chaînes de caractères…). Celles-ci sont organisées sous forme de tables. On ne peut (normalement) pas avoir de tables imbriquées. À l’inverse, dans la programmation orientée objet, un objet peut être composé d’autres objets. Par exemple, un objet Carnet d’adresses contient des objets Personne qui contiennent eux mêmes des objets Numéro de téléphone.

Un ORM servira donc à convertir un objet en un groupe de valeurs scalaires, pour le stockage dans une base de données relationnelle. Il permettra aussi de faire l’opération inverse.

Notion de promesse en JavaScript

Les promesses sont de moins en moins utilisées au profit de //async/await//, mais elles sont encore utilisées dans le code de PeerTube, ainsi que par Sequelize.

Extrait du MDN :

L'objet ''Promise'' (pour « promesse ») est utilisé pour réaliser des traitements de façon asynchrone. Une promesse représente une valeur qui peut être disponible maintenant, dans le futur, voire jamais.

Les promesses sont souvent utilisées lors des appels à une API. Imaginons qu’on fasse trois requêtes et que pour chacune on ait besoin du résultat de la précédente. On pourrait traiter cela avec des fonctions imbriquées, mais ça deviendrait vite compliqué et difficile à maintenir. Les promesses permettent d’avoir une syntaxe plus simple, en utilisant une chaîne de promesses.

  • Chaque tâche retourne un objet promise
  • Chaque objet promise possède une méthode then qui peut prendre deux autres fonctions en arguments : un gestionnaire de succès et un gestionnaire d’erreur.
  • Un seul des gestionnaires sera appelé lorsque la tâche sera terminée. S’il retourne une valeur, celle-ci sera passée en argument à la fonction suivante dans la chaîne.
  • La méthode then retournera à son tour un objet promise.

Pour illustrer ceci, voici un exemple tiré du MDN :

doSomething().then(function(result) {
  return doSomethingElse(result);
})
.then(function(newResult) {
  return doThirdThing(newResult);
})
.then(function(finalResult) {
  console.log('Got the final result: ' + finalResult);
})
.then(null, failureCallback);

La fonction doSomething() retourne result, qui est passé en argument à doSomethingElse, qui à son tour retournera newResult, et ainsi de suite.

Dans le code de PeerTube, une syntaxe plus compacte est utilisée : les fonctions fléchées.

Voici la version compacte du code ci-dessus:

doSomething()
.then(result => doSomethingElse(result))
.then(newResult => doThirdThing(newResult))
.then(finalResult => {
  console.log(`Got the final result: ${finalResult}`);
})
.catch(failureCallback);

Liens utiles

Explication du fonctionnement des promesses
Les objets en JavaScript . La syntaxe d’une classe en JavaScript peut être un peu confuse pour ceux qui sont habitués au C++, mais cet exemple permet de la comprendre rapidement.

  • txs/contrib/peertube_a18/concepts_sequelize.txt
  • de 127.0.0.1