Nová verze známé technologie pro tvorbu webových aplikací zasáhla samotné srdce vytváření výsledné stránky. Pojďme se podívat na vylepšenou verzi technologie CodeBehind.

Hned na začátek bych rád uvedl, že před nedávnem Microsoft vydal druhou betu Visual Studia .NET codename Whidbey. Express verze produktů si můžete stáhnout ze stránek Microsoftu a navíc si můžete nechat zadarmo zaslat DVD s Visual Studiem Team Systems, nejvyšší chystanou verzí Visual Studia (kterou si mohou předplatitelé MSDN ze serverů Microsoftu i stáhnout). Pokud této nabídky využijete, Microsoft vám navíc dá přístup ke třem publikacím o novinkách v .NET Frameworku 2.0, včetně vcelku zajímavé práce Introducing Microsoft ASP.NET 2.0 od Dina Esposita.

CodeBehind a jeho problémy

Ve staré verzi ASP.NET existovaly dvě možnosti, jak vkládat do stránky kód. Klasický způsob vložení do elementu script s atributem runat="server", takzvaný inline kód, a model CodeBehind, který veškeré obsluhy událostí a další programové kódy „uklidil“ do pomocného souboru. To přinášelo několik problémů:

  • Soubor CodeBehind musel neustále věrně kopírovat ASPx formulář. Existoval-li na stránce TextBox, se kterým se v aplikaci pracovalo, bylo třeba tuto třídu zavést také do CodeBehind souboru jako datovou složku a pracovat skrze ni. Pokud jste provedli podstatnější změny v jednom souboru a na druhý jste zapomněli (což se bez Visual Studia jako editoru stalo snadno), vedlo to ke zbytečným chybovým hlášením. (Představu ,jak to fungovalo, si můžete udělat na jednoduchém příkladu o zcizení Flashe.)
  • Zatímco CodeBehind soubor pro určitý WebForm se kompiloval do sestavení společného s ostatními soubory s programovým kódem, samotná ASPx stránka do sestavení vlastního. To mohlo u větších projektů znamenat nákladný mezikrok v podobě překompilování všech CodeBehind souborů kvůli drobné úpravě. Navíc tu existoval nesoulad mezi prací Visual Studia, které vyžadovalo pro odkaz na soubor s kódem atribut CodeBehind, a ASP.NET runtime, které tuto konstrukci nezná a pro odkaz na soubor vyžaduje atribut SRC.

Tyto problémy se mohou někomu zdát malichernými, na druhou stranu si musíme uvědomit, že výhody oddělení kódu od prezentační vrstvy se projevují jak v případě inline kódu, tak v technologie CodeBehind prakticky stejně. Není totiž mnoho případů, kdy můžete jeden CodeBehind soubor použít pro dvě různé stránky.

Druhá verze ASP.NET proto zavádí dvě změny:

  • Visual Studio implicitně při vytváření webového formuláře CodeBehind neužívá, kód vkládá přímo (inline) do stránky.
  • Explicitně si můžete vytvoření separátního souboru vyžádat. Technologie v tomto případě užitá je však inovovaná, a proto se jí často místo CodeBehind říká CodeBeside.

Intermezzo

Jedna z novinek jazyka C# v .NETu 2.0 je takzvaná partial class. V češtině zatím terminologie není ustálena, nekamenujte mne tedy, prosím, za užívání potencionálně chybného tvaru částečná třída. Umožňuje nám jednoduše rozdělit třídu na dva a více kusů a každý umístit do jiného souboru. Syntaxe je zcela shodná s normální deklarací třídy s tím, že u obou tříd uvedeme modifikátor „partial“. Ve VB.NET je situace velmi podobná, pouze použité klíčové slovo je „Expands“.

VS.NET 2005 toho využívá například u WinForms k oddělení částí kódu vytvářejících komponenty (což je práce vizuálního editoru) a programátorových zdrojových kódů obsahujících obsluhy událostí.

Jak to vypadalo v první betě

Zatímco v rámci CodeBehind webová stránka dědila soubor se zdrojovým kódem a ten třídu Web.UI.Page (většinou, programátor může vytvořit vlastní zděděnou třídu od Page a tu pak použít jako base class svých stránek), zde bylo navrženo, aby webová stránka byla částečnou třídou ke CodeBeside souboru a tato sjednocená třída dědila Page (většinou).

Je to podstatně logičtější cesta a navíc při jejím užití odpadají výše zmíněné problémy. V CodeBeside souboru není již třeba určovat, které že to prvky jsme na stránce užili, neboť pracujeme přímo s prvky třídy stránky. Navíc se obě částečné třídy kompilují do společného sestavení.

A jak to dopadne

Tato implementace CodeBeside se však zřejmě ukázala být příliš razantní (zejména odstranění možnosti zkompilovat všechny programové kódy do jednoho souboru zřejmě vadila), Microsoft v druhé Betě ustoupil a výsledná verze je něco mezi oběma verzemi. Hlavní změna oproti prvnímu návrhu verze 2.0 spočívá v tom, že ze souboru s programovým kódem se nyní stejně jako v CodeBehind modelu dědí vlastní webový formulář.

Upadla tedy částečná třída v zapomnění? Vůbec ne. Zmíněný neduh CodeBehind, spočívající v přepisu prvků užitých v ASPx souboru, je totiž odstraněn tím, že ASP.NET při požadavku na stránku vytvoří částečnou třídu obsahující tyto deklarace prvků a tu použije jako částečnou třídu k programovanému kódu.

Příklad

K užití bude třeba znát syntaxi odkazu na soubor s programovým kódem z ASPx stránky. Název tohoto souboru je parametrem direktivy Page s názvem CodeFile a název třídy stránky, který musí být shodný s názvem částečné třídy v souboru s programovým kódem, je v parametru Inherits. Pozor na to, že v první betě se dnešní CodeFile nazývalo CompileWith a Inherits zase ClassName.

Ukázku práce CodeBeside si můžeme udělat na triviálním příkladu vložení dat do formuláře. Začneme souborem Default.aspx:

<%@ Page Language=“C#“ AutoEventWireup=“true“ CodeFile=“Default.aspx.cs“ Inherits=“_Default“ %>
<!DOCTYPE html PUBLIC „-//W3C//DTD XHTML 1.1//EN“ „http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd“>
<html xmlns=“http://www.w3.org/1999/xhtml“ >
<head runat=“server“>
   <title>Titled Page</title>
</head>
<body>
   <form id=“form1″ runat=“server“><div>
      Vložte svůj názor.<br /><br />
      Nadpis:<br />
      <asp:TextBox ID=“TextBox1″ runat=“server“></asp:TextBox><br /><br />
      Komentář:<br />
      <asp:TextBox ID=“TextBox2″ runat=“server“ Height=“160px“ TextMode=“MultiLine“ Width=“336px“></asp:TextBox><br /><br />
      <asp:Button ID=“Button1″ runat=“server“ OnClick=“Button1_Click“ Text=“Komentuji“ /><br /><br />
      <asp:Literal ID=“Literal1″ runat=“server“></asp:Literal>
   </div></form>
</body>
</html>

Následuje soubor Default.aspx.cs:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Net.Mail;
public partial class _Default : System.Web.UI.Page
{
   protected void Button1_Click(object sender, EventArgs e)
   {
      Literal1.Text = „Názor byl vzat v potaz.“;
      SmtpClient SC = new SmtpClient();
      SC.Send(„bezvyznamnyForm@dulezitaSluzba.cz“,
         „spam@autorSluzby.cz“,
         TextBox1.Text,
         TextBox2.Text);
   }
}

Zdrojový kód souboru Default.aspx mi vygeneroval program Visual Web Developer Express 2005 předtím, než spadnul při pokusu o spuštění projektu (pořád je to přece jenom pouhá betaverze). Jak vidíte, kód je XHTML validní a bude i po vygenerování obsahu serverových prvků.

Soubor se zdrojovým kódem obsahuje deklaraci částečné třídy a obsluhu události OnClick objektu tlačítka.

Shrnutí

Po mírných zmatcích zůstala hlavní výhoda pro programátory nepracující pod Visual Studiem – není třeba znovu definovat ovládací prvky v souboru s programovým kódem. Model použitý v druhé betě podle všeho bude i ve finální verzi.

Odkazy a zdroje

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět