1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wm123450405-aspects-js

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

аспекты-js

аспекты-js

中文

Используйте аспекты в Node.js

1. Установка

Установите с помощью npm

$ npm install --save aspects-js

2. Использование

Сначала требуется импортировать aspects-js в основной js-файл

require('aspects-js');

3. Добавление аспекта

Добавьте js-файл для записи аспекта. Сначала вам следует импортировать класс Aspect из aspects-js.

// файл: testAspect.js
const { Aspect } = require('aspects-js');

Затем вы должны объявить класс, расширяющий Aspect, и реализовать свойства pointcut и функции для точки соединения.

// файл: testAspect.js
class TestAspect extends Aspect {
    get pointcut() { return '*.do*()' };
    before() { console.log('это для точки соединения до выполнения') };
    after() { console.log('это для точки соединения после выполнения') };
}

После этого экспортируйте экземпляр вашего класса, который расширяет Aspect.

// файл: testAspect.js
module.exports = new TestAspect();

Наконец, импортируйте ваши аспекты в основной файл entry.js

// файл: entry.js
require('./testAspect.js');

Теперь все классы, которые вы импортировали, будут разделены всеми вашими аспектами.

4. Классы и Интерфейсы

Интерфейс Aspect

interface Aspect {
    readonly pointcut: Pointcut | string | ((joinPoint: JoinPoint) => boolean);
    readonly order: number;

    after(joinPoint: JoinPoint, result: any, error: Error): void;
    afterReturn(joinPoint: JoinPoint, result: any): any;
    afterThrow(joinPoint: JoinPoint, error: Error): void;
    before(joinPoint: JoinPoint): void;
    around(joinPoint: JoinPoint): any;
}
```### Класс `JoinPoint`
```typescript
class JoinPoint {
    readonly type: Class;
    readonly fun: Function;
    readonly thisArg: any;
    readonly target: any;
    readonly args: any[];

    proceed(...args: any[]): any;
}

Класс Pointcut

class Pointcut {
    constructor(pointcut: string);

    matches(joinPoint: JoinPoint): boolean;
}
```## 5. Выражение pointcut
### 1. Обычное
```javascript
"ClassName.FunctionName()"

2. Ключевое слово execution

"execution(ClassName.FunctionName())"

3. Ключевое слово within

"within(ClassName)"

4. Аргументы

"FunctionName(. .)"
"FunctionName(Type1,Type2)"
"FunctionName(Type1,. .,Type2)"

5. Операторы и шаблоны

> * Соответствие всем словам шаблонов

"*Service.do*()"

Соответствует всем методам, название которых начинается с do, и находится в классах, название которых заканчивается на Service.

> ? Соответствие одному слову шаблонов

"you?.do?()"

> + Операция "или" для названий

"within(Test1+Test2)"

Соответствует всем методам в классах, название которых Test1 или Test2.

> |, || Операция "или" для условий

"within(Test1)|within(Test2)"

Соответствует всем методам в классах, название которых Test1 или Test2.

> &, && Операция "и" для условий

"within(Test1)&abc"

Соответствует методу abc в классе Test1.

> ! Операция "не" для условий

"!within(Test)"

Соответствует всем методам, кроме методов в классе Test.

> () Оператор скобок для условий

Увеличивает приоритет выражений.

> () Оператор вызова для функций

"abc()"
"abc(. .)"

Соответствует всем методам, название которых abc.

"abc(Type1)"

Соответствует всем методам, название которых abc и имеющим один аргумент, являющийся экземпляром класса Type1.

> , Разделительный оператор для аргументов

"(Type1,Type2)"
```Соответствует всем методам, имеющим два аргумента, где первый является экземпляром класса `Type1`, а второй — экземпляром класса `Type2`.
#### > `. ` Оператор свойства для поиска методов классов
```javascript
"Test.abc()"

Соответствует методу abc класса Test.

> . . Оператор нескольких аргументов для аргументов

Соответствует нулевому или любому количеству аргументов.### 5. Другое

Свойство order интерфейса Aspects

Высший приоритет при меньших значениях

6. Обновления и выпуски

1.0.2.pre

Поддержка функций для точки отсечения Добавлено свойство order для класса Aspects

1.0.1

Используется AST для точки отсечения

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

JavaScript: аспектно-ориентированное программирование, может использоваться для логирования, обработки транзакций и другой унифицированной обработки кода, не связанного с бизнес-логикой. Развернуть Свернуть
Отмена

Обновления (2)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/wm123450405-aspects-js.git
git@api.gitlife.ru:oschina-mirror/wm123450405-aspects-js.git
oschina-mirror
wm123450405-aspects-js
wm123450405-aspects-js
master