Poslední dobou všude vidíme objektové programování, frameworky, knihovny atd. Postupně také podléhám a vzdělávám se v objektovém PHP. Nicméně ono není všechno tak pěkně růžové jak to vypadá…
Složitější kód a nárůst režie
Na co se obvykle zapomíná je výrazně vyšší složitost systému a tím pádem i mnohonásobně vyšší režie. Názorně pouze zavedení MVC řešení pro můj projekt www.rockhound.cz by zvýšilo spotřebu paměti asi 5x a minimálně zdvojnásobilo vytížení databáze. A to vše po desítkách hodin převádění systému na MVC. Jednoduché weby na WordPressu zatěžují server nesrovnatelně více než některé mé weby, které jsou vytvořeny procedurálním PHP. Ostatně se nejedná o nějaké zpátečnictví, ale v některých případech prostě objektové PHP ještě ani neexistovalo a poté už se mi nechtělo celý systém překopávat.
Výhody OOP
Mezi jednoznačné výhody OOP patří zapouzdřitelnost, takže programátor potřebuje pouze znát rozhraní tříd (knihoven) a dále je nemusí řešit. U složitějších systémů s více programátory je toto obrovskou úsporou času, protože není třeba neustále řešit komunikaci jednotlivých částí programu a s tím spojené chyby. Je také možno využívat knihovny třetích stran, aniž by bylo třeba vše detailně studovat (někdy to ale není na škodu!).
Druhou obrovskou výhodou je modulárnost, pokud už systém běžní na dobře navrženém objektovém modelu, není problém přidávat další funkce bez překopávání hotových částí. Tyto výhody plynou zejména ze zapouzdření, ale nevhodný framewrok nebo návrh modelu mohou naopak celou věc nesmírně zkomplikovat.
Hledání chyb je snadnější, ovšem opět pouze za předpokladu vhodné struktury a správného užití výjimek. Pokud to není splněno, je naopak hledání chyb v několikanásobně vnořených objektech doslova peklem.
Výhody procedurálních aplikací
Pokud umíte vhodně používat funkce a příkazy include a require v PHP, můžete získat velkou část modulárnosti objektů i bez nich. Opakované části kódu lze vyhodit do vkládaných souborů (tím se uspoří kód i údržba). Logika aplikací je jednodušší, protože program běží přímo a neskáče z objektu do objektu. A buďme upřimní, většina primitivnějších aplikací objekty ani frameworky nepotřebuje. Takový pětistránkový minisite na WordPressu je názornou ukázkou kanónu na vrabce…
Tím se dostáváme k druhé výhodě procedurálního způsobu. MVC model v podstatě potřebuje nejméně 3 proměnné v každé části frameworku, zatímco procedurální model jen jednu. Odpadají obslužné a komunikační funkce objektů i objekty samotné, úspora paměti je opravdu velká. Jednodušší aplikace je proto vhodné správně rozdělit do souborů a funkcí, na výkonu to je hodně poznat!
Budu používat objekty?
Pokud se bavíme o frameworku či rozšířeních PHP, pak rozhodně nebudu. Přizpůsobit framework mým potřebám by bylo hodně složité, možná více jak vyvinout vlastní objektový model na míru. Nakonec vždy lze použít pouze určité třídy či vykuchat zajímavé funkce (netřeba vynalézat kolo…), ale ohýbat celý systém na své potřeby je často velice obtížné.
U velkých webů jako www.rockhound.cz na objekty jistě dojde, protože systém začíná být velice složitý a rapidně rostou problémy s komunikací jednotlivých částí. Z toho plyne samozřejmě řada těžko nalezitelných chyb. Také potřebuji vyvinout nějaké API pro externí služby a to už asi jinak nepůjde. Naopak pro menší weby, které běží na mém procedurálním CMS (třeba www.krasymongolska.cz), o objektech rozhodně neuvažuji. Velkou výhodou současného systému je právě jeho nekomplikovanost, malá velikost (několik kB) a vysoký výkon.
Pockej az po OOP se dostanes k funkcionalnimu programovani:)