Могу ли я иметь свою основную логику для обновления статуса объекта в аспекте
У меня есть требование, где я буду выполнять набор операций в шаблоне цепи ClassA->ClassB->ClassC, вызывая общий метод action(). В идеале ClassA, ClassB и ClassC реализуют интерфейс IClass, имеющий метод action().
В конце метода action () его состояние (сбой / успех) должно быть обновлено в базе данных.
Так что я сомневаюсь,
- Это хороший дизайн, чтобы использовать рекомендации Аспекта для метода "action" и обновлять статус в классе Aspect после выполнения действия.
- Наше, так как это основная логика для обновления статуса действия, это не должно быть частью сквозной структуры как аспект?
1 ответ
Я не думаю, что аспект является правильным вариантом для реализации вышеуказанного поведения. Аспект является общим кодом, который используется в нескольких классах / модулях.
Типичные примеры transaction management, logging
Лучшим вариантом может быть написание одного интерфейса и реализации, как показано ниже:
public interface StatusUpdater{
updateActionStatus();
}
Пусть один класс реализует этот интерфейс.
public class StatusUpdaterImpl implements StatusUpdater{
updateActionStatus();
}
Ввести этот класс в Class A , B and C
и делегировать обновление базы данных этому классу.
Это позволит вам гибко изменять поведение обновления базы данных при необходимости.
Есть еще один класс имплантации StatusUpdater
интерфейс и ввести в цель