2010-09-21 57 views
1

很簡單(對於90%的aop特性而言)在沒有任何支持作爲語言本身的情況下完成它,就像大多數動態語言(如python和ruby)一樣。但是,Dojo直接支持它在1.3.2。最新版本發生了什麼?他們刪除了它嗎?Javascript AOP支持

是否有另一個JavaScript aop庫應該得到更多關注?

回答

2

dojox.lang.aspect仍然存在,仍然被嚴重的項目使用。沒有人刪除它。實際上,我希望它的一部分將成爲即將到來的Dojo 2.0的重要組成部分。

你的問題是什麼原因?找不到一些鏈接,或者是其他的東西?請讓我知道,我會爲此提供幫助。

更新:

API文檔鏈接:http://dojotoolkit.org/api/dojox/lang/aspect.html

到我的博客帖子大約AOP(它被列在你的問題:http://lazutkin.com/blog/2008/may/18/aop-aspect-javascript-dojo/)鏈接仍然是當前,這樣你就可以使用它作爲一般參考。我計劃將它遷移到官方參考文檔。

+0

未能進行˚F ind在最新的文檔中。它使它看起來像被遺棄了。 – 2010-09-21 01:51:23

+0

當然不是。我會調查文檔問題。現在,我將API文檔鏈接添加到我的答案中。 – 2010-09-21 06:59:41

+0

太好了。如果它是作爲一個單獨的圖書館提供給dojo之外的話,那麼它會更大,但是在Nodejs之外的JavaScript項目通常不會將模塊化作爲一個大問題。 – 2010-09-21 16:40:15

0

那麼,你可以嘗試這些裝飾品https://www.npmjs.com/package/ng-aspect帶給TypeScript(ES2015/2016)真正的AOP體驗。看看這個代碼

import { Before, After, Pointcut } from "./aspect"; 

class Foo { 
    @Pointcut 
    bar(){ 
    console.log("calling bar", arguments); 
    } 
} 

class Advice { 
    @Before(Foo, "bar") 
    preLog() { 
    console.log("calling pre-log", arguments); 
    } 

    @After(Foo, "bar") 
    postLog() { 
    console.log("calling post-log"); 
    } 
} 

(new Foo()).bar(1, 2, 3); 

// calling pre-log 1,2,3 
// calling bar 1,2,3 
// calling post-log 
0

當然,任何語言都會支持AOP,因爲是一種技術,您應該通過自己來實現它。

ES7裝飾器非常適合AOP語法,但不需要打字來獲得真正的AOP體驗。即使ES5可以做到這一點:

var Class = require("kaop").Class; 

var Dummy = Class({ 
    someMethod: [ //decoratedMethod 
    "subscribe","$inject", //befores 
    function($$dep1){ 
     //method body 
    }, 
    "trigger: 'action'", //afters (advice with an argument) 
    ], 
    anotherMethod: function(){ 
    /* method without advices */ 
    } 
}) 

我建議你檢查我最近它實現了頂級AOP功能的工作,即使是異步調用

https://github.com/k1r0s/kaop https://github.com/k1r0s/kaop-ts(阿爾法)(如果你愛ES7裝飾)

我也寫了一篇文章,解釋這個技巧

https://medium.com/@k1r0s/aspect-oriented-programming-in-javascript-es5-typescript-d751dda576d0#.3d04ziock