Nette vs Laravel (Statické triedy a DI)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
janci
Člen | 5
+
0
-

Ahojte,

táto téma nebude celkom o Nette, ale keďže viem, že ľudia, čo sa zaoberajú Nette majú aj veľmi dobrý prehľad v OOP a best practice, tak by som rád otvoril jednu tému.

S Nette pracujem už niekoľko rokov (snaď, ak si dobré pamätám, tak od verzie 0.9.x) a doposiaľ od kedy som ho začal používať som skoro všetky projekty postavil na tomto frameworku. Nedávno k nám došiel ale jeden klient, ktorý má priamo požiadavku, že by chcel využiť na vývoj svojej aplikácie framework „laravel“. Keďže sa nebránim novým veciam, tak prvé čo bolo, tak som siahol po dokumentácií tohto frameworku – a prvý dojem – ostal som zdesený. Skoro celá funkcionalita je implementovaná cez statické triedy? Ako what? Bol som teda nemilo zaskočený, keďže mi príde, že so statickými triedami ako aj singleton triedami by sa malo narábať opatrne a táto implementácia mi ako veľmi opatrná neprišla (resp. správne smerovaná). Pozrel som sa ďalej na IoC. A nadišlo druhé zhrozenie – priame podhadzovanie závislosti a prístup ku kontajneru služieb cez statickú triedu? A DI ako taký som našiel len cez konštruktor. Predpokladám, že zvyšné dva prístupy (cez public property (field) a cez setter) tento framework nemá ani implementované. Nespomínam ani šablónový systém, ktorý podľa mne nie je zrovnateľný s latte.

Po tomto nemilom štarte som šiel na google s myšlienkou, že snáď nájdem nejaký dobrý článok, kde by to bolo snaď nejak vytknuté a vedel by som takto zákazníkovi predložiť, že ten framework, ktorý vybral, až taký úžasný nie je. No na google (okrem pár komentárov pod článkami) som žiadnu negatívnu myšlienku na tento vzor nenašiel.

Zaujímalo by ma teda, ako vnímate túto implementáciu vy. Ide o nesprávne pochopenie danej implementácie mnou, alebo ide o tak mladý framework, že k nemu ešte neexistujú nejaké negatívne články?

Prikladám ešte linky na spomínanú dokumentáciu:
http://laravel.com/docs/ioc
http://laravel.com/docs/mail (implementácia napr. pre email)

Jan Tvrdík
Nette guru | 2595
+
0
-

@janci: Statický přístup má výhodu, že nemusíš řešit, kde něco vzít, protože všechno je dostupné všude. Je to vlastně děsně pohodlné, akorát to nejde testovat a protože tě nic nenutí mít v závislostech nějaký systém, tak graf závislostí (kdyby ho teoreticky někdo zvládl dát dohromady) bude strašně pekelný.

Jiří Nápravník
Člen | 710
+
+1
-

Byla o tom diskuse mj na develu ono ty staticke tridy, tak uplne staicke nejsou co jsem pochopil a jsou to spise nejaky fasady a na pozadi to bezi uz „rozumne“

janci
Člen | 5
+
0
-

@Jan Tvrdík Vďaka, presne to som si aj myslel. Že by nastal problém s testovaním a následne problém aj čo sa týka viditeľnosti závislosti. Proste nikto by nevedel na čom sú dané triedy závisle. A ďalšia vec, čo mi asi najviac vadí je to, že si neviem predstaviť, žeby som vedel následne takéto triedy preniesť do inej app.

Jiří Nápravník No keďže článkov o laravele až tak veľa nebolo, tak som väčšinu prečítal. Teda som čítal aj tento, ale nejak ma nepresvedčil o tom, žeby to bolo správne tak ako to majú.

Ešte by som snáď dodal, že som sa stretol s názorom, že takto je to ľahšie čitateľné, ale podľa mňa ak programátor píše rozumne premenné tak to nie je problém (pokiaľ nepoužíva premenne ako $e, $c, $a). Len teda dodám, čo sa týka čitateľnosti, tak mi príde toto identické:

$email = new Email(...);
$email->send();
Email::send(..., function(){
});
arron
Člen | 464
+
0
-

Tak jak jsou ty statické fasády v Laravelu implementované, tak to hodnotím minimálně jako velmi zajímavý nápad. Ty fasády se jenom nadeklarují, zdědí od nějakého předka a pak už si ta fasáda všechno zařídí sama. Není problém se dostat k instanci třídy, která onu funkčnost zajišťuje (na pozají jsou „normální“ instance tříd), dokonce je tam i metoda, která vymění instanci na pozadí za mock (antipatert? kód na podporu testování v produkčním kódu?). Nechci to hned uplně odsoudit, třeba je v tom nějaká supergeniální myšlenka, kterou nevidím.

Nic to ale nemění na tom, že jsou to statické (čili globální) třídy, které sice není potřeba nikam předávat (což může být opravdu velmi pohodlné, prostě zavolám Email::send kde se mi hodí a neřeším to), ale to bude super asi jenom u fakt malých projektů. Takový kód totiž bude skrývat svoje závislosti, což je VŽDYCKY ŠPATNĚ!!! Testovat to asi půjde, ale dovedu si představit, že to nebude moc pohodlné…

Jinak Laravel poskytuje spoustu různých nástrojů pro všechno možné, má dost silný nástroj pro práci s příkazovou řádkou, umí generovat DB schémata (ačkoliv Eloquent ORM je active record) a up/down migrační skripty. Ve světě zažívá opravdu neuvěřitelný boom touhle dobou…

Toť asi zatím můj osobní názor :-)

mardon
Člen | 59
+
0
-

jsem samouk a co se mi na laravel4 hodně líbí

  • db migration, db seeder
  • eloquent ORM
  • php artisan např. generátor
  • RESTful route
  • spousta step by step tutorialů , které opravdu fungují
  • velká komunita, která ho používá
newPOPE
Člen | 648
+
0
-

@mardon Tu http://blog.newpope.org/…avel-om.html som si skusal, ako advanced Nette user, Laravel osahat. To ze existuje vela navodov (kedze si samouk predpokladam, ze neriesis hlbsie temy …) este nemusi znamenat, ze to je dobre :-) (aj CodeIgniter ma velku komunitu ale podla mna je tak dobry akurat na staticke stranky :-D)

Je to proste vec vyberu/nazoru/…

Editoval newPOPE (28. 11. 2013 22:22)

mardon
Člen | 59
+
0
-

newPOPE napsal(a):

@mardon Tu http://blog.newpope.org/…avel-om.html som si skusal, ako advanced Nette user, Laravel osahat. To ze existuje vela navodov (kedze si samouk predpokladam, ze neriesis hlbsie temy …) este nemusi znamenat, ze to je dobre :-) (aj CodeIgniter ma velku komunitu ale podla mna je tak dobry akurat na staticke stranky :-D)

Je to proste vec vyberu/nazoru/…

Vždyt jsem jenom napsala co se mi na něm líbí, nikoho nepřesvědčuji, že je lepší.

Bohužel pro domácího samouka je množství jednoduchých fungujících tutoriálů dost podstatná věc a u Nette jsem je postrádala.