... místo toho, abych volal nějaké API typu Notificator::getInstance()->showNotification(new Notification("NAZDAR")), tak pošlu skrz jasně definovaný kanál nějakou událost např. NotificationReques...
Prva vec, nad ktoru sa treba vzdy zamysliet je, ci sa to neda nahradit niecim ako notify("NAZDAR"). Viem, ze islo o priklad a davam to tiez ako priklad. Kod treba pisat co najjednoduchsie a nie co najzlozitejsie. Ked nepotrebujem v celej aplikacii IoC, tak nebudem robit v celej aplikacii IoC.
Také si to myslím a z daného příkladu bych to udělal asi takto:
notificator = new Notification(Notificator::getInstance());
// ...
notificator->show("NAZDAR");
DI je na prvním řádku, kde je uvedeno, kam bude objekt notificator posílat zprávy. Takových objektů je možné vyrobit víc, další může být např. objekt errorNotificator, který bude zprávy posílat jinam než ten první. Se dvěma notifikátory už se dá vyřádit docela dobře a dokonce i metoda show() může být mnohonásobně přetížena, aby se dalo notifikovat prakticky cokoli.
Ale to je jedno, klidně to může být třeba jenom notify("Nazdar"). To co jsem uváděl je příklad nějaké klasické implementace bez toho mého sporného IoC, o kterém by se dalo polemizovat, jestli to teda je IoC nebo ne. Ta pointa není v tom, jestli si někdo udělá nějakou helper metodu notify, aby všude nemusel psát těch xy znaků. Ta pointa je v tom, že se používá nějaké třída Notificator, která má nějakou implementaci, třeba zobrazovaní někam do rohu okna apod..
Ale já nechci použávat nějakou konkrétní implementaci. Ja chci zobrazit zprávu, to je všechno. Jak se zobrazí, kde, jak velká apod., to je jedno. Takže já místo abych používal nějakou konkrétní implementaci Notificator, tak pošlu zprávu ShowNotificationRequest a nechám nějaký plugin nebo jakoukoliv jinou část systému, aby se postarala o zpracování této žádosti.
EventBroker::sendEvent(new ShowNotificationRequest(new Notification("Nazdar")))