Задача: нужно при активации услуги продлять жизнь объявления.
Как не писать одинаковый код в каждом обработчике активации?
Примеры возможного аспектно-ориентированного кода на разных языках.
Код на перле рабочий с библиотекой Aspect
, на остальных языках просто возможные варианты.
Первый вариант использует простые обёртки - перед вызовом AdvertService.activate()
навешивает обёртку на метод .save()
отдельного объявления, которая уже его продляет. Второй вариант комбинирует два среза: вызов AbstractAdvert.save()
и нахождение в потоке управления AdvertService.activate()
, и накладывает обработчик на комбинированный срез.
Интересно как недостаточный синтаксис и семантика разных языков делают подобные операции неуклюжими.
P.S. Другой вариант - использование событий, но он более многословный.