Tuesday, May 31, 2011

Annotation driven development

Я уже писал о плюсах использования АОП и аннотаций при разработке приложений [1, 2]. В дополнение к сказанному ниже я хочу привести почти реальный пример (методы переименованы и упрощены, но суть сохранилась) из рабочего проекта, наглядно демонстрирующий все плюсы данного подхода.


И так, обратите внимание на следующую службу:

/**
 * Служба работы с фичами
 *
 * @author Mikhail Krestyaninoff
 * @since 31.05.2011
 */
@Service("featureService")
public class FeatureService {

@PersistenceContext
private EntityManager entityManager;

/**
     * Добавление фичи
     *
     * @param feature
     * Фича
     */
@Loggable
@Catchable("Ошибка добавления фичи")
@Secured("ROLE_ADMIN")
@Transactional(rollbackFor = java.lang.Exception.class)
@TriggersRemove(cacheName = "feature", removeAll = true)
public void addFeature(Feature feature) throws Exception {
entityManager.persist(feature);
}

/**
     * Получение фич
     *
     * @return Список фич
     */
@Loggable
@Cacheable(cacheName = "feature")
@Transactional(readOnly=true)
public List<Feature> getFeatures() {
return entityManager.createQuery("from Feature as feature",
Feature.class).getResultList();
}
}


Элегантно, неправда ли? Почти весь не относящийся к бизнес-логике функционал вынесен за скобки - внутри методов остаётся только бизнес-логика (в данном случае работа с БД).

Давайте посмотрим, что и как удалось вынести за скобки:

  • @Loggable - логирование и профилирование метода (самописный аспект);

  • @Catchable - оборачивание исключений нижележащих слоёв в исключения слоя бизнес-логики (самописный аспект);

  • @Cachable / @TriggersRemove - кеширование (Ehcache Annotations for Spring);

  • @Transactional - управление транзакциями (Spring Framework);

  • @Secured - безопасность и разграничение прав (Spring Security).


Только представьте, сколько не относящегося к сути кода, нам удалось не написать! :)

2 comments:

  1. Спасибо за интересные статьи, можете подсказать, для начинающего девелопера, литературу по АОП? (кроме офф сайтов)

    ReplyDelete
  2. К сожалению, нет. Сам начинал с документации к AspectJ и Spring AOP.

    ReplyDelete