Maison interface Web js tutoriel Compréhension approfondie de la série JavaScript (21) : Explication détaillée du principe d'isolation d'interface FAI des cinq principes de S.O.L.I.D_Basic knowledge

Compréhension approfondie de la série JavaScript (21) : Explication détaillée du principe d'isolation d'interface FAI des cinq principes de S.O.L.I.D_Basic knowledge

May 16, 2016 pm 04:11 PM
isp javascript

Avant-propos

Ce que nous allons expliquer dans ce chapitre est le quatrième des cinq principes d'implémentation du langage JavaScript S.O.L.I.D, le principe de ségrégation d'interface ISP (principe de ségrégation d'interface).

Texte original en anglais :http://freshbrewedcode.com/derekgreer/2012/01/08/solid-javascript-the-interface-segregation-principle/
Remarque : L'auteur de cet article est assez alambiqué, donc l'oncle est assez déprimé quand il le comprend. Il suffit de le lire et de ne pas trop s'y plonger
. La description du principe d'isolation de l'interface est la suivante :

Copier le code Le code est le suivant :

Les clients ne devraient pas être obligés de dépendre de méthodes qu’ils n’utilisent pas.

Les clients ne devraient pas être obligés de s'appuyer sur des méthodes qu'ils n'utilisent pas.

Lorsqu'un utilisateur s'appuie sur une méthode d'interface qui n'est utilisée que par d'autres utilisateurs mais pas par lui-même, il doit implémenter ces interfaces. En d'autres termes, un utilisateur s'appuie sur une interface qui n'est pas utilisée mais est utilisée par d'autres utilisateurs. . Lorsque d'autres utilisateurs Lorsque cette interface est modifiée, tous les utilisateurs qui en dépendent seront affectés. Cela viole évidemment le principe ouvert-fermé et n’est pas ce à quoi nous nous attendons.

Le principe d'isolation d'interface ISP est quelque peu similaire à la responsabilité unique. Ils sont tous deux utilisés pour regrouper les responsabilités fonctionnelles. En fait, ISP peut être compris comme la conversion d'un programme avec une seule responsabilité en un objet avec une interface publique.

Interface JavaScript

Comment respecter ce principe sous JavaScript ? Après tout, JavaScript n'a pas les caractéristiques d'une interface. Si l'interface est ce que nous voulons établir un contrat et découpler via un type abstrait fourni par un certain langage, alors on peut dire que tout va bien, mais JavaScript a une autre forme. d'interface. Dans le livre Design Patterns – Elements of Realistic Object-Oriented Software on retrouve la définition de l’interface :
http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612

Toute opération déclarée par un objet contient un nom d'opération, un objet paramètre et la valeur de retour de l'opération. Nous appelons cela la signature de l'opérateur.
Toutes les opérations déclarées dans un objet sont appelées l'interface de l'objet. L'interface d'un objet décrit toutes les informations de requête qui se produisent sur cet objet.
Qu'un langage fournisse ou non une construction distincte pour représenter une interface, tous les objets ont une interface implicite composée de toutes les propriétés et méthodes de l'objet. Référez-vous au code suivant :

Copier le code Le code est le suivant :

var exempleBinder = {};
exempleBinder.modelObserver = (function() {
/* Variables privées */
Retour {
         observer : fonction(modèle) {
                                                  /* Code */
               return newModel ;
},
onChange : fonction (rappel) {
                                                  /* Code */
>
>
})();

exempleBinder.viewAdaptor = (function() {
/* Variables privées */
Retour {
           bind : fonction (modèle) {
                                                  /* Code */
>
>
})();

exempleBinder.bind = fonction (modèle) {
/* Variables privées */
ExempleBinder.modelObserver.onChange(/* rappel */);
var om = exampleBinder.modelObserver.observe(model);
ExempleBinder.viewAdaptor.bind(om);
Retour om;
};

La fonction implémentée par la bibliothèque de classes exampleBinder ci-dessus est une liaison bidirectionnelle. L'interface publique exposée par cette bibliothèque de classes est la méthode bind. Les fonctions de notification de modification et d'interaction de vue utilisées dans bind sont respectivement implémentées par des objets distincts modelObserver et viewAdaptor. Dans un sens, ces objets sont l'interface publique bind. la méthode.

Bien que JavaScript ne fournisse pas de type d'interface pour prendre en charge le contrat d'un objet, l'interface implicite de l'objet peut toujours être fournie aux utilisateurs du programme sous forme de contrat.

FAI et JavaScript

Certaines des sections dont nous discutons ci-dessous portent sur l'impact de la violation du principe d'isolation de l'interface en JavaScript. Comme vu ci-dessus, il est dommage d'implémenter le principe d'isolation d'interface dans les programmes JavaScript, mais il n'est pas aussi puissant qu'un langage typé statiquement. Les caractéristiques du langage JavaScript rendent parfois ce qu'on appelle l'interface un peu non collante.

Réalisation de la Chute

Dans les langages typés statiquement, l'une des raisons pour lesquelles le principe du FAI est violé est une implémentation défectueuse. Toutes les méthodes définies dans les interfaces en Java et C# doivent être implémentées. Si vous n'en avez besoin que de quelques-unes, les autres méthodes doivent également être implémentées (soit par une implémentation vide, soit en lançant une exception). En JavaScript, si vous n'avez besoin que de certaines interfaces dans un objet, cela ne peut pas résoudre le problème d'implémentation corrompue, bien qu'il ne soit pas nécessaire d'imposer l'implémentation des interfaces ci-dessus. Mais cette implémentation viole toujours le principe de substitution de Liskov.

Copier le code Le code est le suivant :

var rectangle = {
Zone : fonction() {
          /* Code */
},
Dessiner : fonction() {
          /* Code */
>
};

var géométrieApplication = {
GetLargestRectangle : fonction (rectangles) {
          /* Code */
>
};

var dessinApplication = {
drawRectangles : fonction (rectangles) {
         /* Code */
>
};

Lorsqu'un substitut de rectangle satisfait le getLargestRectangle du nouvel objet GeometryApplication, il n'a besoin que de la méthode Area() du rectangle, mais il viole LSP (car il n'utilise pas du tout la méthode draw qui peut être utilisée par la méthode drawRectangles .

Couplage statique

Une autre raison des violations des FAI dans les langages typés statiquement est le couplage statique. Dans les langages typés statiquement, les interfaces jouent un rôle important dans un programme de conception faiblement couplé. Que ce soit dans un langage dynamique ou un langage statique, un objet peut parfois avoir besoin de communiquer entre plusieurs utilisateurs clients (comme dans le cas d'un état partagé). Pour les langages typés statiquement, la meilleure solution consiste à utiliser des interfaces de rôle, qui permettent aux utilisateurs et à l'objet d'interagir ( et l'objet peut devoir jouer plusieurs rôles), car sa mise en œuvre dissocie l'utilisateur des actions non liées. Ce problème n’existe pas en JavaScript, car les objets sont découplés grâce aux avantages uniques des langages dynamiques.

Couplage sémantique

Une raison courante qui conduit à des violations du FAI, à la fois dans les langages dynamiques et dans les langages typés statiquement, est le couplage sémantique. Ce qu'on appelle le couplage sémantique est une dépendance mutuelle, c'est-à-dire que le comportement d'un objet dépend d'un autre objet. , ce qui signifie que si un utilisateur modifie l'un des comportements, cela affectera probablement un autre utilisateur. Cela viole également le principe de responsabilité unique. Ce problème peut être résolu par l'héritage et la substitution d'objets.

Évolutivité

Une autre raison du problème est l'évolutivité. De nombreuses personnes donneront des exemples de rappel pour démontrer l'évolutivité (comme les paramètres de rappel après un succès en ajax). Si une telle interface nécessite une implémentation et qu'il existe de nombreuses familiarités ou méthodes dans l'objet implémenté, ISP deviendra très important, c'est-à-dire que lorsqu'une interface devient une interface qui doit implémenter de nombreuses méthodes, sa mise en œuvre deviendra extrêmement complexe. , et peut amener ces interfaces à assumer une responsabilité non collante. C'est ce que nous appelons souvent de grosses interfaces.

Résumé

Les fonctionnalités dynamiques du langage JavaScript rendent notre implémentation d'interfaces non collantes moins influente que les langages typés statiquement, mais le principe d'isolation des interfaces a toujours sa place dans le modèle de programmation JavaScript.

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
4 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Vivo X200 Pro : un meilleur appareil photo et une puce V4 AI dévoilés. Les X100 et X90 Proto seront dotés de la fonction appareil photo du Vivo X100 Ultra Vivo X200 Pro : un meilleur appareil photo et une puce V4 AI dévoilés. Les X100 et X90 Proto seront dotés de la fonction appareil photo du Vivo X100 Ultra Jul 31, 2024 pm 08:23 PM

Vivo n'a pas encore annoncé publiquement le nom du successeur du X100, mais divers teasers sur son profil officiel Weibo parlent déjà de la prochaine génération d'appareils photo phares, en particulier de la technologie de capteur qui remplacera le Sony IMX9.

Comment mettre en œuvre un système de reconnaissance vocale en ligne à l'aide de WebSocket et JavaScript Comment mettre en œuvre un système de reconnaissance vocale en ligne à l'aide de WebSocket et JavaScript Dec 17, 2023 pm 02:54 PM

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de reconnaissance vocale en ligne Introduction : Avec le développement continu de la technologie, la technologie de reconnaissance vocale est devenue une partie importante du domaine de l'intelligence artificielle. Le système de reconnaissance vocale en ligne basé sur WebSocket et JavaScript présente les caractéristiques d'une faible latence, d'un temps réel et d'une multiplateforme, et est devenu une solution largement utilisée. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de reconnaissance vocale en ligne.

WebSocket et JavaScript : technologies clés pour mettre en œuvre des systèmes de surveillance en temps réel WebSocket et JavaScript : technologies clés pour mettre en œuvre des systèmes de surveillance en temps réel Dec 17, 2023 pm 05:30 PM

WebSocket et JavaScript : technologies clés pour réaliser des systèmes de surveillance en temps réel Introduction : Avec le développement rapide de la technologie Internet, les systèmes de surveillance en temps réel ont été largement utilisés dans divers domaines. L'une des technologies clés pour réaliser une surveillance en temps réel est la combinaison de WebSocket et de JavaScript. Cet article présentera l'application de WebSocket et JavaScript dans les systèmes de surveillance en temps réel, donnera des exemples de code et expliquera leurs principes de mise en œuvre en détail. 1. Technologie WebSocket

Comment mettre en œuvre un système de réservation en ligne à l'aide de WebSocket et JavaScript Comment mettre en œuvre un système de réservation en ligne à l'aide de WebSocket et JavaScript Dec 17, 2023 am 09:39 AM

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de réservation en ligne. À l'ère numérique d'aujourd'hui, de plus en plus d'entreprises et de services doivent fournir des fonctions de réservation en ligne. Il est crucial de mettre en place un système de réservation en ligne efficace et en temps réel. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de réservation en ligne et fournit des exemples de code spécifiques. 1. Qu'est-ce que WebSocket ? WebSocket est une méthode full-duplex sur une seule connexion TCP.

Comment utiliser JavaScript et WebSocket pour mettre en œuvre un système de commande en ligne en temps réel Comment utiliser JavaScript et WebSocket pour mettre en œuvre un système de commande en ligne en temps réel Dec 17, 2023 pm 12:09 PM

Introduction à l'utilisation de JavaScript et de WebSocket pour mettre en œuvre un système de commande en ligne en temps réel : avec la popularité d'Internet et les progrès de la technologie, de plus en plus de restaurants ont commencé à proposer des services de commande en ligne. Afin de mettre en œuvre un système de commande en ligne en temps réel, nous pouvons utiliser les technologies JavaScript et WebSocket. WebSocket est un protocole de communication full-duplex basé sur le protocole TCP, qui peut réaliser une communication bidirectionnelle en temps réel entre le client et le serveur. Dans le système de commande en ligne en temps réel, lorsque l'utilisateur sélectionne des plats et passe une commande

JavaScript et WebSocket : créer un système efficace de prévisions météorologiques en temps réel JavaScript et WebSocket : créer un système efficace de prévisions météorologiques en temps réel Dec 17, 2023 pm 05:13 PM

JavaScript et WebSocket : Construire un système efficace de prévisions météorologiques en temps réel Introduction : Aujourd'hui, la précision des prévisions météorologiques revêt une grande importance pour la vie quotidienne et la prise de décision. À mesure que la technologie évolue, nous pouvons fournir des prévisions météorologiques plus précises et plus fiables en obtenant des données météorologiques en temps réel. Dans cet article, nous apprendrons comment utiliser la technologie JavaScript et WebSocket pour créer un système efficace de prévisions météorologiques en temps réel. Cet article démontrera le processus de mise en œuvre à travers des exemples de code spécifiques. Nous

Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Jan 05, 2024 pm 06:08 PM

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

Comment utiliser insertBefore en javascript Comment utiliser insertBefore en javascript Nov 24, 2023 am 11:56 AM

Utilisation : En JavaScript, la méthode insertBefore() est utilisée pour insérer un nouveau nœud dans l'arborescence DOM. Cette méthode nécessite deux paramètres : le nouveau nœud à insérer et le nœud de référence (c'est-à-dire le nœud où le nouveau nœud sera inséré).

See all articles