Могу ли я иметь свою основную логику для обновления статуса объекта в аспекте


У меня есть требование, где я буду выполнять набор операций в шаблоне цепи 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 интерфейс и ввести в цель

Другие вопросы по тегам