Não. Eles são realmente úteis para implementar observadores e garantir que as classes sejam fechadas para modificação.
Digamos que tenhamos um método que registre novos usuários.
public void Register(user) {
db.Save(user);
}
Então alguém decide que um email deve ser enviado. Nós poderíamos fazer isso:
public void Register(user) {
db.Save(user);
emailClient.Send(new RegistrationEmail(user));
}
Mas acabamos de modificar uma classe que deveria estar fechada para modificação. Provavelmente bom para este pseudo-código simples, mas provavelmente o caminho para a loucura no código de produção. Quanto tempo até esse método é 30 linhas de código que mal estão relacionadas com o propósito original de criar um novo usuário ??
É muito melhor deixar a classe executar sua funcionalidade principal e criar um evento informando quem está ouvindo que um usuário foi registrado e pode executar qualquer ação que precise executar (como enviar um email).
public void Register(user) {
db.Save(user);
RaiseUserRegisteredEvent(user);
}
Isso mantém nosso código limpo e flexível. Uma das partes frequentemente negligenciadas da OOP é que as classes enviam mensagens umas para as outras. Eventos são essas mensagens.