En tant que développeur Javascript, considérez-vous que les modèles de conception traditionnels sont importants ou moins importants qu’ils ne l’ont été avec d’autres langages / environnements ?.
Les modèles de conception classiques ne s'appliquent pas à JavaScript.
Ce qui s’applique, c’est l’écriture de code modulaire et fonctionnel.
Vous devriez utiliser un mélange de constructeurs et de fonctions de première classe.
En tant que développeur JavaScript, je préconise personnellement de traiter JavaScript en tant que LISP plutôt que Java. Essayez donc d’imiter les monades et le code de style fonctionnel de haut niveau plutôt que d’essayer d’imiter le code OOP classique.
Veuillez nommer les trois principaux modèles de conception que vous utilisez régulièrement en tant que développeur Javascript et donnez un exemple de la façon dont ils ont contribué à votre développement Javascript.
Encore une fois, les modèles de conception ne s’appliquent pas vraiment beaucoup, mais vous trouverez ci-dessous trois concepts importants.
- Utilisation de fermetures
- Utilisation de fonctions de première classe
- Utilisation de fabriques d'objets avec ou sans
new
Veuillez laisser un type de contexte pour lequel je peux montrer des exemples de ce type de techniques par rapport à la création du même type de code à l'aide de modèles de conception traditionnels.
Jetons un coup d'oeil à quelques-uns des modèles de conception classiques et à la façon de les implémenter dans js ainsi qu'à d'autres modèles plus adaptés à js lui-même:
Modèle d'observateur:
En node.js
cela est simplement events.EventEmitter
. En jQuery
ceci est $.fn.bind
&& $.fn.trigger
. En backbone
cela est Backbone.Events.trigger
et Backbone.Events.bind
. C'est un modèle très courant utilisé dans le code au jour le jour.
Je ne m'arrête jamais et pense "Hey, j'utilise un motif d'observateur ici!". Non, il s'agit simplement d'un moyen de bas niveau de faire passer des messages ou d'un moyen de changer en cascade.
Par exemple, dans le réseau principal, toutes les vues MVC sont liées à l' onchange
événement models. Ainsi , si vous modifiez le modèle, toutes les modifications apportées à la vue sont automatiquement répercutées. Oui, il s’agit d’un modèle puissant, mais son utilisation est si courante dans la programmation événementielle qu’elle ne réalisait pas qu’elle l’utilisait partout.
Dans le WebSocket
protocole que nous avons, .on
nous utilisons pour nous lier aux on("message", ...
événements. Encore une fois, c'est très courant, mais c'est un observateur sur un flux plutôt que votre POO classique while (byte b = Stream.ReadNextByte())
.
Ce sont toutes des utilisations puissantes du modèle Observer. Mais ce n'est pas un motif que vous utilisez. Ceci est une partie simple de la langue. Ceci est juste du code.
Mémento Pattern:
Ceci est simplement JSON. Il vous permet de sérialiser l'état d'un objet afin de pouvoir annuler une action.
function SomeObject() {
var internalState;
this.toJSON = function() {
return internalState;
}
this.set = function(data) {
internalState = data;
}
this.restore = function(json) {
internalState = JSON.parse(json);
}
}
var o = new SomeObject();
o.set("foo"); // foo
var memento = JSON.stringify(o);
o.set("bar"); // bar
o.restore(memento);
En JavaScript, nous supportons nativement une API pour les souvenirs. Il suffit de définir une méthode appelée toJSON
sur n'importe quel objet. Lorsque vous appelez, JSON.stringify
il appelle en interne .toJSON
votre objet pour obtenir les données réelles que vous souhaitez sérialiser en JSON.
Cela vous permet de créer des instantanés de votre code de manière triviale.
Encore une fois, je ne réalise pas que ceci est un motif de souvenir. Il s’agit simplement d’utiliser l’outil de sérialisation JSON.
Modèle d'état / modèle de stratégie:
Vous n'avez pas besoin d'un modèle d'état. Vous avez des fonctions de première classe et des types dynamiques. Il suffit d’injecter des fonctions ou de modifier les propriétés à la volée.