Pointcut

редактировать

В аспектоориентированном компьютерном программировании pointcut a устанавливает из точек соединения. Pointcut указывает, где именно применять advice, это позволяет разделить задачи и помогает в модульной бизнес-логике. Pointcuts часто указываются с использованием имен классов или имен методов, в некоторых случаях с использованием регулярных выражений, соответствующих имени класса или метода. Разные платформы поддерживают разные выражения Pointcut, синтаксис AspectJ считается стандартом де-факто. Фреймворки доступны для различных языков программирования, таких как Java, Perl, Ruby и многих других, которые поддерживают pointcut.

Содержание
  • 1 Предпосылки
  • 2 Выполнение
  • 3 Выражения
  • 4 Критика
  • 5 Ссылки
  • 6 Внешние ссылки
Справочная информация

Из-за ограничений в различных языки программирования, сквозные проблемы не разделены на модули. Общие проблемы относятся к частям программного обеспечения, которые логически относятся к одному модулю и влияют на всю систему, это может быть безопасность, ведение журнала и другие. Аспектно-ориентированное программирование пытается решить эти перекрестные устранение проблем следующим образом: это позволяет программистам писать модули, называемые аспектами. Аспекты содержат фрагменты кода, выполняемые в определенный момент. Выражения, необходимые для выбора конкретной точки, привели к созданию Pointcut Expressions.

Выполнение

Каждый раз, когда выполнение программы достигает одной из точек соединения, описанных в pointcut, фрагмент кода, связанный с pointcut (называемый совет ) выполняется. Это позволяет программисту описывать, где и когда должен выполняться дополнительный код в дополнение к уже определенному поведению. Это позволяет добавлять аспекты к существующему программному обеспечению или проектировать программного обеспечения с четким разделением задач, при этом программист переплетает (объединяет) различные аспекты в законченное приложение.

Предположим, есть приложение, в котором мы можем изменять записи в базе данных. Каждый раз, когда пользователи изменяют базу данных, и мы хотим иметь журнал с информацией о том, кто изменяет записи. Традиционный способ ведения журнала - это вызов метода журнала непосредственно перед изменением метода базы данных. С помощью аспектно-ориентированного программирования мы можем применить pointcut для изменения метода базы данных и получить advice, который вызывается для регистрации необходимой информации.

Expressions

Некоторые важные выражения Pointcut, поддерживаемые AspectJ. Эти выражения можно комбинировать с помощью логических операторов.

выполнение (void User.setPassword (пароль))

Этот pointcut соответствует выполнению метода Users.setPassword.

call (void User.getPassword ())

Когда вызывается Users.getPassword, этот pointcut сопоставляется.

обработчик (ArrayIndexOutOfBounds)

Pointcut будет соответствовать, когда есть исключение ArrayIndexOutOfBounds

this (UserType)

Pointcut будет соответствовать, когда объект, выполняемый в данный момент, имеет UserType

target (UserType)

Pointcut будет соответствует, когда целевой объект имеет тип UserType

в пределах (UserType)

Pointcut будет соответствовать, когда выполняемый код принадлежит UserType.

Критика

Языки Pointcut отрицательно влияют на важные свойства программного обеспечения, такие как эволюционируемость и понятность. Возможна ситуация, когда необходимо выполнить рефакторинг для определения правильного аспекта, чего в общем случае не должно происходить, поскольку рефакторинг должен сделать код более чистым. Он также не масштабируемый, когда к одному и тому же коду нужно применить несколько аспектов, и каждый аспект требует различного рефакторинга. В общем, каждый аспект будет тесно связан со структурой приложения, так как pointcut явно содержит сигнатуру метода. Поэтому, когда приложение изменяет, также необходимо изменить pointcut. Это довольно проблематично для разработчика.

Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-02 09:16:17
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте