👋 Nový obsah na borekb.cz

Info Tento blog je v "read-only módu" a nový obsah již nebude přibývat. O vývoji píšu na DevBlog.

Deset důvodů, proč mě ASP.NET neděsí

David Grudl je poslední dobou zděšen. Kromě PHP, které občas vyděsí asi každého, se opřel i do ASP.NET. Negativní vyznění článku mě jako příznivce Microsoftí platformy moc nepotěšilo. V komentářích se do argumentace pustil český .NET guru René Stein a jeho argumenty zde rozhodně nechci opakovat, spíš bych chtěl nabídnout pár věcí, kvůli kterým považuji ASP.NET za nejlepší platformu pro webový vývoj dneška (preferuji ji před PHP a Javou, Ruby on Rails neznám). Primárně budu srovnávat vůči PHP, protože toto srovnání je nejatraktivnější :)

  1. ASP.NET je součástí .NET Frameworku, nikoliv nějakou samostatnou technologií. To má řadu příjemných důsledků, jako třeba nezávislost na programovacím jazyku (je jedno, jestli kód píšu v C#, Javě, Pascalu, Fortranu, JScriptu nebo v čemkoliv), dostupnost velkého množství předpřipravených tříd apod. I většina dalších bodů těží z přítomnosti .NET Frameworku.
  2. V ASP.NET se programuje, v PHP se skriptuje. Vím, že toto prohlášení je potřeba brát s velkou rezervou a že třeba právě Davidovo Texy! je pravým a nefalšovaným programováním, nicméně asi bude existovat nějaký důvod, proč se na webu php.net píše „PHP is a widely-used general-purpose scripting language that is especially suited for Web development and can be embedded into HTML…“. Naproti tomu je třeba takový C# velmi výkonným obecně zaměřeným objektově orientovaným jazykem, o čemž si PHP může v současnosti nechat jenom zdát.
  3. Koncept serverových ovládacích prvků je absolutní bomba. Má tolik výhod, že je těžké je všechny vůbec vyjmenovat – namátkou jednoduchý deklarativní zápis, událostně orientované programování, oddělení logiky od HTML kódu, znovupoužitelnost, rozšiřitelnost pomocí dědičnosti, možnost renderovat jiný výstup pro různé klienty atd. atd. To má nedozírné následky pro mnoho věcí, jako třeba udržovatelnost kódu, podporu ve vývojových prostředích apod. Nejedná se jen o syntaktické ulehčení pro vývojáře, ale třeba takový RoundedBox by ani v PHP naprogramovat nešel (aspoň mě nenapadá, jak).
  4. Vysoká produktivita vývoje je jedním z nějvětších praktických přínosů ASP.NET. Na školních projektech mám vyzkoušeno, že aplikaci dokážu v ASP.NET udělat několikrát rychleji než v PHP.
  5. Oddělení designu od business logiky. Toho lze docílit ve všech platformách pro webový vývoj, ale styl, kterým to dělá ASP.NET, se mi líbí nejvíc. Serverové ovládací prvky jsou opravdu skvělá věc.
  6. Bezproblémové nasazení. U PHP se můžu skoro na 100% spolehnout, že doma vytvořená aplikace nasazená na web přestane fungovat. Stejně tak při změně hostingu. Naproti tomu u ASP.NET mám skoro 100% jistotu, že aplikaci prostě uploadnu a ona pojede. To je dáno především tím, že u PHP má konfiguraci v rukou webhostingová společnost, zatímco u ASP.NET ji mohu ovlivnit já sám (pomocí souborů Web.config).
  7. Flexibilita. Ve verzi 2.0 je ASP.NET nesmírně pružnou platformou a téměř veškeré standardní chování lze ovlivnit nebo úplně přeprogramovat, ať už jde o generování výstupu serverových prvků, poskytování personalizačních, autentizačních, autorizačních a dalších služeb, kešování atd.
  8. Visual Studio nemá ve světě PHP konkurenci. Není to jen tím, že Microsoft umí a že třeba Zend nemá na vývoj IDE takové peníze, ale především PHP jako jazyk ani v nějakém grafickém editoru příliš podporovat nelze. Pro vývojové prostředí je celkem jednoduché přeložit <asp:Calendar> do vizuální podoby, ale u změti <?php echo...?> to již tak triviální není (pokud to vůbec lze). WYSIWYG samozřejmě není vše, i jinak je Visual Studio velmi kvalitní IDE a nejnižší Express edice za nulovou cenu jsou přitom lepší než drahé Zend Studio.
  9. Výkonnost. Celá plarforma .NET je velmi výkonná, grafy ukazující srovnání s Javou byly v Microsoftích prezentacích dlouho využívány :) (ale prý už se Java zlepšila). Je rovněž pozoruhodné, že pár studentů z Matfyzu dokázalo na platformě .NET vytvořit výkonnější běhové prostředí pro PHP (jménem Phalanger) než je originální Zend Engine při použití Zend Optimizeru. To už o něčem svědčí…
  10. ASP.NET je profesionální, komerčně podporovanou platformou. Můžu se spolehnout, že při příchodu verze X+1 nebudu muset upravovat všechny aplikace psané pro verzi X (jako to bylo u přechodu z PHP4 na PHP5). Mám jistotu, že za architektonická rozhodnutí je někdo placen a nese za ně odpovědnost. Mám jistotu, že se do ASP.NET dostane jen vysoce otestovaný kód, který zapadá do dlouhodobé logiky směřování celé platformy. Open source je pěkná věc, ale co se děje v PHP, to občas zůstává rozum stát.

Jsem si vědom toho, že ASP.NET má své negativní stránky. Tou první je závislost na Windows + IIS (Mono není zcela plnohodnotnou alternativou), s čímž souvisí hůře dostupný hosting. Já jsem sice maximálně spokojený s Aerohostingem, kde za málo peněz dostávám opravdu hodně muziky, ale obecně je dostupnost hostingů pro PHP daleko větší. Další věcí, na které bude Microsoft určitě usilovně pracovat, je vyčištění generovaného HTML kódu. Záchvat smíchu při prvním pohledu na zdrojový kód stránky jsem slyšel už od nejednoho PHPkáře.

Celkově jsem ale s ASP.NET velmi spokojen. Je to kvalitní platforma, která mi umožňuje snadno a rychle tvořit i poměrně komplikované záležitosti. Pro mě je to určitě pohodlnější než hodiny a dny něco smolit v PHP.

P.S. Tento článek není namířen proti PHP, existují typy projektů, ve kterých bych tuto technologii preferoval. Článek pouze ukazuje deset důvodů, proč mám k ASP.NET silně pozitivní vztah. To, že se jednotlivé body často odkazují na PHP, můžete považovat za shodu okolností :) Pokud vám to vadí, nahraďte všechny výskytu „PHP“ za „ASP“ :)

Zařazeno do kategorií | |
dgx (So, 2006-02-25 22:55):

Borku, vůbec nepochybuju o tom, že ASP.NET je pro vývojáře úžasná záležitost. V mé kritice jsem tyto věci vůbec nezpochybňoval a řešil jedinou věc: generovaný výstup. Konkrétně tedy způsob, jak se řeší interaktivita serverových ovládacích prvků. Argumentace Reného mě v tom utvrdila – lépe řečeno pochopil jsem, proč můžeme mít pravdu oba.

Taková perlička: http://www.jcxsof­tware.com/vsphp/ :-)

SQi (So, 2006-02-25 22:56):

Souhlasím, sic .NET nepoužívám (aspoň zatím). Jde o to, že na těch pár scriptů je PHP ideální, a pak taky podpora php u webhosterů. Co se týče Frameworku je škoda, že se do XP musí doinstalovávat, ale i přesto výhody tu jsou.

Borek (So, 2006-02-25 23:06):

dgx: Tvoji kritiku jsem pochopil správně a vím, že nebyla cílená na ASP.NET obecně. Ale název článku a věta „úroveň běžně dosažitelných výsledků je prachbídná“ nemohly zůstat bez reakce :)

Pykaso (Ne, 2006-02-26 05:12):

Právě ten generovaný výstup mě od .NET odradil. PHP dá sice o něco více práce, ale potom mi z toho taky leze to, co je žádáno.

Když jsem byl na Microsoftí akci kde prezentovali nové technologie a hlavně nové Visual Studio, nadchla mě jednoduchost tvorby aplikace… ale ten zdrojový kód.

Borek (Ne, 2006-02-26 07:06):

Pykaso: Myslím, že to je častý důvod, proč se PHPkářům do ASP.NET nechce. Představa, že ono si to bude generovat HTML kód po svém, je pro mnoho lidí těžko stravitelná.

Odpovědí je bod 7. Nemám s tím praktickou zkušenost, ale četl jsem, že lze ovlivnit generovaný HTML výstup a že se v současnosti pracuje na projektu, který místo současného markupu bude emitovat výrazně úhlednější XHTML+CSS. A pokud nechcete čekat, nic vám nebrání si všechny komponenty napsat od nuly nebo je sehnat někde na netu. To sice bude stát nějaké jednorázově vynaložené úsilí, ale všechny výhody ASP.NET jako frameworku zůstanou zachovány. To, že je 99,9% vývojářů na tuto práci líných, není argumentem proti ASP.NET jako takovému.

Ale já osobně si počkám. Úhlednější výstup je určitě něco, co se v ASP.NET brzy objeví.

Daniel Steigerwald (Ne, 2006-02-26 08:30):

S ASP.NET 2.0 pracuju asi půl roku, můžu potvrdit, že defaultní page template používá XHTML 1.0T Doctype, který považuji, za asi nejlepší řešení pro webové aplikace. Všechny komponentky jsou přepsané tak, aby xhtml renderovali. Nedávno jsem ale v jednom projektu používal Dundas komponentu pro grafy, a to je víc než hustá záležitost. Maximálně vymáklá podpora designeru. Měl sem ale problém, při renderování grafů do FLASHe. Generovaný HTML kód měl k ideálnímu způsobu vložení FLASHe do stránky daleko. Nezbylo mi nic jiného, než napsat response filter a pomocí najít / nahradit, kód upravit. Poprvé trochu koumání, po druhé práce na deset minut. Ale chtěl sem říct něco jiného. ASP.NET 2.0 umožnuje konečně psát controly, které si JavaScript linkují externě, na spešl handler WebResources.ashx. To je to, co mi ve starym asp citelně chybělo, a workaroundy (vlastní handlery, nebo Response.End()) nebyli moc šikovné. Co mě bohužel, ale děsí teď, je projekt ATLAS (AJAX asp.net) Ambice obrovské, provedení dost sporné..)

Jozef Izso (Ne, 2006-02-26 09:06):

I keď patrím k najväčším zástancom validného kódu (kvôli rýchlosti vývoja a nie kvôli kompatibilite), tak som sa rozhodol pre ASP.NET. Aj keby som totiž musel prepísať renderovanie všetkých kontroliek, tak stále to budem mať rýchlejšie spravené, ako v PHP odladiť nejakú úžasnú chybu s chýbajúcim $ alebo návratovou hodnotou z funkcie.

Určite nechcem, aby po upgrade verzie .NETu mi prestali fungovať aplikácie. Ako sa mi to stalo s anti-spam skriptom v PHP. Niekto sa rozhodol, že v novej minor verzii bude funkcia vracať boolean namiesto int, čiže skript bol v háji.

Čo mi napr. vadí pri práci s ASP.NET 1.1 je generovanie rôzneho kódu pre rôzne prehliadače u štandardných kontroliek. Treba to zrušiť v každej stránke zvlásť.

Každý však rieši, ako spraviť spoľahlivé prihlasovanie. A ešte si uchovávať rôzne informácie o užívateľovi (nielen ID, ale aj meno, e-mail, práva…). Vďaka OOP a perfektne navrhnutému Frameworku je toto v ASP.NET záležitosť úplne jednoduchá. Stačí napísať vlastný ICredential a IPrincipal. Inde treba programovať celú logiku vždy od základov.

rarouš (Ne, 2006-02-26 12:14):

S kavlitou výstupu jsem nikdy neměl potíže, sice jsem nad výsledným řešení strávil nějakej čas, ale dnes si do projektu nalinkuju jednu knihovnu a přidám pár definičních souborů a spokojenost. Výsledný výstup je plně validní (a funkční) XHTML 1.1 s patřičným contet-typem nebo HTML 4.01 pro to, co xhtml naznají. viz např. můj poslední projekt www.osecna.info . Jinak se všemy body souhlasim a mohl bych přidat spoustu dalších :) Díky Borku za shrnutí ;)

llook (Ne, 2006-02-26 13:41):

XHTML 1.1 s patřičným contet-typem nebo HTML 4.01 pro to, co xhtml naznají

Můžu vědět k čemu je tohle dobrý?

rarou (Ne, 2006-02-26 14:34):

je to podle standardu :D

dgx (Ne, 2006-02-26 16:55):

rarous

Web obce Osečné je pěkný, ale… bez JavaScriptu fce ‚hledání‘ nefunguje, že? Tedy nemohu to vyzkušet, neboť je tam nějaký chyba v ASP.NET, ale usuzuji podle toho onclick="javascript:....".

rarouš (Po, 2006-02-27 17:45):

Díky, na tuhle věc jsem zapoměl :) zejtra to updatnu, víc očí víc pozná, děkuju.

rarouš (Po, 2006-02-27 17:49):

Tak oprava (sorry Borku, že to píšu sem), bez JS to funguje, použije se submit behavior, ale Google něco udělal se svu vyhledávací službou, proto ta chyba.

dgx (Po, 2006-02-27 19:52):

borek to snad smaže – zkus hledat na stránce http://www.osec­na.info/…Navstev­.aspx

Borek (Po, 2006-02-27 21:30):

První přikázání: Nepromažeš :)

rarou? (Út, 2006-02-28 10:22):

Nemůžu si pomoct, ale funguje to i bez JS :)

2 Borek: Díky ;)

jk,j (Út, 2006-04-25 17:26):

Když jsem byl na Microsoftí akci kde prezentovali nové technologie a hlavně nové Visual Studio, nadchla mě jednoduchost tvorby aplikace… ale ten zdrojový kód.

Právě ten generovaný výstup mě od .NET odradil. PHP dá sice o něco více práce, ale potom mi z toho taky leze to, co je žádáno.

Borek (Út, 2006-04-25 20:11):

2 jk,j: Není to „o něco více práce“, ale „mnohokrát více práce“. Navíc pokud generovaný výstup nevyhovuje, není problém ho změnit.

satai (Po, 2006-12-11 15:01):

Vybrat si pro srovnani PHP je docela sikovne, proti Jave by to rozhodne tak jednoznacne nevypadalo…

PF_ (Út, 2007-11-13 21:39):

Ad 3): To je jako kdybych řekl, že si nedokážu představit, jak RoundedBox naprogramovat v C#, protože mě to nenapadá. :-) PHP je třeba srovnávat s C#, nikoli s ASP.NET, protože ASP.NET je mnohem víc, než jen C#. Myslím ale, že existují mnohem lepší alternativy k obojímu, i když se obávám, že pro mnoho z nich je třeba mít vlastní server. :-) Server-side komponenty ale nejsou nic nového, už velmi dlouho je má dotažené skoro do dokonalosti třeba Seaside.

Druid (St, 2008-04-16 13:24):

Co se tyce generovaneho kodu nad kterym se tu vsichni cukaji a berou to jako hlavni protiargument… Ano , defaultni kod je skutecne bes, ale co vam brani si ho pozmenit? Mate tunu moznosti… a) vygenerujete si ho sami – narocnejsi b) upravite generovany kod – metoda render je virtualni c) sporny kod muzete do stranky vkladat napriklad pomoci response.write kdy se vam bude misto neprijemneho prvku zapisovat v podobe jaky si urcite vy sami…. To je jen prvnich par reseni co me ted zrovna napadlo… Neni zadny problem udelat pod ASP. NETem XHTML 1.0 strict validni web bez warnigu a erroru… Mozna to zabere o trochu vic casu napoprve nez treba v PHPku, ale odmenou je vam pouzivani skutecne bozskeho jazyka pro vyvoj :D a o funkcich a moznostech nemluve…. to by bylo PHP v dobe ledove….

Komentáře jsou uzavřeny (blog je v read-only módu). Pokud mě chcete kontaktovat, můžete mailem.