Есть ли в Dart способ перехвата доступа и мутаций к конструкциям программирования?

Например, среда Spring AOP для Java предлагает функциональные возможности для предоставления перехватчика для перехвата некоторых процессов, например, при выполнении метода — Spring AOP может перехватить исполняемый метод и добавить дополнительные функции до или после выполнения метода.

Я хочу знать, есть ли что-то подобное в Dart. Можете ли вы, например, в Dart перехватывать обращения и изменения к переменной? Я не смог найти что-то подобное в документации Dart.

Спасибо


person user224567893    schedule 11.04.2014    source источник
comment
Я еще не видел ничего подобного для Dart. Я могу себе представить, что это можно было бы сделать, например, с помощью преобразователя, который изменяет код.   -  person Günter Zöchbauer    schedule 11.04.2014
comment
Вы можете реализовать прокси-объекты, используя noSuchMethod().   -  person Greg Lowe    schedule 11.04.2014
comment
Я не думаю, что вы можете найти что-то даже в документации по Java. Без использования среды Spring AOP вы не сможете использовать эти функции в Java. Spring AOP не перехватывает исполняемый метод. Он действует как пост-компилятор, который выполняется после компиляции кода Java в байт-код. Он изменяет байт-код перед его выполнением. Я не думаю, что вы правильно понимаете, как работает эта техника. В платформе Dart этот метод может быть не очень полезен, потому что он не использует байт-код. Это скриптовый (человекочитаемый) язык, и использование пост-компилятора не всегда возможно.   -  person mezoni    schedule 11.04.2014
comment
@mezoni FYI, нативная Java не имеет такой возможности. Однако eclipse.org/aspectj делает это и многое другое. Вы можете заменить javac на ajc, если хотите, или постпроцессировать скомпилированные файлы .class.   -  person Matthew Adams    schedule 12.12.2019
comment
@MatthewAdams Вы написали native Java? Не могли бы вы объяснить мне разницу между Java и native Java? Какая еще Java? Что произойдет, если я заменю ajc на javac?   -  person mezoni    schedule 12.12.2019
comment
@mezoni Я имел в виду простую, ванильную Java. JDK, поставляемый Oracle, не включает в себя какие-либо функции АОП, предлагаемые AspectJ.   -  person Matthew Adams    schedule 12.12.2019
comment
@MatthewAdams Да... ванильная Java, ванильный C#, ванильный Dart. Кто следующий? Почему нужно называть их родными, ванильными? Зачем ты это делаешь?   -  person mezoni    schedule 12.12.2019


Ответы (1)


Сейчас вы не можете сделать это во время runtime. Возможно, вы могли бы сделать что-то подобное, как только появятся построители зеркал. Из Отражение в Dart с зеркалами: введение

В будущем мы хотели бы поддерживать более мощные функции отражения. К ним относятся построители зеркал, позволяющие программам расширять и изменять себя, а также API отладки на основе зеркал.

Однако вы можете сделать это во время построения либо в препроцессоре (например, build.dart), либо с помощью трансформер паба. Вы также можете использовать пакет анализатора, чтобы получить AST, если он вам нужен. Это можно увидеть как APT в Java.

person Alexandre Ardhuin    schedule 11.04.2014
comment
Ссылка дает 404 на момент написания. Можете ли вы сообщить об этом? - person Ric Hard; 30.09.2020