Posledních pár týdnů jsem byl v práci dost mrzutý. Měl jsem za úkol
upravit tool napsaný v Nette, což samo o sobě znělo jako poměrně
jednoduchý úkol, jelikož Nette používám asi 3 a půl roku. Byl tu ale
jeden háček. Autorem toho toolu je člověk, který rozumí problematice,
kterou daný tool řeší, ale vůbec neumí programovat. A co víc, bohužel
se ani nesnažil pochopit, k čemu Nette, potažmo MVC framework vlastně
slouží.
Jak jsem se postupně dostával do již napsaného kódu, bylo mi jasné, že
se tento jednoduchý úkol postupně mění v peklo. Všechny třídy
použité v projektu jsou statické a navzájem natolik provázané, že je
nelze rozumně použít, aniž by bylo nutné je celé znovu přepsat. Tento
fakt stěžuje, či úplně znemožňuje jakékoliv testování, které je
v případě rozšiřování neznámé aplikace kritické.
Další věc, která mě velmi překvapila, byla organizace jednotlivých
pod-aplikací, čili částí aplikace, které mělo být možné používat
samostatně. Tyto aplikace nevyužívaly Single entry point (index.php) a
nebyly navrženy jako moduly, ale byly to nové instance Nette aplikace.
I když v tomto případě lze těžko mluvit o Nette aplikacích, protože
jejich struktura je typický špagety kód, kde je v jednom souboru smíchaný
funkční kód se šablonou.
Jako třešnička na dortu jsou zde komponenty. Ano, přesně ty komponenty,
kvůli kterým mám Nette rád. Původní autor totiž vůbec nepochopil,
k čemu jsou určeny a znovu vše spatlal do jednoho souboru. Ba co víc,
jednotlivé komponenty od sebe dědí, ale základní třída obsahuje
statické metody s definicemi použitými ve svých následnících
(například filterText a filterImage, které jsou použity v třídách
TextComponent a ImageComponent).
A teď se dostáváme k AJAXu. Ten lze v Nette také řešit naprosto
elegantně pomocí handlerů přímo definovaných v komponentě. Ne však pro
našeho programátora. Ten vytvořil další pod-aplikaci nazvanou ajax, ve
které jsou skripty pro jednotlivé ajaxové požadavky. Bohužel tyto skripty
nevyužívají Nette a ani již vytvořené komponenty a vše si znovu dělají
samy po svém.
V neposlední řadě mohu zmínit cachování, tvorbu odkazů, práci
s vstupními proměnnými, práci se session. Prostě vše je použito
naprosto nevhodně, přímo proti proudu a všem doporučeným praktikám.
A co původní autor? Dostal ocenění za výbornou práci a šel pracovat do
jiného oddělení.
A teď už asi chápete důvody mé frustrace.