Jak jsem psal, rozhodl jsem se dát šanci ASP.NET. Je toho hodně. Učím se
nový jazyk, nová API, nové IDE, ale snad se už začínám trochu
orientovat.
Zatím nejsem zděšen. 
C# a Visual Basic
Úplně ze začátku jsem se jazyk neučil vůbec, vystačil jsem si
v podstatě se znalostmi Javy. Postupně mi došlo, že rozdíly nejsou jenom
v syntaxi a vyhledal jsem nejdřív C# for Java
Developers a potom C#
Programming Guide.
Mohl jsem si vybrat i jiný .NET jazyk, včetně takových úletů jako je
PHP nebo Fortran, ale za rozumnou volbu pro začátečníka lze považovat pouze
C# nebo VB.
Visual Basic mi připadá jako C# s méně přehlednou syntaxí a se
spoustou zbytečností navíc (například
XML Literals), díky kterým připomíná eintopf pejka a
kočičky…
Nástroje
Zatím mi stačí Visual Web
Developer, jedna z bezplatných verzí Visual Studia. Bez něj by
to nešlo.
Kdysi jsem ze zvědavosti pokukoval po PRADO frameworku pro PHP. Dost mě
odrazoval zápis, spousta XML, spousta souborů, spousta konfigurace. PRADO to
všechno odkoukalo právě od ASP.NET, jenže tady se to používá strašně
pohodlně, díky skvělému IDE…
Kromě VWD už používám jenom NUnit na
testy jednotek, jiné nástroje jsem zatím nepotřeboval. Až budu mít co
dokumentovat a verzovat, tak přibude ještě Sandcastle a Subversion. Víc mě nenapadá.
ASP.NET MVC
Jak mi bylo poraděno, podíval jsem se na ASP.NET MVC. Některé věci mě vysloveně
nadchly, ale nebudu se
opakovat. Zkrátka je to hodně povedený framework.
Jednu věc ale stále nechápu: Proč se v šablonách místo controlů
používají hloupé helpery. To nikdo nepoužívá design mód? Kdybych se pro
ASP.NET MVC rozhodl, tak bych určitě začal vytvořením nějaké sady
controlů.
Nicméně, ač se mi ASP.NET MVC hodně líbí provedením, nelíbí se mi
koncepcí. Zkrátka mi nesedí ten RoR přístup k MVC.
ASP.NET built-in page controller
Mnohem víc mi sedí to, čemu se prý říká Page Controller. To je
přístup, při kterém si programátor může webové UI představit jako
soustavu stránek.
To nabízí ASP.NET v základní výbavě. V současné verzi je dokonce
možné i pro tento přístup použít
routing, tedy přizpůsobitelné mapování URL na stránku.
Bohužel některé věci v ASP.NET nejsou uspokojivě vyřešeny. Hlavní
problémy vidím zatím tři:
- Předávání stavu aplikace.
- Generování ClientID.
- Automatické testování.
Trochu to rozvedu.
Předávání stavu aplikace
Stránku si lze představit jako strom komponent, z nichž některé můžou
měnit svůj stav na základě uživatelských akcí. Problém je, jak tento
stav předávat mezi jednotlivými HTTP požadavky.
ASP.NET pro to nabízí ViewState. To je taková kolekce, do které si
každá komponenta může uložit data, která jí při příštím požadavku
pomůžou obnovit svůj stav. ASP.NET nabízí dva způsoby, jak tuto kolekci
přenášet mezi požadavky:
- Skryté pole. Stránka se obalí formulářem, do něj se
dá skryté pole a do něj serializovaný ViewState. Požadavky je pak nutné
provádět odesláním tohoto formuláře – tlačítkem nebo
javascriptem.
- Session. Viewstate se uloží do session, na klienta se
přenáší pouze session ID.
Hlavní nevýhody obou možností jsou zřejmé:
- Nelze používat bookmarky, nelze odkazovat.
- Neprojdou roboty vyhledávačů.
- Ve druhém případě navíc hrozí expirace session.
Výhodou je, že do ViewState lze uložit jakýkoli serializovatelný objekt,
ale ty nevýhody to stejně nevyváží.
Jak jinak lze předávat stav uživatelského rozhranní? Přece v URL, jako
každá slušná webová aplikace. Bohužel, pro toto paradigma ASP.NET žádné
usnadnění nenabízí. Tady si budu muset ASP.NET trochu přiohnout.
Generování ClientID
Pokud se server control vykresluje do HTML a má mít nějaké ID, je
potřeba zajistit, aby bylo v rámci HTML stránky jedinečné. ASP.NET pro to
má řešení, ale takové hloupé.
Zatím mě to moc nepálí, ale přemýšlím, že u svých vlastních
controlů umožním klientské ID nastavit napevno:
private string _clientID;
public override string ClientID
{
get
{
if (_clientID == null)
{
_clientID = base.ClientID;
}
return _clientID;
}
}
public string CustomClientID
{
set
{
_clientID = value;
}
}
Automatické testování
Podle toho, co jsem četl, je prý obtížné vytvořit instanci stránky
jinak, než requestem na server. Velký problém v tom nevidím – na
samotných stránkách by k white-box testování beztak nic moc být nemělo.
Ale ještě se na to podívám.