Egyszerű plugin kezelő - OOP gyakorláshoz
Üdv Weblaborosok!
Egy ideje rajtavagyok, hogy elsajátítsam az OOP ismereteket. Ebben kérnék egy kis segítséget. Gyakorlásképpen elhatároztam, hogy készítek egy egyszerű, pluginokkal bővíthető, amolyan "funkciókatbele" osztályt. Ebből az osztályból építkezhetnének a meghívott modulok. Készítettem egy rajzot, hogy jobban értsétek: itt
Elképzelés van, de nem tudom, hogyan kössem össze az osztályokat. Azt szeretném, hogy a betöltött pluginokat (php fájlokat, osztály-funkció van benne) fel tudjam használni a "funkciók" osztályba, és az aktív modul pedig a funkciókat és a plugin osztályokat is el tudja érni. Lehet kicsit kusza, de ott a rajz :)
A segítséget, tanácsokat előre is köszönöm!
Roland
■ Egy ideje rajtavagyok, hogy elsajátítsam az OOP ismereteket. Ebben kérnék egy kis segítséget. Gyakorlásképpen elhatároztam, hogy készítek egy egyszerű, pluginokkal bővíthető, amolyan "funkciókatbele" osztályt. Ebből az osztályból építkezhetnének a meghívott modulok. Készítettem egy rajzot, hogy jobban értsétek: itt
Elképzelés van, de nem tudom, hogyan kössem össze az osztályokat. Azt szeretném, hogy a betöltött pluginokat (php fájlokat, osztály-funkció van benne) fel tudjam használni a "funkciók" osztályba, és az aktív modul pedig a funkciókat és a plugin osztályokat is el tudja érni. Lehet kicsit kusza, de ott a rajz :)
A segítséget, tanácsokat előre is köszönöm!
Roland
Erre a feladatra event-eket
Egy példa: az aktuális modulodnak, ami legyen a hír listázó, kell lehetőséget adnod, hogy pluginnel kilehessen bővíteni. A hírlistázás folyamata:
- db adatok lekérdezése (getDbData),
- db adatok feldolgozása (egy tömb létrehozása, melyben benne van minden hír az adataival, processDbData),
- adatok megjelenítése (renderData)
Az egyes részeknél, a lefuttatása előtt és után is dobsz egy eventet, pl.: hirek.preGetDbData, hirek.postGetDbData stb. Az eventnek átadod az aktuális adatokat, hogy módosítani lehessen, pl hirek.preGetDbData, átadod az url-t, hirek.postGetDbData, átadot a db adatokat stb.
Ezzel a megoldással az eventekre feltudnak iratkozni a pluginjeid és a megadott kódot lefuttatni.
Eventek készítéséhez némi segédlet:
Ha magad akarod megcsinálni, egyszerűbb formában, akkor nézz utána az observer patter-nek,
ha külső megoldást akarsz felhsználni (csak hogy ne találd fel újra a spanyol viaszt) http://components.symfony-project.org/event-dispatcher/ ezt használhatod.
Ez nem egy egyszerű feladat, kitartást hozzá.
Ha már ennyire bele akarsz mélyedni az oop-ba, kezdj el egy oop frameworkel dolgozni. Symfony-t ajánlom :) 1.4 könnyebb, 2.0 nehezebb. Symfony-ban benne van az event kezelés is :)
Köszönöm, ezek nagyon hasznos
Egyébként lehet, hogy kicsit félreérthetően fogalmaztam, de én nem azt szeretném, hogy a pluginek belenyúlnak a modulokba, csupán annyit, hogy bővíteni lehessen a "funkciók" osztály fegyvertárát :) Írtam, hogy például egy plugin fájl betöltésével már lehetőség van bbcode formázásra. Szóval ilyen "apróságok".
aham, ebben az esetben a
Annyit azért hozzátennék, hogy így első hallásra nem egy szép megoldás. Ne akarj mindent egy osztályba tenni, jó ha külön vannak, ha csak azért használsz classokat, hogy egymástól független kódrészleteket gyüjts egybe, akkor public static function -ként vedd fel őket, így nem kell példányosítani az objektumokat. Amúgy az oop nem erről szól :)
Használj autoloader-t php autoloading így nem szükséges az include sorok használata.
ötlet: kezdetnek adatbázis kezeléshez kezd el használni a doctrine 1.2-t, sokat tanulhatsz belőle.
Egyelőre még nem tudom,
Akkor adott egy plugin, most valami egyszerű:
Nem értem, miért kellene
A példádnál maradva van a két classod, és te eszt szeretnéd:
- ha példányosítanod kell (fenti példában nincs erre szükség), viszont elég csak egy példány, használj singleton-t
- használj autoloadert
ha csak ennyit szeretnél, nem kell túlbonyolítani.
OOP
nem, ez tény, de ahogy nézem
Pont, hogy elszeretném
Elképzeles? Az van... Végiggondolva és felhasználva a leírtakat, lehet hogy jobb lenne ha kapásból a fő funkciók osztály töltené be a pluginokat, nem tudom.
amiket itt használni
Még mindig nem értem, ez így
Igazatok van, tökéletesen jó
azért jó betenni egy classba,
Helló! Én javaslom, hogy a
Én javaslom, hogy a tervezést kezd egy jobb módszerrel. Pl. rajzolj egy nagy téglalapot, ebbe rétegeket, a pluginoknak, a runtimenak, építsd bele a modulokat, jobb képet ad mint a nyilazott rajzod. De az UML diagram sem egy rossz megoldás, szabványos is.
Továbbá lehet bennem van a hiba, de a funkciók, pluginek, modulok, nekem nem áll össze. Ha baromságot írok majd kijavítanak, de szerintem a legalsó szintre kel egy újra hasznosítható elemeket tartalmazó osztály könyvtár - téglalap 0. szint - amiből mindenki táplálkozik. Ki dolgozol ez fölé - téglalap 1. szint - egy runtime vagy vezérlő egységet tök mindegy minek nevezem. Ez a vezérlő mondjuk lehet egy egyszerű MVC réteg, amiben van a modul betöltő, vagy plugin betöltő. az okos függvények vannak a 0. szinten. a modulok vannak egy konténerben ahonnan beszipkázod őket a runtime adott példányába. vagy valami ilyesmi.