La naissance
La naissance d’un Elfe peut mener à deux choix distincts. Soit votre Elfe vivra seul pour toujours, soit il se multipliera pour prospérer et dominer le m…. Soyons sérieux, ici il est question de singletons et des autres.
Un Elfe seul
Un Elfe (service) de ce type est très simple à créer car il suffit de dériver sa
classe du type Elf.Alone. Vous pouvez alors y adjoindre les quêtes que vous
souhaitez de la même manière que pour un service instanciable plusieurs fois.
Dans le cas d’un singleton, vous ne devez pas avoir de quête create ni de
quête delete. Par contre il est d’usage d’y adjoindre une quête init faisant
office de constructeur.
const {Elf} = require('xcraft-core-goblin');
class Valinor extends Elf.Alone {
async init() {
/* await quelque chose ... */
}
}
module.exports = Valinor;Il n’est pas obligatoire d’y adjoindre une quête
init. Dans ce cas il est d’usage d’utiliser une quête nomméeboot. Il est important de respecter les noms utilisés par ce type de quêtes. En effet,createetiniton un fonctionnement particulier selon le type destateutilisé par votre Elfe, voir la section Son état.
Une horde d’Elfes
Les service d’instances sont un petit peu différents car il doivent dériver du
type Elf. Les quêtes fonctionnent de la même manière que pour les Elfes seuls.
Néanmoins deux quêtes remplacent la quête init présenté avec les singletons.
La quête create doit être utilisé comme constructeur pour le service, et la
quête delete comme “destructeur”.
const {Elf} = require('xcraft-core-goblin');
class Elrond extends Elf {
async create(id, desktopId = null) {
/* await quelque chose ... */
}
delete() {
/* quelque chose ... */
}
}
module.exports = Elrond;Il est fortement recommandé de toujours utiliser des quêtes de delete 100%
synchrones. Des effets de bords indésirables peuvent survenir si vous effectuez
du code asynchrone dans une quête de type delete. En effet, l’ordonnanceur
Goblin ne s’attend pas à devoir gérer de l’asynchrone dans un delete quand un
Goblin de même ID doit être instancié au même moment.
Ici on parle de Goblin, car ce comportement est généralisé. Dans certains cas il est possible d’utiliser un
deleteasynchrone si vous pouvez garantir que le code appelé ne provoque aucun race avec uncreatepour ce même ID.
Menez votre Elfe aux Terres Immortelles
N’oubliez pas de les y emmener en plaçant le fichier de service Xcraft à la
racine d’un des arbre de Valinor. Uhm, pardon, j’veux dire à la racine de votre
module Goblin bien entendu. Il n’y a aucune différence entre l’exportation
Xcraft pour un Elfe de type Elf.Alone et un Elfe de type Elf.
const {Elf} = require('xcraft-core-goblin');
const {Elrond} = require('./lib/elrond.js');
exports.xcraftCommands = Elf.birth(Elrond);Ceci est un exemple avec un Elfe sans état (sans state).