ugrás a tartalomhoz

Symfony pro és kontra

kalamona · 2008. Okt. 24. (P), 02.05
Üdv!

Azon morfondírozok mostanában, hogy milyen alapokra építsek egy elég összetett webes alkalmazást. Több keretrendszer is felmerült, köztük a témacímadó nevezetesség is.
Symfonyval nincs tapsztalatom (néhány óra homokozást és olvasgatást leszámítva), Zend Frameworkben és Code Igniterben egy fokkal több. Mégis szimpatizálok a Symfonyval, mert egyrészt nagyon szeretném élesben is kipróbálni, másrészt pedig sok mindent nagyon átgondoltam és kényelmesen támogat (messziről nézve).

A kérdésem az lenne, hogy aki közületek használta már, milyen tapasztalatokat gyűjtött vele.
  • Mire alkalmas igazán? Mennyire univerzális? Mennyire rugalmas?
  • Ajánlott-e komoly látogatottságra aspiráló oldalt Symfonyra alapozni?
  • Skálázható lesz a későbbiekben (és milyen módon, vertikálisan/horizontálisan, vannak-e ezzel kapcsolatban konkrét tapasztalatotok)?
  • Milyen a tanulási görbéje? Mennyi idő alatt vonható be a munkába későbbiekben új fejlesztő, akinek nem volt előtte Symfonys tapasztalata?
  • Mik a gyengéi, milyen oldalt/feladatot nem érdemes rá alapozni?
  • minden ami eszetekbe jut. :) (pl profi, de nem szerettem, mert... )


Előreis köszi minden gondolatot!
 
1

Követelmény?

janoszen · 2008. Okt. 24. (P), 10.58
Mi a követelmény? Ha az, hogy egy szerveren gyorsan össze lehessen rakni az alkalmazást, akkor valamilyen Symfony jellegű keretrendszer lesz a barátod, mert gyorsan össze lehet kattogni vele valamit. Ha több tucat szerveren futó miliszekundumokra optimalizált weboldalt szeretnél, értelemszerűen nem ez a jó megoldás, hiszen akarva-akaratlan vannak benne olyan dolgok, amik Neked nem kellenek az adott szituációban és lassítanak vagy nem úgy vannak kioptimalizálva, ahogy Neked jó lenne.

Magáról a Symfonyról nem tudok nyilatkozni, sose jutottam el odáig, hogy összerakjak egy oldalt. A RoR-ral ellentétben beüzemelni sem sikerült 5 perc alatt, úgyhogy igazából hagytam a fenébe az egészet. Nyilván, ha több energiát feccöltem volna bele, akkor ment volna, de kicsit elvette a kedvemet az egész bonyolultsága.

Alapjában véve egy oldal, ami kis terhelésre készül, nagyon ritkán fog nagy terhelést kapni. Tehát egy cégnek gyártott weboldal, akármilyen nagy brand site, csak ritkán igényel egynél több szervert. (Hacsak nincsenek elcsettintett bugyuta elvárások monstre querykkel.) Ezzel nincs is probléma. A közösségi vagy hasonló oldalak meg eleve annyira egyedi igényekkel bírnak, hogy az előre megszabott keretrendszer valószínűleg inkább korlátoz mint segít, mivel kénytelen vagy mondjuk modelleket úgy implementálni, ahogy elő van írva, pedig sokkal egyszerűbb modellek is megtennék. (Ha végig gondolod: a legnagyobb és legjobb közösségi oldalak nagyon egyszerű querykkel megoldhatóak.)

Üzleti szemszögből: ha egy oldal eljut odáig, hogy MySQL, Memcache, stb skálázással már nem megoldható a terhelés akkor remélhetőleg a bevételek is kezdenek egy olyan szintet megütni, hogy az alkalmazás újragondolható. Amennyiben nem, el kell gondolkozni azon, hogy a projekt tud-e hosszú távon nyereséges lenni ha nincs anyagi forrás embereket megfizetni a refaktoráláshoz. Off: vicces, hogy ezt az átgondolást pont a (köz)gazdászok, cégvezetők szokták benézni és tovább eröltetni a dolgot.
2

Követelmény minden, de azon kívül semmi :)

kalamona · 2008. Okt. 24. (P), 15.36
Köszi a gyors kommentet! Ami a követelményeket illeti, tulajdonképpen semmi olyan nem lesz, ami egy átlagos webáruházzal ellátott honlapon (vagy ahhoz kötődően) is fel ne merülne, mégis sokrétű, mert azért az elképzelhető extrák közül a legtöbbet így kezdetnek már el is képzelték bele.

Ami fejlesztői szempontból kiemelendő:
  • Teljeskörű i18n, 110n mind a szövegeket, mind az adatbázist érintve
  • Kategóriák és cimkék alkalmazása minden tartalomhoz és termékekhez
  • Jó darabig ne kelljen újraírni, vagy radikálisan megváltoztatni a terhelés növekedtével
  • Modulárisan bővíthető legyen új szolgáltatásokkal, úgy hogy azok kölcsönhatásba léphessenek a rendszer bármely már meglévő komponensével. (Valamilyen eseménykezelés támogatás van a Symfonyban? Vagy valami hook-ok inkább?)
  • támogasson cache megoldásokat, lehetőleg minél több fronton (nem tudom pontosan a symfony ebben a tekintetben mit nyújt)

Symfony komoly referenciái közt a Yahoo nem is tudom melyik szolgálatatását szokták említeni, de azt gondolom az akár lehet egy erőtelesen átalakított Symfony is, nem látom mit demonstrál számomra azon kívül, hogy egy nagy cég merte alkalmazni. (Ami egyébként nem túl mérvadó, de ebbe a témába nem merülök inkább bele...még)

Az egyedi igényekkel kapcsolatban viszont szerintem egy ilyen fejlesztésnek igenis alkalmasnak kell lennie a majdnem minden webes szituáció esetén. Hiszen miben különbözik egy közösségi oldal egy fórumtól? Nem olyan sok dologban. Ha meg annyira általánosságra törekszik minden keretrendszer, nehogy már gondot okozzon nekik, ha éppen nem egy tipikus blogot, vagy hírportált akarok benne megvalósítani. Akkor aztán nem érte meg éveken át csiszolgatni... Ezekre elég lenne egy cms, abban aztán tényleg össze lehet kattintgatni.

Szerintem a tipikus kisvállalati oldalak, illetve egyszerű brandsiteok kialakításához a töredéke bonyolultságú keretrendszer is tökéletes volna és már az is roppant gyors fejlesztést tenne lehetővé. Egy Symfonynak ennek tükrében egyszerűen nem lenne értelme. Akkor már inkább egy library szemléletű dologban lenne érdemes gondolkozni. Azokkal meg manapság sok baj van. A Pear sajnos nagyon visszaesett aktivitásban. Nem mozogtam tűzközelben náluk, de nagyon lassan születnek új verziók a csomagokból, és nagyon lassan portolják a meglévőket PHP5-re. (Nem tudom mekkora szerepe van ebben a Zend Framework megjelenésének) A ZF pedig mostanában inkább a keretrendszerként való használhatóságra és a dojo integrációra gyúrt. Na de nem is kalandozok most el jobban. :)

A kérdés továbbra is az: Ugyan mire jó egy Symfony? Provokatívítva. Mennyire támogatja a dolgokat amikre utaltam? Mit nyújt azon kívül, hogy

  • routolja a requestemet egy osztály egy metódusához,
  • helpereket biztosít
  • validációt és formkezelést biztosít (ezt milyen szinten?)
  • lehet generálgatni dolgokat parancssorból, meg scaffoldingolni admin felületet

A model az külső komponens (Doctrine az esetemben), a levelezője Swift Mailer, más nem nagyon jut eszembe. Mit ad még? A célom tulajdonképpen a keretrendszerek mottója. Az általános dolgokkal minimálisan szeretnék foglalkozni. A konkrét alkalmazást szeretném felépíteni, nem akarok tőrődni a routolással, sablonkezeléssel, formokkal, validációval, események kezelésével, nyelvesítés útvesztőivel, szerszámos ládáról álmodok, amiben mindez (és még ami itt hirtelen nekifutásból nem jutot eszembe) benne van.
3

Értesz hozzá?

janoszen · 2008. Okt. 24. (P), 20.40
Ha nem értesz hozzá, akkor azt hozzá kell számolni, hogy a megtanulás nem kevés energia. Keretrendszert úgy érdemes használni, ha alakítasz hozzá egy munkafolyamatot. Egyébként ha magyar piacról beszélünk, akkor elég valószínű hogy soha nem fog kelleni skálázásban gondolkozni. Nem tudom, mit ad el, de kevés dolog tart számot annyira nagy érdeklődésre, hogy probléma legyen.
6

Nem véletlen indultunk a nyelvesítéstől

kalamona · 2008. Okt. 25. (Szo), 01.14
A megrendelő már a kezdetekről szeretné a kebelére ölelni az egész világot, de legalábbis egy szép szeletét. Ennek megfelelően nagy tolongásról is álmodik ő egy idő után. Most ezzel kapcsolatban folytatok nagy kutatómunkát, hogy mit lehet kezdeni az ilyen-olyan keretrendszerekkel ha eldurvulnak a dolgok.

Munkafolyamat jó dolog, de ez most egy egyedi és első ilyen építkezés, talán éppen most fognak megszületni a praktikus lépések.

Érteni fogok hozzá, ha úgy döntök, hogy Symfonyval oldom meg. Ez a terv. :)
9

Csókolom

janoszen · 2008. Okt. 26. (V), 09.31
Nadecsókolom, ehhez hardver és megfelelő sávszélesség is kell. Remélem a megrendelő rájött, hogy az alapesetben adott 1-2-3 MBit külföldi sávszélesség éppen csak néhány beeső látogató kiszolgálására lesz elég. Szép és nemes cél a nemzetközi oldal, de azt figyelemmel kell tartani, hogy ez neki sokba fog kerülni. Viszont ezzel érthetővé válik a skálázás kérdése is, mivel gondolom kicsiben szeretne indulni aztán majd nagyban folytatni. Minden esetre remélem, nem valami occsóhosztingot választott a lapjának. ;)
10

Sokba fog kerülni?

tolmi · 2008. Okt. 26. (V), 10.41
4

Én használom

fchris82 · 2008. Okt. 24. (P), 21.58
Van egy komoly érv a Symfony - vagy inkább a keretrendszerek - mellett: viszonylag könnyű találni új embert, akivel bővíteni lehet a fejlesztő csapatot, aki ráadásul sokkal gyorsabban átlátja és megérti a dolgokat, mint ha egy saját "rendszert" húznál fel, tulajdonképpen hasonló funkciókkal.
Néhány dolog nekem máshogy kellett, de azokat magam átírtam vagy megírtam hozzá a kiegészítéseket.

Sztem nem probléma, hogy néha belenyúlok átírni ezt-azt, hogy optimalizáljam az adott feladatra, kiiktassak felesleges dolgokat. Ettől még ad egy alapot, amire bátran lehet építeni, és bár "bekorlátoz", sok feladat megoldását leveszi a válladról. Vmit, vmiért. Ha nagyon számít a sebesség, akkor már felmerül az a kérdés is, hogy PHP-t akarsz-e használni.

A többi keretrendszert nem próbáltam, lehet, azok is jók neked.
5

Jaja

kalamona · 2008. Okt. 25. (Szo), 01.10
Szerintem sem mindegy, hogy egyedi rendszerrel kell-e barátkozni.

Egykaptafára épülő fejlesztésekhez használtad, vagy valamilyen személyre szabott feladatra? Mennyire volt nehéz megtanulnod/megtanulnotok?

Szerintem sok példa van a nagy terheltség melletti php használatra. Vagy így, vagy úgy meg lehet azt oldani. Nem hiszek a nyelvi elemeken múló optimalizációban sem. (Van aki szerint kerülni kell az absztrakt osztályok és interfészek használatát is, mert rontják a teljesítményt.)
8

Egyedi

fchris82 · 2008. Okt. 26. (V), 03.37
Egykaptafára épülő fejlesztésekhez használtad, vagy valamilyen személyre szabott feladatra?

Mindig személyre kellett szabni, de ezzel nem volt gond.

Mennyire volt nehéz megtanulnod/megtanulnotok?

Egy alap munkát abban csináltam meg, aztán jöttek a bonyolultabbak... 1 hónap?
Találj ki vmi egyszerűt és csináld meg, kísérletezz. Hozz létre mondjuk egy fórum oldalt, csak úgy. Lesz párszor, hogy elakadsz majd, de ez természetes.

Van symfony levlista, érdemes feliratkozni arra is. Vagy ha más mellett döntesz, annak a levlistájára.

Szerintem sok példa van a nagy terheltség melletti php használatra. Vagy így, vagy úgy meg lehet azt oldani. Nem hiszek a nyelvi elemeken múló optimalizációban sem.

Nézd, sztem ez így kicsit meredek. "Aki jól ért a kalapácshoz, mindenhol szöget lát." A csavart is be tudod verni a falba, mégis jobb, ha ahhoz csavarhúzót használsz. Csak azért, "mert meg lehet vele oldani", az még nem jelenti azt, hogy azzal érdemes megoldani. A programozás egyébként is egzakt "tudomány". Lehet mérni, bizonyítani az elképzelés működőképességét. Éppen ezért, a hitedet tedd félre és mérjél! Merthogy te mit hiszel, azt a valóság figyelmen kívül fogja hagyni ;) Még az is lehet, hogy jól hiszed, meg az is, hogy nem.
Szóval ne a hiteddel gyere, hanem összehasonlító tesztekkel ;)

Félre ne érts, te ismered a munkát, valszeg a PHP bőven elég a feladathoz, én a hozzáállást kritizáltam. Kicsit úgy érzem, hogy a kognitív disszonancia esete forog fent, mivel Te csak a PHP-hoz értesz, így ahelyett, hogy logikus döntést hoznál, inkább érvekkel alátámasztod a saját "döntésedet".
7

Ha rászánsz időt lehet a te barátod.

Sulik Szabolcs · 2008. Okt. 25. (Szo), 11.39
Ha még nem ismered a rendszert, akkor időt kell szánnod a tanulásra (legalább a könyv első 10-11 fejezetét olvasd végig + a forms book-ot).

Teljeskörű i18n, 110n mind a szövegeket, mind az adatbázist érintve

Megvan.

Modulárisan bővíthető legyen új szolgáltatásokkal...

Az alkalmazást te tervezed - fejleszted, a symfony csak a kereteket adja (ahogy a zf is), szóval ez leginkább rajtad múlik.

Valamilyen eseménykezelés támogatás

Itt nézz körül. Na meg itt.

támogasson cache megoldásokat

A jeleneg támogatott cache megoldások. Ezeket a rendszerben több helyen is használhatod (i18n szövegek, routing beállítások, view cache) Emellett te magad is írhatsz relatív egyszerűen sajátot.

Symfony komoly referenciái közt a Yahoo nem is tudom melyik szolgálatatását szokták említeni... (Ami egyébként nem túl mérvadó...

Answers, bookmark, delicious (valóban nem túl mérvadóak ;) ).

Az egyedi igényekkel kapcsolatban viszont szerintem ...

Ez kissé zavaros, nem tudom mit hiszel/gondolsz/tudsz a keretrendszerekről. Szvsz újra kéne gondolnod a dolgokat.

Alapvetően keretrendszerről van szó, tehát a fejlesztés kereteit határozza meg. Ezt ne korlátozó tényezőként fogd fel. Többé-kevésbé rád kényszerít dolgokat, amik először furcsák, később nem tudsz elég hálás lenni értük (egységesebb lesz az alkamazásod szerkezete). A formos részt nézd meg nagyon, akár symfony nélkül is használható a cucc. A legszimpatikusabb az eddig látott megoldások közül (HTML_QuickForm, Zend_Form).