Autor článku pořádá školení, která si můžete objednat na Javascript-skoleni.cz.
Nebyl to první mail tohoto typu. Abyste rozuměli, posledních pět let se živím tím, že pomáhám firmám i jednotlivcům s jejich webovými projekty. Jak psát testy, jak ladit výkon, jak navrhnout architekturu a mnohé další. Jelikož se mi nechtělo zas a znova všechno sepisovat zvlášť, publikoval jsem stručný článek What’s wrong with Angular.js. Odezva byla nečekaná, k dnešnímu dni skoro 60 tisíc shlédnutí. Článek je citován, naposledy na legendárním webu Quirksmode „The Angular criticism that resonates most with me comes from the What’s wrong with Angular.js article by Daniel Steigerwald“ – The problem with Angular.
Dva dny jsem strávil s firmou nad jejím projektem. Ti z vás co znají Angular, asi tuší. Angular nijak nenaznačuje, jak v aplikaci implementovat business model. Ne, scope není business model. Programátoři, kterých na projektu pracovalo několik, zamořili celý zdrojový kód watch(), $digest() and $apply() metodami. Všechno poslouchalo všechno a nikdo si nebyl jist, odkud změny přicházejí. Celá aplikace se zle debugovala. Další problém byly direktivy, všechny je psala externí firma. Záměr byl asi takový: nakoupit hotové komponenty a nechat je vlastní programátory využívat.
Výsledkem bylo, že programátoři nemohli pružně reagovat na změny zadání a komponenty začali hackovat. Je třeba říct, že nešlo o nijak složitou aplikaci. Možná vás překvapí, že jsem nenavrhoval kompletní přepis. Aplikace byla již v produkci, na přepsání tak nebyl čas ani prostředky. A především, programátoři nejdříve museli pochopit v čem je problém, a že webové aplikace se dají psát jinak a lépe.
Tento článek však není case study, takže jen stručně. Jako první bylo třeba postupně aplikaci dodat business model, a to skrze Facebook Flux. Tento pattern není vázán na konkrétní implementaci, lze jej použít i s Angularem. Hezký článek jak na to je How can React and Flux help us create better Angular applications?
Co je tedy tak špatného na Angularu, že doporučuji se mu vyhnout?
Skoro všechno. Opravdu. Ačkoliv ne vše. Modularizace kódu a dependency injection, které Angular nabízí, jsou skvělé praktiky a držte se jich. Také důraz na testovatelnost kódu. Autor Angularu Miško Hevery psal kdysi skvělý blog, který stojí za to si přečíst i dnes. Vřele doporučuji. Pokud však chcete detailně popis toho, co vše je špatného na Angularu, přečtěte si můj anglický článek. Nemá smysl, abych jej zde překládal. Pokud však nesouhlasíte, máte prostor k diskuzi v komentářích tady zde na zdrojáku, rád vše dovysvětlím. Než však napíšete rozhorčený komentář, vemte prosím na vědomí, že Angular 2 je hodně jiný. Proč asi?
Angular 2
V roce 2014 uvolnil Facebook React, později Flux. A způsobil tak revoluci. Možná krčíte rameny a říkáte si, proč by mě mělo zajímat, jak programují programátoři nějaké sociální sítě? Třeba proto, že Facebook je nyní největší open source firmou. Týmy Angularu a Emberu, dvou asi největších frameworků pro vývoj webových SPA aplikací, se mohutně od Reactu a Fluxu inspirují. Ember zavádí virtual dom a server side rendering, Angular zavádí one way data flow. To vše je v Reactu a Fluxu už od začátku elegentně vyřešené. Správným a čistým návrhem.

„I don’t always agree with him, but I love this guy.“ https://plus.google.com/+IgorMinar/posts/a3ePEKy3mm6
Měl jsem s Igorem, hlavním vývojářem Angularu, dlouhou debatu. Snažil jsem se mu vysvětlit, že Angular tím, že vsadil na HTML, vsadil špatně. Igorův hlavní argument byl, že kodeři potřebují především HTML. Možná, ale problém leží v tom, že v Angularu se píší aplikace, ne weby. Angular 2 bude velmi jiný, a jeho popis je super obsáhlý „My phone battery ran out while I was reading it“ https://twitter.com/swannodette/status/552150238455431168.
Autor článku týden po jeho napsání, team Angularu opustil. Mnohé bylo opraveno, tak snad třeba, při vhodném použití, čistě pro obohacené statické weby, poslouží Angular 2 dobře. Problém však je ten, že Angular 2 zatím neexistuje a dlouho existovat nebude, a investovat do Angularu 1 už nemá cenu.
Co s tím?
Pokud máte existující aplikaci v Angularu 1, dále ji udržujte, a v mezičase se zkuste poučit z How can React and Flux help us create better Angular applications? Pokud budete tápat, napište mi. Pokud chystáte aplikaci novou, kterou nebudete chtít za pár let komplet přepisovat, přečtěte si můj článek.
Záměrem toho článku opravdu není přeložit to, co už jsem napsal a bylo okomentováno jinde, ale vyvolat diskuzi. Pište do komentářů, ptejte se, ale prosím až poté, co prostudujete odkazy. Velmi rád vše vysvětlím.
Přehled komentářů