почему CDI Event является общим? - PullRequest
0 голосов
/ 12 мая 2018

давайте предположим, что у меня есть AccountService, который уведомляет, когда учетная запись создается или удаляется.Какая разница между двумя последующими реализациями?

@Stateless
public class AccountService {

    @Inject
    protected Event<AccountCreated> accountCreated;

    @Inject
    protected Event<AccountDeleted> accountDeleted;


    public UserAccount createAccount(...) {
        ...(do stuff)
        accountCreated.fire(new AccountCreated(...));
    }

    public UserAccount deleteAccount(...) {
        ...(do stuff)
        accountDeleted.fire(new AccountDeleted(...));
    }
}

и более простой версией:

@Stateless
public class AccountService {

    @Inject
    protected Event<Object> events;


    public UserAccount createAccount(...) {
        ...(do stuff)
        events.fire(new AccountCreated(...));
    }

    public UserAccount deleteAccount(...) {
        ...(do stuff)
        events.fire(new AccountDeleted(...));
    }

}

В настоящее время я использую второй подход, но мне интересно,не делает это правильно.

1 Ответ

0 голосов
/ 14 мая 2018

То, о чем вы спрашиваете, - это в основном хорошая практика или, в некоторых случаях, личные предпочтения (или голос большинства?).

Оба подхода будут работать, однако первый будетсчитается более чистым, поскольку с первого взгляда ясно показывает, над чем вы работаете.

Более того, ваш второй пример станет еще более запутанным, если вы начнете использовать классификаторы.

И если вычтобы задать аналогичный вопрос о Instance<Object>, тогда были бы дополнительные причины (использовать первый подход) - проверка разрешения во время развертывания, оптимизация не работает.

...