Est-ce que quelqu'un est capable d'illustrer Principe d'inversion de dépendance dans Javascript JQuery? P>
qui mettrait en évidence et expliquer ces 2 points: p>
a. Les modules de haut niveau ne doivent pas dépendre des modules de bas niveau. Les deux doivent dépendre des abstractions. p>
b. Les abstractions ne doivent pas dépendre des détails. Les détails doivent dépendre des abstractions. P>
Quelles sont les abstractions ou les modules de niveau élevé / bas? p>
Cela aidera vraiment à ma compréhension, merci! p>
4 Réponses :
Je dirais que la DIP s'applique à JavaScript de la même manière que celle qui s'applique dans la plupart des langages de programmation, mais vous devez être conscient du rôle de dactylographie du canard. Faisons un exemple pour voir ce que je veux dire ...
Disons que je veux contacter le serveur pour certaines données. Sans appliquer de plongée, cela pourrait ressembler à: p>
fillFromServer("/address/to/data", textViewNoJQuery);
Merci pour la réponse longue mais complète, je vais prendre un peu de temps pour digérer cela. très apprécié +1.
En outre, v. Bon exemple où le détail est complètement dépouillé de la fonction abstraite, les deux concepts que je n'étais pas sûr avant, mais peut s'identifier avec maintenant :)
Cela serait-il également un bon exemple du principe ouvert / fermé connexe?
Principe d'inversion de dépendance dans Javascript JQuery P> blockQuote>
Il n'y a aucune connexion entre DI et JQuery. DI est tout sur la structure et l'assemblage d'applications des composants. JQuery est une enveloppe pratique autour du DOM, rien de plus, il n'a aucune structure ni de composants. P>
Vous pouvez utiliser DI pour assembler votre application JavaScript, mais cela ressemblerait beaucoup à la même chose que vous utilisez JQuery ou non. P>
Alexey, j'ai voté parce qu'il s'agit d'une note importante à considérer. Cependant, dans JavaScript, DI & IOO s'écarte radicalement à partir de la norme que JS ne prend pas en charge les interfaces. Entre mon exemple et AMD (tel que le module natif-chargeur), DI est applicable. Ainsi, DIP a été implémenté dans JQuery et RAW-JavaScript à l'aide d'un adaptateur. La question la plus importante à poser est: «Dans quel contexte le plan de BCM planifie-t-il de la mise en œuvre par rapport à JQuery?». Si c'est strictement jQuery, nous devrions tous prendre note de votre réponse (et peu importe); Sinon, il existe plusieurs possibilités. Thx pour noter sur la DI de JQ.
EDIT: strong> Ceci indique l'utilisation de la plongée dans le javascript brut et un exemple moins complet em> jQuery. Cependant, la description suivante peut être facilement appliquée à JQuery. Voir exemple jQuery en bas. P> Le meilleur moyen est de tirer parti du "motif de l'adaptateur" - également appelé "wrapper". P> un adaptateur est essentiellement un moyen de Envelopper un objet ou un module de manière à fournir la même interface cohérente forte> à ses dépendants em>. De cette façon, la classe dépendante (généralement une classe forte> de niveau supérieur de niveau supérieur) peut facilement échanger des modules du même type. P> Un exemple de ce serait un niveau élevé (ou supra em>) module dépend des modules Geo / Mapping. P> permet d'analyser cela. Si notre module supra utilise déjà des googlemaps, mais la direction décide que son moins cher à partir avec des feuilles de déplacement - nous ne voulons pas avoir à réécrire chaque appel de méthode de Ce que nous voulons: nous aimerions une "wrapper" qui fournit la même interface cohérente forte > au module supra - et faites ceci pour chaque module Voici un exemple simple: p> Notez que peu importe le type de module de niveau inférieur "écrire" que nous utilisons (dans ce cas La meilleure analogie que j'ai rencontrée est la photo montrée Ci-dessous. p> jQuery Description: strong> p> Ce modèle peut être facilement appliqué à l'utilisation de cadres tels que JQuery. Un exemple serait la simple poignée de la requête DOM. Nous pouvons utiliser Tremper pour permettre à Call-couplage de sorte que si nous décidons jamais de changer de frameworks ou de s'appuyer sur des méthodes de requête DOM-Native, la maintenance est facile: p> évidemment, cet exemple aurait besoin d'une magnitude de plus de fonctionnalités pour être pratiques, mais j'espère que cela obtient le point à travers. P> Fondamentalement, les différences entre un adaptateur et une façade deviennent un peu triviales. Dans une façade, vous regardez probablement un module unique qui enveloppe une API ou un autre module; ATTENDU QUE un adaptateur crée une API de façade cohérente pour chacun de ses modules et exploite cette technique pour éviter le couplage serré. P> La plupart des carnets de modèles de conception JavaScript vont sur le motif de l'adaptateur; Celui qui passe spécifiquement sur un «adaptateur JQuery» est apprendre les modèles de conception JavaScript em> par addy osmani em> publié par O'Reilly em> - J'espère que cela aidera à clarifier les choses :) p> p> P> gmap.showmap (utilisateur, letlong) code> à < Code> Leaflet.Render (Apisecret, Latlong, utilisateur) Code>, et al. Ce serait un cauchemar de devoir porter notre application d'un cadre à une autre de cette façon. P>
infra1 code> et
infra2 Code>), nous n'avons pas à réécrire de la mise en œuvre de notre module de haut niveau,
supra code>. En effet, le trempette tire parti de deux principes de conception de logiciels différents: "COI" (inversion de contrôle) et "DI" (injection de dépendance). P>
Chaque source électrique repose sur une interface em> spécifique pour les types de choses qui doivent se brancher. P>
Voici ma compréhension et j'apprécierais les commentaires. Le test clé est «qui a le pouvoir».
Code de niveau élevé (HL) Code -> Code de niveau bas (LL). P> donc par exemple p > code ll em> p> code hl em> p> avec inversion de dépendance strong> p> Code de haut niveau (HL) Code -> Interface de service HL / LL où le code HL est également propriétaire de l'interface de service. Donc par exemple p> code hl em> p> code ll: em> p> HLdoOutputSI.register('alert', function(text) { alert(message); });
HLdoOutputSI.register('console', function(text) { console.log(message); }
Ne plonge pas pour " Traitement de l'image numérique i>"?
@Nishant: Peut-être que si vous étiez dans le domaine de la photographie ... dans le développement de logiciels Agile moderne, il représente le principe de dépendance d'inversion.
@Domenic, @nishant: Je suppose que la meilleure chose à faire est d'ajouter une étiquette de non-acronyme pour préciser ce que cette question concerne.
FreshbrewedCode.com/Deekgreer/2012/01 / 22 / ...
Vous pouvez utiliser inversify.io