Ááá

Další web používající WordPress

Říj

12

První dojmy z ASP.NET

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:

  1. 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.
  2. 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.

This entry was posted by LLook on 02:10, Říj 12th 2008 and filed in Nezařazené.

Komentáře můžete sledovat přes RSS 2.0 kanál.

Leave a Reply


© Ááá * WordPress * LoseMyMind * Feed feed