Я в первую очередь разработчик Java. Я встречал немало Java-разработчиков, которые любят АОП. Я также замечаю, что в последнее время появляется все больше и больше «шаблонов проектирования» АОП, которые, кажется, получили достаточно широкое распространение. Тем не менее, я все еще не уверен, что АОП в объектно-ориентированном коде в целом является хорошей идеей по нескольким причинам.
Он добавляет «волшебство» в код в Я также замечаю, что в последнее время появляется все больше и больше «шаблонов проектирования» АОП, которые, кажется, получили достаточно широкое распространение. Даже в этом случае ...
Я в первую очередь разработчик Java. Я встречал немало Java-разработчиков, которые любят АОП. Я также замечаю, что в последнее время появляется все больше и больше «шаблонов проектирования» АОП, которые, кажется, получили достаточно широкое распространение. Тем не менее, я все еще не уверен, что АОП в объектно-ориентированном коде в целом является хорошей идеей по нескольким причинам.
Он добавляет «волшебство» в код в Я также замечаю, что в последнее время появляется все больше и больше «шаблонов проектирования» АОП, которые, кажется, получили достаточно широкое распространение. Даже в этом случае ...
Я в первую очередь разработчик Java. Я встречал немало Java-разработчиков, которые любят АОП. Я также замечаю, что в последнее время появляется все больше и больше «шаблонов проектирования» АОП, которые, кажется, получили достаточно широкое распространение. Тем не менее, я все еще не уверен, что АОП в объектно-ориентированном коде в целом является хорошей идеей по нескольким причинам.
Он добавляет «магии» в код в появившиеся недавно, которые, по-видимому, получили достаточно широкое распространение. Тем не менее, я все еще не уверен, что АОП в объектно-ориентированном коде в целом является хорошей идеей по нескольким причинам.
Он добавляет «волшебство» в код в появившиеся недавно, которые, по-видимому, получили достаточно широкое распространение. Тем не менее, я все еще не уверен, что АОП в объектно-ориентированном коде в целом является хорошей идеей по нескольким причинам.
Он добавляет «волшебство» в код в форма непрозрачной сложности, которая может быть чрезвычайно трудным для отладки и может сделать очень сложным отладку объектно-ориентированный код, который влияет.
Мне кажется, что в основном ненужный и (что еще хуже) часто используемый чтобы избежать необходимости хорошо проектировать, или чтобы компенсировать предыдущую бедность дизайн.
Вот пример, который я часто видел за последние пару лет, в качестве фона для моего вопроса.
До AOP (из документации Hibernate)
public void saveMyEntityToTheDatabase(MyEntity entity) {
EntityTransaction tx = null;
try {
tx = entityManager.getTransaction();
tx.begin();
entityManager.persist(entity);
tx.commit();
} catch (RuntimeException e) {
if(tx != null && tx.isActive()) {
tx.rollback();
}
throw e;
}
}
После AOP
@Transactional
public void saveMyEntityToTheDatabase(MyEntity entity) {
entityManager.persist(entity);
}
Многим людям кажется очевидной победой AOP. Для меня исходная проблема является симптомом несовместимых уровней абстракции API. То есть EntityManager
является намного более низким уровнем, чем API бизнес-уровня сообщения, использующего его. Эту проблему можно решить с помощью более подходящего уровня абстракции и лучшего (ОО) дизайна.
Объектно-ориентированное решение
public void saveMyEntityToTheDatabase(MyEntity entity) {
database.performInTransaction(new Save(entity));
}
Это решение предполагает, что объект базы данных
содержит ту же транзакционную логику, что и ответственный аспект, который управляет методами @Transactional
. Это решает мои проблемы выше, делая более очевидным, что есть что-то, управляющее взаимодействием с EntityManager
, а не введение другой парадигмы программирования.
Итак, наконец, мой вопрос: что может АОП делать, что ООП может т? Я немного убежден в его полезности при ведении журнала трассировки, и , возможно, реализации по умолчанию toString ()
или что-то подобное, но я хотел бы знать, нашел ли кто-нибудь его значительно лучше чем OO для конкретных типов задач.