Apex vs. Symfony

V posledních dnech jsem pracoval na projektu Zoot, který se psal v prostředí PHP/MySQL s využitím MVC frameworku Symfony. Do těchto technologií jsem byl dotlačen klientem a spoludodavatelem, takže nebyla možnost využít prostředí APEXu, které by se z povahy projektu pro mě hodilo více.

Co je Zoot se dozvíte v nejbližších dnech a není to to, o čem bych chtěl psát. Chtěl bych se rozepsat hlavně o tom, co se mně na Symfony líbilo, a co naopak nelíbilo a udělat malé porovnání s APEXem.

Začnu tím, co se mi líbilo. Bylo to hlavně rozhraní z příkazového řádku, pomocí kterého šlo generovat administrační modul, zjišťovat rozdíly v databázi a mnoho dalších již napsaných pluginů. Toto rozhraní jde jednoduše rozšířit o vlastní fíčurky, které jsou specifické pro tvořený projekt. Dále se mi (po krátkem čase a seznámení se strukturou) líbilo rozdělení objektů do knihoven dle názvů, které po krátké době celkem pomohlo při snadné orientaci v kódu.

Co se mi spíše nelíbilo je nutnost využívání objektů Propel pro práci s databází. V některých případech to sice pomáhalo udržet přehled v kódu (hlavně při tvorbě UPDATE dotazů), jeho veliké omezení (nebo možná mojí neznalost) bych viděl při tvorbě dotazů pro výběr položek z databáze. Pomocí Propelu lze sice jednoduše vytvořit jednoduchý dotaz nad jednu nebo více tabulek, problémy nastávají, když je potřebné vytvořit dotaz, který joinuje jednu tabulku do sebe vícekrát. Pro zjednodušení psaní takových dotazů jsem nakonec zvolil metodu přímé tvorby SQL dotazů a jejich vykonání pomocí mysql objektů z php.

Další věcí, která mě rozčilovala, byla rotrříštěnost některých funkcí mezi konfigurační soubory ve formátu YAML a php objekty. Často se mi stávalo, že jsem něco dlouho hledal, proč to v jednom modulu funguje a ve druhém nefunguje. Příčinou byl někdy rozdíl v konfiguračním souboru .yml, někdy se vygenerované soubory neshodovaly s tím, co jsem po zkušenostech s generovaním od nich očekával.

Velkým problémem, se kterým jsme bojovali několik dní, byl výkon aplikace, který byl již v testovacím prostředí nevyhovující (odezvy i jednoduchých stránek byly více než 5 sekund při zátěži 2-3 testerů a umělého generování 16 konkurenčních uživatelů – projekt Zoot má ovšem mnohem vyšší ambice na počet uživatelů…). Problém byl ve špatném přístupu Symfony ke cacheování některých částí projektu. Po odstranění tohoto problému se odezvy zmenšily na polovinu a i tak to bylo přes dvě sekundy. Jako další postup jsme zvolili zlepšení výkonu serveru pro práci s velkým množstvím malých souborů. To se bude dít ale v nejbližších dnech a já se k tomu už pravděpodobně nedostanu, ale i tak budu sledovat, jaký bude koncový výkon Zootu při spuštění beta verze.

Nakonec bych se chtěl zamyslet nad tím, co se mi líbí na APEXu a v čem by mohl přidat v porovnání s tím, o co se snaží Symfony rozšířit (a možná i usnadnit) při práci s PHP nad databázemi.

Jako první bych zmínil bindování proměnných při jejich předávaní pomocí URL. APEX to má vyřešené elegantně pojmenováním proměnné pomocí její bindované interpretace (:PROMENNA). V APEXu mi ale chybí automatické generování validátorů proměnných před jejich uložením do DB (apex přidává validátory pouze pro not null hodnoty automaticky, ostatní je potřebné vždy dokola doplnňovat).

Další výhodu v APEXu vidím v předdefinovaných templates, pomocí kterých je možné vytvořit aplikaci, která je použitelná pro vývoj s již nějakým designem a až do nějakých naprogramovaných částí je možné vpustit HTML kodéra, který aplikacím upraví šablonu dle již naprogramovaných zásad.

Co vidím jako nevýhodu APEXu je povětšinou bordel při psaní kódu, který se sice snažím minimalizovat využitím prostředků databáze (balíčky, pohledy, procedury, funkce, oddělené schématy pro data a pro logiku a pod.) ale i tak se mi častokrát stane, že mám nějakou část logiky ukrytou přímo v APEXu, kde se to potom těžko hledá. Nemluvě už o možnostech (resp. nemožnostech) využití systémů pro správu a verzování zdrojových kódů jako SVN nebo CVS.

Kamil Schvarcz

jednatel, zakladatel společnosti, senior programátor, školitel

Komentáře

avatar
  Odběr  
Upozornit na