Javascript apparaissant comme le langage de programmation omniprésent sur le Web au cours des prochaines années, de nouvelles infrastructures apparaissent toutes les cinq minutes et la programmation événementielle prend le pas sur les serveurs et les clients:
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 ?.
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.
Réponses:
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.
Encore une fois, les modèles de conception ne s’appliquent pas vraiment beaucoup, mais vous trouverez ci-dessous trois concepts importants.
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 simplementevents.EventEmitter
. EnjQuery
ceci est$.fn.bind
&&$.fn.trigger
. Enbackbone
cela estBackbone.Events.trigger
etBackbone.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 auxon("message", ...
événements. Encore une fois, c'est très courant, mais c'est un observateur sur un flux plutôt que votre POO classiquewhile (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.
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.
la source
Prenez cette réponse comme un avis subjectif.
Si vous parlez de modèles de conception traditionnels tels que Gang of Four , la plupart des techniques sont agnostiques en langage / plate-forme, telles que "Programmer une interface, pas une implémentation" ou "Favoriser la composition d'objet par rapport à l'héritage de classe" et revêtent une importance égale pour les développeurs JavaScript.
Des modèles plus spécifiques tels que création, structure et comportement peuvent ou ne doivent pas nécessairement être utilisés de la même manière ou aussi fréquemment que dans d'autres langues, car les fonctionnalités de la langue peuvent affecter grandement leur utilisation. Certaines langues (JavaScript inclus) ont donc leurs propres modèles de conception basés sur la fonctionnalité ou le sucre syntaxique qu’elles offrent.
En général, je dirais que les modèles de conception traditionnels sont aussi importants que dans d'autres langues, mais les modèles spécifiques à JavaScript sont plus importants que les modèles traditionnels.
Parmi les modèles de conception JavaScript essentiels, j'utilise principalement ceux-ci:
1. Modèle de constructeur (avec prototypes)
Particulièrement côté serveur lors de l’écriture de choses dans node.js, car il est bien adapté à l’écriture de modules bien qu’il manque une encapsulation native. En outre, il est populaire pour de nombreux autres développeurs si vous parcourez les référentiels sur GitHub. Par conséquent, la connaissance de ce modèle peut vous aider à mieux comprendre les autres codes.
2. Modèle de module révélateur
Offre une modularité avec encapsulation.
3. Modèle DRY
Ceci est plutôt spécifique à un scénario, bien que tous les développeurs devraient l’utiliser autant que possible.
la source
Les modèles de conception sont enseignés dans les classes de conception pour CS. Elles ne sont pas essentielles, mais très utiles si vous pouvez trouver des situations analogues pour trouver une solution réfléchie.
Cela permet également aux programmeurs de communiquer plus facilement. Vous pouvez également parler à votre collègue des modèles. Si vous dites ici que j’ai mon Observateur, alors on comprend assez bien ce qui se passe.
Les gens vont naturellement proposer des solutions qui s’intègrent dans un modèle de conception, mais ces derniers permettent de définir une terminologie et des idées standard qui peuvent être utiles.
Il n’ya rien de particulièrement remarquable en ce qui concerne les modèles. Le plus gentil, c’est que ce sont des idées qui sont canonisées et définies de manière toujours utile.
la source
Ils sont vitaux.
En effet, les concepts de solutions réutilisables peuvent transcender le langage. - Modifications de la syntaxe - Modifications de la mise en œuvre - La notion de modèle existe toujours.
Les développeurs de toutes les langues peuvent apprendre le JS avancé en apprenant des modèles plutôt que la syntaxe. Ceux qui ne le savent pas manquent.
Il existe des schémas fréquemment utilisés contre lesquels certains pourraient "argumenter". Cependant, ils sont intéressants à connaître car ils sont extrêmement courants et puissants dans les systèmes de stockage avancés avancés.
1- Namespace - encapsulez votre code dans un objet.
var x = (fonction () {}) ();
2- ObjectConfiguration, modèle de type usine. -Passer un objet à une fonction, pas un tas de vars.
var produit = usine ({});
3- Fonction de rappel. - Passer une fonction en tant que paramètre, à appeler une fois la tâche terminée.
function longTask (function () {// m'appelle quand c'est fait});
Comme je l'ai dit, certains pourraient dire que ce ne sont pas des schémas, mais ils sont très courants et très puissants, et il convient de les mentionner car ce sont en effet des solutions réutilisables très utiles à des problèmes communs. Quelle est la définition du motif de conception.
Excellente question.
J'espère que ça t'as aidé.
la source