Duck punch
Ne parlons pas d'abord de la programmation AOP, commen?ons par la programmation Parlez de la programmation AOP en Javascript punch.
Si vous recherchez Parlez de la programmation AOP en Javascript punch sur Wikipédia, l'entrée que vous devriez trouver est Monkey Patch. Selon l'explication, le mot singe patch vient de guerrilla patch, ce qui signifie changer tranquillement le code pendant le fonctionnement. Le mot guerrilla a la même prononciation que gorille, et ce dernier signifie similaire à singe (le premier signifie ? gorille ?), et a finalement évolué vers For Monkey Patch.
Si vous n'avez pas entendu parler du punch au canard, vous avez peut-être entendu parler du typage au canard. Pour donner un exemple populaire, comment identifier un canard?:
Quand je vois un oiseau qui marche comme un canard et nage comme un canard et cancane comme un canard, j'appelle cet oiseau un canard.
Oui, si je trouve un animal qui cancane comme un canard et qui nage comme un canard, alors ce serait un canard !
Ce test peut para?tre un peu naturel et absurde, mais il est très pratique. Et il peut être utilisé pour résoudre un type de problème en programmation - pour Javascript ou des langages dynamiques similaires, comment implémenter ? interface ? ou ? classe de base ? ? Nous n'avons pas du tout besoin de nous soucier de leur passé. Nous nous soucions seulement de savoir si le type ou les paramètres de la méthode sont ce dont nous avons besoin lorsque nous les utilisons?:
var quack = someObject.quack; if (typeof quack == "function" && quck.length == arguLength) { // This thing can quack }
Je vais trop loin. en fait, ce que je veux exprimer, c'est le canard. Punch a en fait évolué à partir du typage du canard?:
s'il marche comme un canard et parle comme un canard, c'est un canard, non?? en vous donnant le bruit que vous voulez, vous n'avez qu'à frapper ce canard jusqu'à ce qu'il renvoie ce que vous attendez... Au fait, cela me rappelle une blague très vivante?:
Dans. Afin de tester la force de la police aux états-Unis, à Hong Kong et en Chine continentale, les Nations Unies ont placé trois lapins dans trois forêts. Quel policier local trouvera le lapin en premier ? Tache?: trouver le lapin. (Le milieu est omis...) Finalement, il n'y avait que quatre policiers d'un certain pays. Ils jouèrent au mahjong pendant une journée, chacun d'eux prit une matraque et entra dans la forêt. Au bout de cinq minutes, ils entendirent les cris. d'animaux venant de la forêt. Il est sorti en parlant et en riant en fumant une cigarette, et derrière lui se trouvait un ours avec le nez meurtri et le visage enflé et il a dit : ? Ne me frappe plus, je le suis. juste un lapin..."
Bien que le punch au canard Un peu violent, mais toujours une méthode efficace. Lorsqu'il s'agit d'implémentation de code, cela signifie rendre le code original compatible avec les fonctions dont nous avons besoin. Par exemple, cet exemple sur le blog de Paul Irish :
En même temps, le mode Parlez de la programmation AOP en Javascript punch peut être annulé, mais c'est juste comme ?a :
/** 我們都知道jQuery的`$.css`方法可以通過使用顏色的名稱給元素進(jìn)行顏色賦值。 但jQuery內(nèi)置的顏色并非是那么豐富,如果我們想添加我們自定義的顏色名稱應(yīng)該怎么辦?比如我們想添加`Burnt Sienna`這個顏色 */ (function($){ // 把原方法暫存起來: var _oldcss = $.fn.css; // 重寫原方法: $.fn.css = function(prop,value){ // 把自定義的顏色寫進(jìn)分支判斷里,特殊情況特殊處理 if (/^background-?color$/i.test(prop) && value.toLowerCase() === 'burnt sienna') { return _oldcss.call(this,prop,'#EA7E5D'); // 一般情況一般處理,調(diào)用原方法 } else { return _oldcss.apply(this,arguments); } }; })(jQuery); // 使用方法: jQuery(document.body).css('backgroundColor','burnt sienna')
Mais là Il y a un problème avec ceci : la méthode d'origine doit être modifiée. Cela viole le principe ? ouvert-fermé ?, qui doit être ouvert à l'expansion et fermé à la modification. Comment résoudre ce problème ? Utilisez la programmation AOP.
(function($){ var _old = $.fn.method; $.fn.method = function(arg1,arg2){ if ( ... condition ... ) { return .... } else { // do the default return _old.apply(this,arguments); } }; })(jQuery);AOP Prise en main AOP signifie Programmation orientée aspect, qui est évidemment relative à la programmation orientée objet. Aspect peut être traduit par ? aspect ? ou ? c?té ?, donc AOP est une programmation orientée aspect. Comment comprendre les aspects ? Dans la programmation orientée objet, les classes que nous définissons sont généralement des modèles de domaine, et les méthodes dont elles disposent sont généralement liées à une logique métier pure. Par exemple?:
Mais la situation réelle est généralement plus compliquée. Par exemple, nous devons ajouter une détection d'autorisation au mode de paiement, ou envoyer des journaux pour des statistiques, ou même un code tolérant aux pannes. Le code deviendra donc comme ceci?:
Class Person { private int money; public void pay(int price) { this.money = this.money - price; } }
Ce qui est encore plus effrayant, c'est qu'un code similaire doit être ajouté à d'autres méthodes. De cette fa?on, la maintenabilité et la lisibilité du code sont devenues un gros problème. Nous espérons collecter ces codes non commerciaux dispersés mais courants et les utiliser et les gérer de manière plus conviviale. Il s'agit d'une programmation d'aspect. La programmation d'aspect permet la réutilisation du code en évitant la modification du code distant. C'est comme couper différents objets horizontalement et se concentrer sur la transformation des méthodes internes. La programmation orientée objet accorde plus d'attention à la conception architecturale globale.
Class Person { private int money public void pay(price) { try { if (checkAuthorize() == true) { this.money = this.money - price; sendLog(); } } catch (Exception e) { } } }Implémentation Le Parlez de la programmation AOP en Javascript punch introduit dans la section précédente est similaire à la programmation d'aspect, qui assurent tous deux le fonctionnement de la méthode originale tout en la transformant. Mais comme mentionné à la fin, le modèle consistant à modifier directement la méthode originale va à l’encontre des principes des meilleures pratiques orientées objet. Javascript peut utiliser le modèle décorateur (en ajoutant des responsabilités supplémentaires à l'objet d'origine mais en évitant de modifier l'objet d'origine) pour implémenter la programmation AOP. Notez que l'accent est mis ici sur la mise en ?uvre. Ce que je tiens en outre à souligner, c'est que la programmation des aspects n'est qu'une idée et que le modèle de décorateur n'est qu'un moyen de mettre en pratique cette idée. Par exemple, en Java, vous pouvez utiliser le modèle de proxy, etc. . La programmation Aspect a plus de place pour jouer en Java et est plus standard. Je voulais présenter le modèle d'implémentation de Java dans cet article, mais mon niveau Java est limité et je ne comprends pas très bien l'implémentation de Java. Seule l'implémentation Javascript est présentée ici.
AOP中有一些概念需要介紹一下,雖然我們不一定要嚴(yán)格執(zhí)行
joint-point:原業(yè)務(wù)方法;
advice:攔截方式
point-cut:攔截方法
關(guān)于這三個概念我們可以串起來可以這么理解:
當(dāng)我們使用AOP改造一個原業(yè)務(wù)方法(joint-point)時,比如加入日志發(fā)送功能(point-cut),我們要考慮在什么情況下(advice)發(fā)送日志,是在業(yè)務(wù)方法觸發(fā)之前還是之后;還是在拋出異常的時候,還是由日志發(fā)送是否成功再決定是否執(zhí)行業(yè)務(wù)方法。
比如gihub上的meld這個開源項(xiàng)目,就是一個很典型的AOP類庫,我們看看它的API:
// 假設(shè)我們有一個對象myObject, 并且該對象有一個doSomething方法: var myObject = { doSomething: function(a, b) { return a + b; } }; // 現(xiàn)在我們想拓展它,在執(zhí)行那個方法之后打印出剛剛執(zhí)行的結(jié)果: var remover = meld.after(myObject, 'doSomething', function(result) { console.log('myObject.doSomething returned: ' + result); }); // 試試執(zhí)行看: myObject.doSomething(1, 2); // Logs: "myObject.doSomething returned: 3" // 這個時候我們想移除剛剛的修改: remover.remove();
由此可以看出,AOP接口通常需要三個參數(shù),被修改的對象,被修改對象的方法(joint-point),以及觸發(fā)的時機(jī)(apce),還有觸發(fā)的動作(point-cut)。上面說了那么多的概念,現(xiàn)在可能要讓各位失望了,Javascript的實(shí)現(xiàn)原理其實(shí)非常簡單
function doAfter(target, method, afterFunc){ var func = target[method]; return function(){ var res = func.apply(this, arguments); afterFunc.apply(this, arguments); return res; }; }
當(dāng)然,如果想看到更完備的解決方案和代碼可以參考上面所說的meld項(xiàng)目
結(jié)束語
這一篇一定讓你失望了,代碼簡單又寥寥無幾。本篇主要在于介紹有關(guān)Parlez de la programmation AOP en Javascript和AOP的這幾類思想,我想編程的樂趣不僅僅在于落實(shí)在編碼上,更在于整個架構(gòu)的設(shè)計。提高代碼的可維護(hù)性和可拓展性會比高深莫測的代碼更重要。
?以上就是聊Javascript中的AOP編程的內(nèi)容,更多相關(guān)內(nèi)容請關(guān)注PHP中文網(wǎng)(www.miracleart.cn)!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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 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.

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 : 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 : 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 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.

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é).

Introduction à la méthode d'obtention du code d'état HTTP en JavaScript : Dans le développement front-end, nous devons souvent gérer l'interaction avec l'interface back-end, et le code d'état HTTP en est une partie très importante. Comprendre et obtenir les codes d'état HTTP nous aide à mieux gérer les données renvoyées par l'interface. Cet article explique comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournit des exemples de code spécifiques. 1. Qu'est-ce que le code d'état HTTP ? Le code d'état HTTP signifie que lorsque le navigateur lance une requête au serveur, le service
