Autor Zpráva
happy
Profil
Ahoj
na hodně místech čtu že k tvorbě plugin systému mám použít navrhového vzoru observer. přečetl jsem o něm několik článků a stále nechápu jak bych tohle mohl v rámci plugin systému použít.

jde mi hlavně o praktickou ukázku. nebo spíš o to jak to bude (může) prakticky fungovat.
Johnik
Profil
Podívej se na PureMVC framework v modifikaci pro php.
happy
Profil
Johnik:
díky ale prolízat framework a hledat vněm něco co vlastne ani nevim co přesne ma být...
Johnik
Profil
Je to tam pekne videt. Neni to prolezani celeho frameworku, staci si najit Observer.php.
happy
Profil
Johnik:
No kouknul jsem na to a chytřejší nejsem. at se na to dívám jak chci, nechápu, jak mi tohle může nějak pomoct v systému pluginů?
Johnik
Profil
Tak jinak.

Aplikace = facade
registerObserver(IObserver observer) - zaregistruje pozorovatele
sendNotification(name, body, type) - posle zpravu vsem pozorovatelum, metoda by si mela projit vsechny zaregistrovane observery a zavola na nich metodu notificationHandler(name, body, type)

Plugin = observer
notificationHandler(name, body, type) - obdrzi notifikaci, mela by obsahovat switch na rozpoznani name a podle nich zavolat prislusnou metodu
sendNotification(name, body, type) - posle zpravu zpet na fasadu (pozorovatel si musi drzet referenci na fasadu!) - tady bacha na zacykleni notifikaci

Observer i fasada mohou odesilat notifikace, na ktere reaguji ale uz pouze observeri nebo i fasada, zalezi co chces aby to delalo.
happy
Profil
Johnik:
pokud tomu dobře rozumím, tak musím mít zaregistrované všechny pozorovatele před posláním první notifikace? tzn každý plugin by měl mít někde seznam pozorovatelů, který načtu na začátku scriptu?

pokud ano tak je to v podstatě jen o tom udělat si seznam pozorovatelů (dulezite je zde - co pozoruje, co spustit) a na určitem míste aplikace jim poslat info s názvem toho místa - a pokud je to to misto co pozoruji tak se pusti to co ma pozorovatel nastavene.
Majkl578
Profil
Johnik:
mela by obsahovat switch na rozpoznani name a podle nich zavolat prislusnou metodu
Switch není moc elegantní řešení když jde o pluginy (tedy při vývoji neznámé pluginy).
Spíš bych volil rozpoznávání podle registru observerů (asociativně název => objekt).

happy:
musím mít zaregistrované všechny pozorovatele před posláním první notifikace?
Logická úvaha říká, že ano. Nelze posílat notifikaci objektu, který fasáda nezná.
happy
Profil
no zůstavají mi tu dvě nevyřešené věci. dejme tomu, že budu mít aplikaci na mvc systému (klidně nějakém frameworku).

1, jak udělat aby mohl mí plugin nějakou vlastní stránku (s vlastní url). - protože v případě , že odkáži na url (která dejme tomu projde routerem) a bude hledat neexistující controller nebo neexistující action s navíc neexistující sablonou. - jedině snad že by nový plugin měl controller co by klasicky dědil baseController (což mi teď když nad tím přemýšlím nepříjde špatné).

2, pokud bude plugin viceméně samostatný jak jej v šabloně vykreslit? udělat si v šabloně taky notifikace?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0