Хранение уведомлений надлежащим образом на основе соответствующего входного канала - PullRequest
1 голос
/ 23 октября 2011

У меня следующая проблема.В моем приложении каждый пользователь может выполнять действия как через веб-клиент, так и по электронной почте.Каждое действие (метод в классе контроллера) должно неявно хранить уведомление во внешнем хранилище значений ключей (я использую Redis). Кроме того, если действие было выполнено по электронной почте, исполнитель должен быть уведомлен о состояниидействие (успех / неудача) также по электронной почте.Основная проблема, с которой я сталкиваюсь, заключается в том, как спроектировать всю структуру с максимальным разделением интересов.Например, я не хочу, чтобы сами методы контроллера делали что-либо с сохранением уведомления / отправкой ответного электронного письма.

Изначально я хотел использовать AOP и просто украсить свои методы с помощью @Action ("actionType"), к сожалению, мне также нужно было бы знать, кто является отправителем.Насколько я знаю, я не могу присваивать значения атрибутам аннотаций во время выполнения, поэтому мне пришлось подумать о другом.

Второй подход заключается в использовании интерцептора «вокруг», для остановки выполнения метода, получения текущего пользователя (из пользовательской службы в рамках сеанса), но, опять же, это будет работать для веб-контроллера.только потому, что класс обработки почты не имеет состояния и не знает о такой концепции, как currentUser (единственный способ, которым я могу получить отправителя, - через параметр электронной почты, с которым он поставляется, каждый раз, когда приходит новая почта)

Полагаю, простейшим подходом было бы явное обращение к службе уведомлений из каждого метода, для которого требуется уведомление (как в контроллере веб-запросов, так и в почтовом процессоре), но опять-таки это привело бы к тому, что методы узналинемного слишком много.

Есть предложения?

1 Ответ

0 голосов
/ 24 октября 2011

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

Хороший вопрос, кстати.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...