Když jsem poprvé potkal .NET, myslím, že to bylo někdy v roce 2003 a jednalo se o verzi 1.0, poznal jsem zároveň nový pojem WebForms. Měl jsem už nějaké zkušenosti s tvorbou webových aplikací, převážně v PHP a později v ASP a svět webových aplikací jako takových mi přišel úchvatný. Všude kolem mne se propagoval web jako nositel aplikací, u kterých odpadají problémy s verzováním nastavením systému klientského počítače a další dependencies, které dokázaly vývojářům a ostatně i správcům dost zavařit. Slova „webová aplikace“ byla heslem, které odemklo mnoho investic do IT a přepisovaly různě rozsáhlé projekty.

Pro mne osobně WebForms byly převratnou záležitostí. Po zkušenostech z PHP už jsem dávno věděl, co představuje čtení requestu od uživatele, jeho zpracování a generování response, které mu bude odesláno zpátky. V té době jsem projektoval vlastní šablonovací podporu, která pořešila mou potřebu, které se později začalo říkat oddělení kódu a designu stránek. Tato vlastnost se později stala opěvovanou na WebForms. Mne ale mnohem více zaujala jiná vlastnost, podle mého názoru stejně přínosná, ale často opomíjená. Tou vlastností bylo prach obyčejné reagování na události. S WebForms se má pozornost přesunula od kompletního zpracování requestu na zaměření právě na reagování na události. Místo „Řekni mi, co uživatel poslal“ najednou nastoupilo „Uživatel stiskl tlačítko. Co s tím uděláme?“. Z nestavového request-response zpracovávaného konfederací nezávislých skriptů se najednou stala plnohodnotná aplikace se stavy a samostatným jádrem. Nepřeháním, když řeknu, že mne až ohromilo, jak moc se najednou otevřely možnosti pro takovou aplikaci. A pak přišel všemi proklínaný ViewState. Doslova a do písmene hned při prvním setkání jsem narazil na tuhle věc a stejně jako ostatní i mne na první setkání poslal na kolena. Načetl jsem si pěkně záznamy z databáze, přechroustal je a pěkně uložil do komponenty. Na mé mašině vše lítalo, jak vítr… a na testu šlo vše do kopru. Přenášet několik MB ViewState sem tam opravdu nebylo to pravé. A přesně této zkušenosti jsem v následujících letech vděčil za mnohé. Zatímco dnes všude slýchám „ten hrozný ViewState“, když položím otázku „A co jsi s ním dělal?“, odpovědí zůstává obvykle buďto překvapený pohled nebo strohé „Nic. Nedalo se s tím nic dělat.“ A v té chvíli debatu na tohle téma končím. Nemá smysl vysvětlovat někomu, kdo si nedá práci poznat technologii, jaké jsou její výhody a nevýhody. A nemá cenu vysvětlovat mu, jak jsem dokázal udělat plně funkční aplikaci s ViewState na 80B. Programátoři jsou lidé líní, protože kdyby nebyli líní, živili by se poctivou prací a nikoliv programováním. Jenže pokud je programátor natolik línej, že se neobtěžuje ani poznat nástroj, se kterým pracuje… nožem se dá taky vyrobit stůl, proč ne, že.

S nástupem .NET MVC se začal vracet onen request-response model, který jsem poznal z PHP a proto s velkou náloží nadsázky říkám, že programování aplikací v .NET se vrátilo svým způsobem do dob PHP. Postupně jsem pozoroval, jak líní programátoři opouští WebForms a vůbec jsem se jim nedivil. MVC jednoznačně vyhrávalo v jednoduchosti, přesněji nároky na inteligenci vývojáře šly razantně k zemi. Vývojář se najednou vrátil k tomu, co dostal od uživatele a svět WebForms s událostmi, samostatnými komponentami, masterpages, renderery a vším tím okolo šel ke dnu. Jak říkám, chápal a dodnes chápu tento vývoj, ale mně se prostě líbí ona myšlenka stojící u zrodu WebForms a to zavedení mechanismů z WinForms do webového světa a protože MS také tuto myšlenku opustil, rozhodl jsem se zahájit projekt a prostě jsem vyzobnul to nejlepší z WebForms, zredukoval nebo zavrhnul to, co se mi nelíbilo a napsal si vlastní WebForms podporu běžící nad .NET Core… Jo, přesně tak, jsem blázen a vůbec mi to nevadí.

clip_image002Kam jsem se dostal? Moje WebForms umí cosi jako MasterPages, umí šablonované komponenty a UserControls. Přirozeně umí stavové stavové informace komponent ukládat do ViewState a dává vývojáři možnost specifikovat, co se do ViewState opravdu má nebo nemá uložit. Dal jsem vývojáři možnost specifikovat generování IDček do stránky. Naimplementoval jsem základní komponenty včetně Repeateru, MultiView a dalších vymožeností. Pořešil jsem PostBacky ale také prvky obnovující pouze část formuláře. V současné chvíli mám k dispozici i personalizaci pomocí WebParts, validátory, dialogová okna a další oblíbené controls. To vše s rychlostí odpovědí v desítkách ms.

V této chvíli jsem ve stavu, kdy si pohrávám s prvky, přidávám komponenty, které mi přijdou zajímavé. Zvažuji možnost designerů a generování částí stránek. V mezičase si pohrávám s LCars designem a pomalu uvažuji o úpravě již existujících modulů jako MetaWeblog a jiných tak, aby ve finále vše vedlo mimo jiné k přepisu těchto stránek stránek právě do tohoto engine, čímž bude jednoznačně završena geneze mého WebForms engine.

Mou ambicí není napsat celý MS WebForms se všemi komponentami, pouze otevírám cestu. Co vy na to, daří se?