Chciałbym zmienić twoje pytanie i powiedzieć: kiedy oparte na zdarzeniu nie jest właściwym rozwiązaniem dla aplikacji obiektowej? Myślę, że większość aplikacji OO może przynieść korzyści, jeśli są zaprojektowane jako producenci wydarzeń i konsumenci.
W końcu „wywołanie metody” jest w rzeczywistości wiadomością docierającą do obiektu, a obiekt jest odpowiedzialny za podjęcie decyzji, czy zrobi coś z komunikatem i wykonanie operacji. Nie jest to bardzo jasne w silnie typowanych językach, takich jak Java, ale staje się bardziej oczywiste w dynamicznych językach, takich jak Ruby.
Innym interesującym punktem projektowania aplikacji opartej na zdarzeniach jest to, że zwykle wewnętrzne komponenty muszą być odpowiednio izolowane i spójne, w przeciwnym razie kod bardzo szybko stanie się bałaganem. Jako przykład bardzo podoba mi się koncepcja architektury heksagonalnej zastosowana przez Alistaira Cockburna, ponieważ zwykle ten wzór tworzy lepszą enkapsulację i wymusza (moim zdaniem) bardziej spójne komponenty.
Myślę (ale prawdopodobnie się mylę), że jest to również związane z koncepcją Domain Driven Design zdarzeń domenowych , w której klasy domen emitują zdarzenia przechwytywane przez inne obiekty, a te obiekty emitują jeszcze inne zdarzenia (widać, gdzie to idzie: D). W tym wzorcu podoba mi się to, że interfejsy powinny modelować role, a nie implementacje.
Przepraszam, jeśli nie mam większego sensu, eksperymentowałem z tymi wzorcami w ciągu ostatnich kilku miesięcy z niesamowitymi wynikami, ale wciąż staram się zrozumieć pojęcia i ich zasięg.