Full OOP PHP kód, nem túlzás egy kicsit ?
Sziasztok!
PHP keretrendszert szeretnék választani. Régóta érlelődött már bennem ez a gondolat. Igazából konkrét feladatra, ahol fontos a sebesség, de úgy általában is szeretnék egy keretrendszert mélyebben megismerni, mert hiába, "divat" lett keretrendszerben programozni.
A Zend keretrendszer kódjába néztem bele, és néhány hozzá kapcsolódó tutorialba.
Őszintén, elképedtem :)
Egy egyszerű MySql lekérdezés is már több osztályból, függvényből áll. Amit el nem tudok képzelni, hogy miért jobb ennél:
Amin teljesen kibuktam, hogy már egy formot is egy tucat függvénnyel állítanak elő. Senki se mondja azt, hogy ez vetekedhet egy HTML formmal, és sebességével !
Mégis hogyan lehet egy ilyen keretrendszerrel gyors, dinamikus oldalakat előállítani, pláne ahol fontos a sebesség, mert pl. sokan csüngnek az oldalon ?
Azt aláírom, hogy nagyon jó az MVC megközelítés, és ehhez kapcsolódó osztályok (egyszerű adatbázis,user auth osztály), de hogy minden egyes folyamatra osztályt alkalmazni... ez egy kicsit sok nekem.
Oké, idővel megtudnám érteni, és használni is, és jó mások minőségi kódját használni, de ... így meglátásom szerint egy böszme nagy, nehéz rendszer lesz, ami köti az ebet akaróhoz.
Most rátaláltam a CodeIgniterre, ami egy kissé barátságosabbnak tűnik, de még nem volt időm bővebben belenézni a kódjába... csak tutorialba.
Szerintetek nem túlzás ráerőltetni a PHP-ra a full OOP megközelítést? Hiszen ez mégsem C# ami egy PC alapú, és a teljes erőforrás adott a kód végrehajtására!!!
Mit ajánlotok nekem, ami OOP MVC felépítés, de mégsem viszi túlzásba.
CodeIgniter szerintetek jó? Még ezt a Kohana-t is írják több helyen. Szerintetek?
Köszönöm a segítséget, és hogy végigolvastátok a hosszú eszmefuttatásomat...
■ PHP keretrendszert szeretnék választani. Régóta érlelődött már bennem ez a gondolat. Igazából konkrét feladatra, ahol fontos a sebesség, de úgy általában is szeretnék egy keretrendszert mélyebben megismerni, mert hiába, "divat" lett keretrendszerben programozni.
A Zend keretrendszer kódjába néztem bele, és néhány hozzá kapcsolódó tutorialba.
Őszintén, elképedtem :)
Egy egyszerű MySql lekérdezés is már több osztályból, függvényből áll. Amit el nem tudok képzelni, hogy miért jobb ennél:
$query = mysql_query("SELECT * FROM table WHERE id = '".(int)$id."'"); ?
Amin teljesen kibuktam, hogy már egy formot is egy tucat függvénnyel állítanak elő. Senki se mondja azt, hogy ez vetekedhet egy HTML formmal, és sebességével !
Mégis hogyan lehet egy ilyen keretrendszerrel gyors, dinamikus oldalakat előállítani, pláne ahol fontos a sebesség, mert pl. sokan csüngnek az oldalon ?
Azt aláírom, hogy nagyon jó az MVC megközelítés, és ehhez kapcsolódó osztályok (egyszerű adatbázis,user auth osztály), de hogy minden egyes folyamatra osztályt alkalmazni... ez egy kicsit sok nekem.
Oké, idővel megtudnám érteni, és használni is, és jó mások minőségi kódját használni, de ... így meglátásom szerint egy böszme nagy, nehéz rendszer lesz, ami köti az ebet akaróhoz.
Most rátaláltam a CodeIgniterre, ami egy kissé barátságosabbnak tűnik, de még nem volt időm bővebben belenézni a kódjába... csak tutorialba.
Szerintetek nem túlzás ráerőltetni a PHP-ra a full OOP megközelítést? Hiszen ez mégsem C# ami egy PC alapú, és a teljes erőforrás adott a kód végrehajtására!!!
Mit ajánlotok nekem, ami OOP MVC felépítés, de mégsem viszi túlzásba.
CodeIgniter szerintetek jó? Még ezt a Kohana-t is írják több helyen. Szerintetek?
Köszönöm a segítséget, és hogy végigolvastátok a hosszú eszmefuttatásomat...
Már többször volt erről szó,
Gyors, Karbantartható, Fejlesztési idő
+1
Keretrendszer használata pro és kontra
After all! What is this no-framework? - hozzászólásom
Php - ORM rendszerek - hozzászólásom
Azon jót nevettem, mikor egyesek azzal jönnek, hogy "de mi van, ha megszűnik a fejlesztés, és kiszolgáltatott leszek egy harmadik félnek?" :D :D :D Naponta álmatlan éjszakáim vannak, hogy leáll a ZF, Symfony, jQuery fejlesztése, sőt, a PHP is bármikor megszűnhet :D Na, akkor mi lesz?
A lényeg: keretrendszer használata -> idő. Az idő meg pénz. Sok esetben nagyon sok pénz. És jobb 1 hónap alatt kijönni vmi félkész vacakkal, mint tökéletesen fejleszteni és kijönni fél év múlva. Egyrészt, lehet, hogy nem működik az üzleti elképzelés, ha jól tudom, 10-ből csak 1 startup lesz sikeres, tehát 9 BEBUKIK, vagy messze nem hozza a várt eredményt. 6 hónap alatt inkább csinálok meg 6 munkát, ami "lassú", mint 1-et, ami gyors. Egyébként meg ha elkezd nőni a látogatottság, lehet optimalizálni, cache-elni, stb, stb, aztán pislogni, hogy még így is 2 hónap fejlesztéssel, jobb, rugalmasabb, és ugyanolyan gyors oldal készült, mint 6 hónap egyedi fejlesztéssel. A fenti az vmi elméleti huszárkodás, amit én mondok, meg 11 év tapasztalata. Persze mindenki azt csinál, amit akar :D
+1
Kohana vs. CodeIgniter
Ahol most dolgozok itt Kohana a kötelező. Nem egyszerű átállni, igaz hogy ez is a CI-ből lett. De ég és föld. Kohaha szar a route-olás, jó az ORM, meg néhány plusz osztály amit ad.
Nem hinném, hogy amit a példaként hozol fel, az ennél rövidebb ORM::factory("table")->where('id','=',$id)->find(); gyorsabb, vagy könnyebb használni.
Csinálj meg egy komplett projektet mindkettővel, és meglátod, miért kell a sok osztály.
Példa: 2 adatbázisod van, de mindkettőből egyformán tudsz dolgozni, mint interface.
A query() az query() mssql-ben, postgresql-ben és mysql-ben is.
Jön majd a CodeTrine (CodeIgniter és DocTrine hibrid) az lesz jó.
nem a túlzás a cél
Egyik keretrendszernek sem a túlzás a célja. A cél az, hogy a fejlesztőknek spóroljanak időt.
Személy szerint én pont Zend Framework-kel dolgoztam sokat, és épp az általad kifogásolt Zend_Form részt tartom belőle a legnagyobb jóságnak. Egy komolyabb webalkalmazás komplex űrlap kezelés nélkül ma már elképzelhetetlen. A Zend_Form-mal nem csak az űrlap és elemeinke megjelenítését tudod kezelni, hanem egy darab épített objektummal végzed felhasználótól kapott adatok szűrését ÉS ellenőrzését.
DB: mi van ha kitalálod, hogy MySQL-ről váltasz SQLite-ra esetleg PostgreSql-re? Meg kell keresned a kódodban az összes lekérdezést, módosítanod kell a mysql_query függvény hívást a választott adatbáziskezelőnek megfelelőre. De feltételezem írsz egy függvényt, amin átengeded az összes query-t. De akkor még mindig ott van az adatbázis kezelők különböző SQL dialektusainak problémája.
Az összes keretrendszerben fogsz találni valami adatbázis réteget, amik mind-mind teljes mértékig OOP megközelítéssel készülnek. Mindegyiknek egyik fő célja, hogy elfedje előled a háttérben használt adatbázis kezelő sajátosságait, ezzel is megkönnyíti neked, hogy rugalmasabb kódot írhass. Segítenek szabályos és minél biztonságosabb SQL utasítások összeállításában, ezzel védik az általad kezelt adatokat, és áttételesen neked spórolnak időt.
Ha egyszerűen költség oldalról nézzük a dolgot: ha egy saját (keret)rendszert írsz, akkor rengeteg dolgot neked kell megírni, ahelyett hogy "beleülnél a tutiba" és elkezdenéd használni azt, amit rengeteg ember fejleszt, még többen, nap mint nap tesztelnek. Ezeknek a megírása mind rengeteg idő. Az idő pedig, mint tudjuk, pénz.
Az hogy egy projektben használj-e keretrendszert, és melyiket, nagyban függ a projekt méretétől, a benne dolgozók számától. Ha a projekteden egyedül dolgozol, és úgy látod, hogy ez középtávon nem is fog változni, és nem érzed szükségét akkor ne használj keretrendszert. Ennyi.
Viszont ha elkezdesz
Legalább is nekem ez a tapasztalatom.
Viszont ha nem akarsz tanulni, vagy nincs időd, nekem a CodeIgniter volt a legmegfelelőbb.
Viszont ha elkezdesz
Persze, én is minden nyelvet
Egyébként nem muszáj használni a keretrendszeres osztályokat. Nekem is van olyan munkám, ahol CodeIgniterben nem a keretrendszer osztályait használtam, hanem mysqli-t. Ha tudom, hogy a MySQL nem fog változni pl SQLite-ra vagy akármire, szerintem nyugodtan lehet használni akár még sajátot is.
pont ez a kérdésem
Pont ez a kérdés merült fel bennem a napokban, és keresgéltem utána neten, de igazi választ nem találtam. Saját projektemmel kapcsolatban: elég nehéz egy félig még tervezés alatt álló projekt méretét pontosan megbecsülni, de minek után a tervezett funkciók jó része már a fejemben készen van, kezdeti domain modellem is elkészült. Ez alapján _minimum_ 25 saját osztállyal számolok abban az esetben, ha a "keretrendszert" magam készítem el. És ebben még nem feltétlenül vannak benne például az adatbázis kezelő osztályok, mivel azokat is úgy kell elkészítenem, hogy több DB típust is támogassanak. Tehát egy adatbázisréteget kell létrehoznom. Ez még tán menne is, de milyen áron?
Visszatérve, a weboldal hasonló lenne az egyetemeken gyakran használt moodle rendszerhez. Persze nem akarom újra feltalálni a dolgot, valójában csak az oldal célja egyezik meg. Iskolák, kurzusok, projektek, naptárbejegyzések, fórumok, feltöltések, tesztek. Nagyjából ezeket a funkciókat kell ellátnia. Jól érzem, hogy egy ilyen volumenű projekthez már érdemes keretrendszert használni? Először azért gondoltam a saját OOP megvalósításban, mert szakdolgozatnak készül, így nem tudom, hogy fogadja majd a bizottság és a bírák, hogy egy "kész" rendszert használtam. Magyarázhatom, hogy annak megismerése felért egy saját rendszer írásával, de tudjuk milyenek a tanárok a területen, amihez nem értenek.
Tehát a kérdés, ilyen volumenű projekthez ajánljátok a keretrendszereket? És melyiket? (figyelembe véve, hogy ha később az utam abba az irányba sodor, hogy PHP-ben akarok fejleszteni, akkor ebből a szempontból ne olyat tanuljak, amit aztán nem tudok hasznosítani a cégeknél.)
PHP keretrendszert szeretnék
zend.
yii
Őszintén szólva nem rajongok
Az a ZF olyan alapszintű bugokat tartalmaz, hogy egy query végrehajtása után nem lehet debug célzattal kinyerni, hogy mi is volt az a tényleges query ami az adatbázison lefutott!!! Ha pedig elkezdesz tukálni a ZF core-ban, hogy kijavíts egy hibát, hamar rájössz, hogy kb. 3 nap munka lesz. Nota bene: a keretrendszereket is csak programozók írják, egyik sem a bölcsek köve, viszont ha bug van bennük, nagyot szívsz vele.
Ennél is komolyabb probléma a hatékonyság. Egyetlen query végrehajtásához is inicializál vagy egy tucat osztályt, amelyek abstract osztályoktól örökölnek, amik maguk is abstract osztályok kiterjesztései, interface-ekkel és egyedi exception handlerekkel. Egy komplett oldal kiszolgálása során include-ol vagy 1000 file-t. Nagy forgalmú rendszereket ez elég gyorsan taccsra tesz.
nem értem, hogy a "nem
+1
Nekem eddig egyébként pozitív élményeim vannak zenddel kapcsolatban. (Bár csak nem rég kezdtem bele a használatába.)
Az sql-ek loggolását meg gondolom meg lehet oldani dependency injectionnel és az aktuális adatbázis kezelő osztály kiterjesztésével.
Ezt elég nehezen hiszem el, mivel a keretrendszer kb 2800 fájlból áll, aminek nagy része különböző extrákhoz kapcsolódik, mint pl pdf generálás, stb...
Ezt elég nehezen hiszem
Költői túlzás, mint fogalom, mond valamit? ;-)
Belelapozva a propel és a kohana kódjába, valahogy égnek állt a hajam maradéka, hogy mennyi mindent kell betölteni ahhoz, hogy megjelenjen egy oldal...
Költői túlzás, mint fogalom,
Hát nem tűnt versnek, amit írt...
Nem néztem meg túl sok keretrendszer forrását, az alapján választottam, amit neten olvasgattam ezekről a rendszerekről. Zend a felépítésében körülbelül olyan, mint ahogyan én is megírnék egy ilyen rendszert. Ezért tetszik. A másik, ami miatt bejön az, hogy lehet IDE-vel használni.
Szerintem nem ezt írta
Ha ugyanez saját fejlesztés, akkor esélyes, hogy lesz ember, aki javítja ezeket a hibákat.
A hatékonyság kapcsán meg nagyjából egyetértek vele, bár már többször a fejemhez lett vágva, hogy túl sokat aggódok a performancia miatt... :-)
Ez a keretrendszer és a
Egyébként szerintem vannak megoldások arra, hogy a beszúrt php fájlokat a memóriában tartsa a rendszer. Ez már szimplán azzal megoldható, hogy a megfelelő típusú winchestert teszi bele a szerverbe az ember. (Nem vagyok üzemeltetési szakértő.)
Az operációs rendszerek
Ahm, én hibrid ssd-re
Hasonlóan látom én is a
Emellett fontos dolog a tanulás (amit más is említett): ha egyből valamilyen keretrendszerrel kezdesz, azt fogod tudni használni, de nem tudod, hogy mi miért van úgy, és ha már egy kicsikét is bonyolultabb problémát kell megoldani, széttárod a kezed, hogy erre a keretrendszer nem alkalmas.
Vagy találsz egy hibát,
Ideiglenesen te is megfoltozhatod, mondjuk kiterjesztve az adott osztályt. És ha már ott tartasz, el is küldheted a fejlesztőknek a foltot.
Ez igaz, de nem ez a lényeg.
témaindító
Köszönöm a sok választ.
Ne haragudjatok, ha már volt ilyen téma. Szoktam olvasni a topikokat, de nem annyira emlékeztem ilyenre, az a másik téma elkerülte a figyelmemet.
"Saját rendszer" - Még nem érzem magam annyira jónak, hogy biztonságosan megírjak egy ilyet. De ha megismerek egy keretrendszert mélyebben, utána szóba jöhet.
"Ne azért kezdj el keretrendszert keresni mert divatnak látod!"
Egy másik fórumon olvastam, hogy egy valamire való webes alkalmazás keretrendszerben készül, egy sima, nem keretrendszeres kódot eladni egyenesen pofátlanság, büntetni kéne érte a programozót.
Igen, mindenképpen hasznos a debug, kivételkezelés is a keretrendszerekben, hogy nem fatal-error, hanem egy részletes hibaleírás (pl. kohana).
Valószínűleg a CodeIgniter és a Kohana közül választok.
Mégsem annyira objektum tenger... könnyebben emészthető, és hát mégis a két leggyorsabb, legrugalmasabb keretrendszerről beszélünk.
Egy másik fórumon olvastam,
Amellett, hogy ebben a formában nagyon nem tudok egyetérteni vele, volna egy fogadásom, hogy p*.hu volt a fórum... :-))
Persze: egymagad fejlesztesz és eladod a rendszert, rendesen megnehezíted annak a dolgát, aki utánad bele akar nyúlni esetleg. Ha nagyon rosszindulatú akarok lenni, akkor azt mondom, hogy többek közt ezért is érdemes saját keretet használni. Kisebb az esélye, hogy legközelebb pusztán azért adják másnak a módosítási munkát, mert olcsóbban vállalja, mint te. ;-)
Idővel saját keretrendszer
Egyébként, ez most nem a p*.hu :) Hanem a s*.forum.hu, egy "php framework" topikban volt egy nagyon hosszú eszmefuttatás a keretrendszerekről. Nem linkelem, nem lenne korrekt dolog.
"Egyébként, ez most nem a p*.hu :) Hanem a s*.forum.hu, egy "ph"
az a tag ossze-vissza irkalt. szerinte a legjobb framework a symfony 2, de meg nem probalta ki :). azert ugy velemenyt alkotni valamirol hogy ki se probalja, sokat elarul szerintem.
Amin teljesen kibuktam, hogy
Nem mondja senki :)
Képzelj el egy összetettebb üzleti alkalmazást, amelyben több tucat (vagy több száz) különböző űrlapot kell kezelned. Az egyes űrlapok konkrét felépítése változzon attól függően, hogy az adott felhasználónak milyen jogosultságai vannak. És képzeld el, hogy amikor elkészítetted mindet HTML-ben, akkor jön az UX-guru, és szól, hogy meg kell változtatni az űrlapok elrendezését. Amihez bele kell nyúlni a HTML kódba.
Szóval van létjogosultsága a Form objektumoknak. Egy egyszerű bejelentkező űrlaphoz speciel nem biztos hogy használnám.
A Zend_Db-t akkor érdemes használni, ha:
- Adatbázis-absztrakcióra van szükséged. Például szeretnél egy újrahasznosítható akalmazásmodult vagy komplett alkalmazást (fórummotor, blogmotor, CMS ...) írni, ami többféle backenddel is képes együttműködni.
- Futási időben dinamikusan összerakott lekérdezéseket akarsz futtatni.
- Szükséged van a Zend_Db_Table által nyújtott funkciókra (nem részletezem, benne van a manualban).
Én elképzeltem...
Én elképzeltem, de őszintén szólva ilyen célra már nem használnék PHP-t. Java, .net, ilyesmi...
Persze ez csak az én véleményem.
Én elképzeltem, de őszintén
Jogos. Ha rajtam múlik, én sem. És a frontend is inkább Flex (ExtJS, stb.) lenne mint sima HTML. De ettől függetlenül készülnek ilyen alkalmazások PHP/ZF platformon.
Az ExtJS-t komolyabb munkához
Köszönöm a tippet! Résen
Új szál
Itt indítottam egy új szálat: http://weblabor.hu/forumok/temak/109418 Kifejtenéd a véleményedet?
Mi vagyunk hülyék
Én mindig is szkeptikus
Nehezen győznek meg róla,
Azért nekem van egy olyan
Természetesen nem
Az I/O mindenhol I/O. A
Érdekes. Ha már „nem annyira
De még egy apróságra kíváncsi volnék: vajon melyik mennyi memóriát zabál munka közben. Van valakinek ötlete, hogy ezt Linux alatt mivel lehetne lemérni?
(Megjegyzés: a fenti mérési eredmény ellenére megmaradok Java-kerülőnek.)
Bonyolult üzleti logikát
Nem állítom, hogy lehetetlen (én legalábbis nap mint nap próbálkozom vele), csak azt, hogy ha van választási lehetőség, akkor érdemes lehet mérlegelni.
Egyébként a Coldfusion az
JSP
mysql_query, form builder
Amin teljesen kibuktam, hogy már egy formot is egy tucat függvénnyel állítanak elő. Senki se mondja azt, hogy ez vetekedhet egy HTML formmal, és sebességével !
Ne érdekeljen ennyire ez a sebesség téma. Egyrészt ha utána nézel, akkor rájössz, hogy egy jó ORM még gyorsabb is mint a sima mysql_query(tranzakciók miatt...ha magadtól is így írod a kódod, akkor én kérek elnézést). Másrészt nem fog egyik megrendelőd sem ezen szőrözni, akkora különbség nincs.
A Form builder meg a szükséges rossz. Ahogy már előttem is sokan írták az idő pénz, és rengeteg időt spórolsz vele.
Szerintem a Kohana jó választás kezdőként, a CodeIgniter nem az én ízlésem. Ha meg bátor vagy akkor Zend(bár lehet, hogy kohanával kezdenék, és mikor kijön a Zend2 akkor váltanék) vagy Symfony 2.
egy jó ORM még gyorsabb is
Ezt részleteznéd? Hol függ össze a sebesség és a tranzakciók?
Milyen sebességre gondolsz? (Ha mySQL-ről beszélünk, akkor myIsam motor mellett milyen tranzakciókra?)
Egyébként eddigi olvasmányaim alapján arra a következtetésre jutottam, hogy ha objektum orientált környezetben dolgozol, akkor két választásod van:
- írsz saját ORM-t (max. nem hívod annak, de funkcionalitás tekintetében mégis az lesz)
- használsz egy már meglévőt.
Én ma már nem ajánlanám
Doctrine
http://www.slideshare.net/jwage/doctrine-2-not-the-same-old-php-orm
47-54 ig van az ide vágó rész.
Attól kezdve, hogy a "mezei"
Nem beszélve arról, vajon hányszor futtatták le ezt a tesztet? Mert ha egyszer, akkor ilyen időeltérés akármiből is következhet...
Közben olvasom tovább: ja hogy kötegelt feldolgozást csinál? Gyakorlott programozó nem követi el azt a hibát, hogy tömeges adatbevitelnél minden insertet külön tranzakcióba pakol...
Itt egyébként nem maga a tranzakció gyorsít, hanem az, hogy a hagyományos módszerrel végrehajtott SQL mellett (elvileg) lefut egy automatikus tranzakció indítás és egy commit a végén. E két műveletnek elég komoly erőforrás igénye lehet.
update: azért a linkelt blogból picit több kiderül.
http://www.doctrine-project.org/blog/transactions-and-performance
így van. De jellemzően aki
Már úgy érted, a tömeges
Hétvégenként szoktam
Fú hát én nemrég láttam egy
Nem egyértelmű első látásra,
Egyébként pedig az INSERT akkor a leggyorsabb, ha ilyen valahogy formában adod meg, egy darab lekérdezésben:
INSERT INTO ... VALUES (a, b, c), (a1, b1, c1);
Már csak azért sem egyértelmű a dolog, mert a fejlesztői szerveren általában nincs olyan terhelés, mint az élesen. Emellett az adatbázis is szinte üres, így minden művelet szinte teljes sebességgel fut le, és a sebességbeli problémák nem igazán jönnek elő.
Őszintén szólva nem értem,
Illetve, ha az autodidakta módszerekkel tanuló programozókról beszélsz, akkor OK, elfogadom.
De ilyesmit szinte alapfokon kell(ene) tanítani programozói szakon. Szerintem...
(mondom ezt úgy, hogy én középiskolában tanultam programozni, egy szovjet R20-ason, fogalmam sincs, a felsőoktatásban, programozás címszóval mit tanítanak)
Azért írtam, mert lehet, hogy
Pont emiatt kezdeményeztem korábban, hogy a Weblaboron legyen valami tutorialgyűjtemény, ahol az ilyen dolgok példákkal illusztrálva le vannak írva.
jellemzően aki nem dolgozik
Én ezen akadtam el, ez nem a kezdőkről szól, hanem általában a programozókról, akik nem használnak keretrendszert. Sajnos láttam példát ilyesmire, de nem gondolnám, hogy ez általános lenne - vagy ha mégis, akkor nagyon felhígult ez a szakma is.
Az a tutorial gyűjtemény nekem is jól jönne néha. Egyre nehezebben találok megfelelő doksikat, oktató anyagokat :-(
Egyébként azért küzdök már fél éve a PHP hülyeségeivel, hogy összerakjak egy blogot, amin dokumentálom a programozással kapcsolatban megtanultakat. Ha ez kész, többé rá sem akarok nézni a PHP-re. Ehhez kell még néhány év. :-)
Valamilyen szinten szerintem