Поддержка Javascript AOP - PullRequest
       11

Поддержка Javascript AOP

1 голос
/ 21 сентября 2010

Достаточно легко (для 90% всех функций) сделать это без какой-либо поддержки как самого языка, как в большинстве динамических языков, таких как python и ruby. Однако Dojo имел прямую поддержку для него на 1.3.2 . Что случилось в последних версиях? Они удалили это?

Есть ли еще одна библиотека Javascript AOP, которая должна привлечь больше внимания?

Ответы [ 4 ]

2 голосов
/ 21 сентября 2010

dojox.lang.aspect все еще там, все еще используется в серьезных проектах.Никто не удалил это.На самом деле, я надеюсь, что его части станут важной частью грядущего Dojo 2.0.

В чем причина вашего вопроса?Не удалось найти ссылки или это было что-то еще?Просто дайте мне знать, и я помогу с этим.

Обновление:

Ссылка на документацию API: http://dojotoolkit.org/api/dojox/lang/aspect.html

Ссылка намой пост в блоге об АОП (он указан в вашем вопросе: http://lazutkin.com/blog/2008/may/18/aop-aspect-javascript-dojo/) все еще актуален, так что вы можете использовать его в качестве общего справочника. Я планирую перенести его в официальную справочную документацию.

2 голосов
/ 21 сентября 2010

Принимая во внимание гибкий синтаксис конфет, доступный в Javascript, я бы предположил, что там будет миллиард библиотек AOP.

Быстрый поиск в Google вывел следующее:

... и еще один Stackoverflow вопрос

0 голосов
/ 22 марта 2017

Определенно, любой язык будет поддерживать 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 Decorators)

Я также написал статью, объясняющую этот совет

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

0 голосов
/ 05 августа 2016

Что ж, вы можете попробовать эти декораторы 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
...