Могут ли команды быть перехвачены в зависимости от их типа?

В Axon, командные перехватчики, кажется, перехватывают любую команду. Для проверки разрешений мне нужно основывать свое решение на типе команды, чтобы увидеть, разрешено ли это в текущем контексте.

@Override
public BiFunction<Integer, CommandMessage<?>, CommandMessage<?>> handle(List<? extends CommandMessage<?>> messages) {
    return (index, command) -> {
        // Check permissions
        return command;
    };
}

Обычно я предпочитаю регистрировать перехватчик для каждого типа команды и обрабатывать проверки разрешений в выделенных объектах. Как бы я сделал это с Аксоном? Нужно ли мне иметь груз instanceof операторы if в одном перехватчике? У кого-нибудь есть хороший пример проверки разрешений с Аксоном?

1 ответ

Решение

На данный момент (Axon 4.0) фреймворк не позволяет вам зарегистрироваться DispatchInterceptors по типу полезной нагрузки команды напрямую. Так что то, что вы предлагаете сделать, операторы if-blocks/switch- это лучшее, что вы можете сделать на данный момент.

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

Скорее всего, это приведет к гораздо меньшему значению оператора if-block/switch, чем проверка для каждого типа полезной нагрузки.

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