АОП: основные идеи - сделать объекты простыми? - PullRequest
2 голосов
/ 30 июня 2011

Я работаю с Spring Framework 3.0.5 и мне хотелось бы понять основные принципы Spring. Одним из них является АОП.

Одной из основных идей каркаса Spring является упрощение самих объектов и четкий код.

Д.И. следует этой основной идее. Он обеспечивает четкий код, а сами объекты могут быть очень простыми. Не нужно искать их зависимости.

Теперь, что насчет AOP: я имею в виду, что код с AOP определенно яснее, но есть ли у AOP и основная идея сделать объекты максимально простыми? Я не уверен в этом, поэтому я хотел бы узнать некоторые другие мнения: -)

Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 30 июня 2011

Основной мотивацией для АОП является использование его для так называемых сквозных задач , поскольку в функциональности вы должны предоставить практически все части вашего приложения, обычно это:

  • каротаж
  • Аутентификация
  • аудит
  • transactionality.

AOP позволяет вам извлекать эти функции в отдельные классы и просто отмечать ваши классы, которые в них нуждаются.

Смотрите это отличное видео, чтобы понять основную идею. Чтобы ответить на ваш вопрос, да, это очень поможет сохранить ваши классы в чистоте, потому что они будут заботиться только о своей собственной функциональности и не будут предоставлять шаблонный код снова и снова.

3 голосов
/ 30 июня 2011

Возьмем следующие фрагменты кода в качестве примера. легкий способ:

@PersistenceContext
private EntityManager em;

@Transactional
public void save(Object obj) {
    em.persist(obj);
}

Традиционный способ (вы можете управлять транзакциями, используя интерфейс EntityManager, но это не главное):

@PersistenceContext
private EntityManager em;

@Resource
private AbstractPlatformTransactionManager transactionManager;

public void save(final Object obj) {
    new TransactionTemplate(transactionManager).execute(new TransactionCallbackWithoutResult() {
        @Override
        protected void doInTransactionWithoutResult(TransactionStatus status)
        {
            em.persist(obj);
        }
    });
}

Какое это имеет отношение к АОП? Управление транзакциями является одним из наиболее широко используемых примеров АОП, и Spring не является исключением. Первый фрагмент кода использует аннотацию @Transactional для применения демаркации транзакции с использованием аспекта, а второй управляет транзакциями вручную. Видите выгоду?

Ключевой момент: используйте аспекты для сквозных задач, таких как ведение журнала, профилирование и т. Д. Не выстраивайте свою бизнес-логику в аспектах. Таким образом, ваши компоненты остаются ясными, а нерелевантный код с точки зрения бизнеса скрыт в аспекте.

Кроме того, АОП позволяет вам делать все виды сложных вещей с легкостью. Возьмем, к примеру, обработку сеанса HTTP - с областью действия session и проксированием AOP вы можете получить доступ к сеансу даже не осознавая этого.

Подводя итог - это отличный инструмент для правильной работы.

...