Tvorba informačních systémů 1/50 Tvorba informačních systémů Michal Krátký, Miroslav Beneš Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2008/2009
Tvorba informačních systémů 2/50 Obsah Obsah ASP (ActiveServer Pages) ASP.NET Struktura ASP.NET: Web Forms, Controls Uživatelské řídící komponenty Příklad: objektově-relační mapování
Tvorba informačních systémů 3/50 ASP (Active Server Pages) Historie ASP (Active Server Pages) Skriptovací technologie na straně serveru Značkovací jazyk HTML, WML. Interpretovaný skript JScript, VBScript, JavaScript. Objektový model (Application, Server, Request, Response, Session+ COM komponenty). Chyby v návrhu Nedostatečné zapouzdření omezené opakované použití. Obtížné přizpůsobení různým klientům. Nedostatečná typová kontrola. Opakovaná interpretace všech požadavků. Obtížné uchováváni stavu formuláře.
Tvorba informačních systémů 4/50 ASP.NET ASP.NET Vývoj webových aplikací v libovolném jazyce podporovaném platformou.net. Kompilace aplikačního kódu. Přístup k rozsáhlým knihovnám.net (.NET classes). Jmenný prostor: System.Web.*. Web Forms. XML Web Services.
Tvorba informačních systémů 5/50 ASP.NET Vývojové nástroje MS VisualStudio.NET 2005/2008 Integrované vývojové prostředí. Komerční produkt. Vlastní WWW server. MS VisualStudio.NET (2003) + IIS. Integrované vývojové prostředí. Komerční produkt. MS.NET Framework + IIS Pouze řádkové překladače. ASP.NET Web MatrixProject www.asp.net/webmatrix/. Volně dostupné integrované prostředí. Vlastní WWW server.
Tvorba informačních systémů 6/50 ASP.NET Vývojové nástroje
Tvorba informačních systémů 7/50 ASP.NET Struktura ASP.NET namespace: System.Web.UI class Control - zapouzdřuje společné funkce prvků uživatelského rozhraní Controls, ID, Parent, EnableViewState, Visible, Context, ViewState,... class Page - reprezentuje webovou stránku Application, Request, Response, Server, Session, Cache, ErrorPage, IsPostBack, IsValid, Trace, Validators,... class UserControl bázová třída pro uživatelem definované komponenty.
Tvorba informačních systémů 8/50 ASP.NET Web Forms ASP.NET Web Forms Vizualní aplikační komponenty. Značkovací jazyk HTML/WML. XML znaky pro řídící prvky. Stránka ASP.NET Web Forms - soubor.aspx. Blok: <% %>. Na rozdíl od ASP není blok interpretován, ale kompilován. Programová logika. Zpracování událostí. Libovolný podporovaný jazyk. Součást souboru.aspx (Code Inline) nebo kód na pozadí (Code Behind) v samostatném souboru.
Tvorba informačních systémů 9/50 ASP.NET Controls ASP.NET Controls (řídící komponenty) Standard/Server Controls - Label, CheckBox,..., Data Controls, Validation Controls, Login Controls, Navigation Controls - Menu, TreeView,..., WebParts Controls, HTML Controls - prvky HTML, User Controls - uživatelské značky.
Tvorba informačních systémů 10/50 ASP.NET Controls ASP.NET Server Controls Programovatelné objekty na straně serveru, typicky UI elementy na stránce (např. textové pole). Objekty se podílejí na vytváření stránky, mohou mít vlastní výstup. Jednoduché přizpůsobení potřebám programátora. Vlastnosti nastavujeme deklarativně (atributy značek) nebo programově (v kódu).
Tvorba informačních systémů 11/50 ASP.NET Controls Práce se Server Controls Server controls (SC) jsou se stránkou identifikovány pomocí elementu obsahujícího atribut runat="server". Každý SC na stránce může mít přiřazeno jedinečné označení pomocí atributu id. Atribut id je pak použit při programové manipulaci s konkrétním SC. Ošetření událostí jméno události jako hodnota atributu. Např. asp:button obsahuje atribut Onclick. Implementace metody (události) se jménem shodným s hodnotou atributu.
Tvorba informačních systémů 12/50 ASP.NET Controls Server Controls namespace: System.Web.UI.WebControls AdRotator BulletedList Button Calendar CheckBox CheckBoxList DropDownList FileUpload HiddenField HyperLink Image ImageButton ImageMap Label LinkButton ListBox Literal MultiView and View Panel PlaceHolder RadioButton RadioButtonList Substitution Table TextBox Wizard Xml
Tvorba informačních systémů 13/50 ASP.NET Controls Příklad - Server Controls 1/3
Tvorba informačních systémů 14/50 ASP.NET Controls Příklad - Server Controls, servercontrols.aspx 2/3 1 <html> 2 <head> 3 < l i n k r e l = " s t y l e s h e e t " href= " i n t r o. css " > 4 < / head> 5 < sc ript language= "C# " runat =server > 6 void SubmitBtn_Click ( Object sender, EventArgs e ) { 7 Message. Text = " Hi " + H t t p U t i l i t y. HtmlEncode ( 8 Name. Text ) + ", you selected : " + 9 Category. SelectedItem ; 10 } 11 < / s c r i p t > 12 <body> 13 <center> 14 <form i d = " Form1 " action= " s e r v e r c o n t r o l s. aspx " 15 method= " post " runat=" server " > Řádky 5-10: Implementace metody volané na serveru po stisku tlačítka na formuláři.
Tvorba informačních systémů 15/50 ASP.NET Controls Příklad - Server Controls, servercontrols.aspx 3/3 1 <h3>name : <asp : textbox i d = "Name" runat=" server " / > 2 Category : 3 <asp : dropdownlist i d = " Category " runat=server> 4 <asp : l i s t i t e m >Student< / asp : l i s t i t e m > 5 <asp : l i s t i t e m >Developer< / asp : l i s t i t e m > 6 <asp : l i s t i t e m > S c i e n t e r < / asp : l i s t i t e m > 7 < / asp : dropdownlist> 8 < / h3> 9 <asp : button ID= " Button1 " text=" Lookup " 10 OnClick= " SubmitBtn_Click " runat = " server " / > 11 <p> 12 <asp : l a b e l i d = " Message " runat=" server " / > 13 < / form>< / center> 14 < / body> 15 < / html> Řádky 9-10: Po stisku tlačítka bude na serveru zavolána metoda SubmitBtn_Click
Tvorba informačních systémů 16/50 Code Inline vs. Code Behind Code Inline vs. Code Behind Code Inline - kód v jednom souboru Code Behind - kód na pozadí, ve více souborech.
Tvorba informačních systémů 17/50 Code Inline vs. Code Behind Příklad - Code Inline, inline.aspx 1/2 <%@ page language= "C# " %> < script runat=" server " > void Button1_Click ( o b j e c t sender, EventArgs e ) { Label1. Text = " Hello " + TextBox1. Text ; } < / script> <html> <head> < t i t l e >ASP.NET I n l i n e Pages< / t i t l e > < / head>
Tvorba informačních systémů 18/50 Code Inline vs. Code Behind Příklad - Code Inline, inline.aspx 2/2 <body> <form i d = " Form1 " runat=" server " > <h1>welcome to ASP.NET 2. 0! < / h1> <b>enter Your Name: < / b> <asp : TextBox ID= " TextBox1 " Runat= " server " / > <asp : Button ID= " Button1 " Text= " C l i c k Me" OnClick= " Button1_Click " Runat= " server " / > <br / > <br / > <asp : Label ID= " Label1 " Text= " Hello " Runat= " server " / > < / form> < / body> < / html>
Tvorba informačních systémů 19/50 Code Inline vs. Code Behind Příklad - Code Behind, behind.aspx 1/3 <%@ page language= "C# " CodeFile= " behind. aspx. cs " I n h e r i t s = " behind_aspx " %> <html> <head> < t i t l e >ASP.NET CodeBehind Pages< / t i t l e > < / head> <body> <form i d = " Form1 " runat=" server " > <h1>welcome to ASP.NET 2. 0! < / h1> <b>enter Your Name: < / b> <asp : TextBox ID= " TextBox1 " Runat= " server " / > <asp : Button ID= " Button1 " Text= " C l i c k Me" OnClick= " Button1_Click " Runat= " server " / >
Tvorba informačních systémů 20/50 Code Inline vs. Code Behind Příklad - Code Behind, behind.aspx 2/3 <br / > <br / > <asp : Label ID= " Label1 " Text= " Hello " Runat= " server " / > < / form> < / body> < / html>
Tvorba informačních systémů 21/50 Code Inline vs. Code Behind Příklad - Code Behind, behind.aspx.cs 3/3 using System ; p u b l i c p a r t i a l class behind_aspx : System.Web. UI. Page { protected void Button1_Click ( o b j e c t sender, EventArgs e ) { Label1. Text = " Hello " + TextBox1. Text ; } }
Tvorba informačních systémů 22/50 Code Directory Sdílení kódu mezi stránkami Adresář kódu (Code Directory) Adresář App_Code. Možné podadresáře App_Code musí být registrovány v souboru Web.config. Global Assembly Cache.NET komponenty je nutné opět registrovat v souboru Web.config.
Tvorba informačních systémů 23/50 Code Directory Příklad - Code Directory, CodeFolder.aspx 1/3 <%@ page language= "C# " %> < script runat=" server " > void Button1_Click ( o b j e c t sender, EventArgs e ) { CustomClass c = new CustomClass ( ) ; Label1. Text = c. GetMessage ( TextBox1. Text ) ; } < / script> <html> <head> < t i t l e >ASP.NET I n l i n e Pages< / t i t l e > < / head> <body>
Tvorba informačních systémů 24/50 Code Directory Příklad - Code Directory, CodeFolder.aspx 2/3 <form i d = " Form1 " runat=" server " > <h1>welcome to ASP.NET 2. 0! < / h1> <b>enter Your Name: < / b> <asp : TextBox ID= " TextBox1 " Runat= " server " / > <asp : Button ID= " Button1 " Text= " C l i c k Me" OnClick= " Button1_Click " Runat= " server " / > <br / > <br / > <asp : Label ID= " Label1 " Text= " Hello " Runat= " server " / > < / form> < / body> < / html>
Tvorba informačních systémů 25/50 Code Directory Příklad - Code Directory, App_Code/CustomClass.cs 3/3 using System ; p u b l i c class CustomClass { p u b l i c S t r i n g GetMessage ( S t r i n g i n p u t ) { r e t u r n " Hello " + i n p u t ; } }
Tvorba informačních systémů 26/50 User Controls Příklad - User Controls, usercontrols.aspx 1/2 Podobně jako v JSP, můžeme i v ASP.NET vytvářet vlastní uživatelské značky. <%@ Page Language= "C# " %> <%@ Register TagPrefix=" tuo " TagName= " message " Src= " u s e r c o n t r o l s. ascx " %> <html> <body style=" f o n t : 10 pt verdana " > <h3>a Simple User Control< / h3> <tuo : message Text= " Hello World! " Color= " blue " runat=" server " i d = " Message " / > < / body> < / html>
Tvorba informačních systémů 27/50 User Controls Příklad - User Controls, usercontrols.ascx 2/2 < script language= "C# " runat=" server " > p u b l i c S t r i n g Color ; p u b l i c S t r i n g Text ; < / script> <span i d = " Message " style=" c o l o r :<%=Color%>" > <%=Text%>< / span>
Tvorba informačních systémů 28/50 Příklad, práce s databází Příklad, práce s databází 1/3 <%@ Page Language= "VB" %> <html> <head runat=" server " > < t i t l e >GridView Bound to SqlDataSource< / t i t l e > < / head> <body> <form i d = " form1 " runat=" server " > <asp : GridView ID= " GridView1 " DataSourceID= " SqlDataSource1 " runat=" server " / >
Tvorba informačních systémů 29/50 Příklad, práce s databází Příklad, práce s databází 2/3 <asp : SqlDataSource ID= " SqlDataSource1 " runat=" server " SelectCommand= "SELECT [ au_id ], [ au_lname ], [ au_fname ], [ phone ], [ address ], [ c i t y ], [ s t a t e ], [ z i p ], [ c o n t r a c t ] FROM [ authors ] " ConnectionString="<%$ ConnectionStrings : Pubs %>" / > < / form> < / body> < / html> Nevhodné: Ve view se objevuje SQL příkaz!
Tvorba informačních systémů 30/50 Příklad, práce s databází Příklad, práce s databází 3/3
Tvorba informačních systémů 31/50 INSERT INTO FileType Values ( pdf, a p p l i c a t i o n / pdf ) ;... INSERT INTO PaperVersion Values ( 2/12/2008, 1 ) ;... Příklad, ORM Příklad, ORM, create.sql Evidujeme informace o verzích článků a souborech ve kterých byl článek zaslán. CREATE TABLE PaperVersion ( i d INT NOT NULL PRIMARY KEY IDENTITY, date DATETIME NOT NULL, i d F i l e T y p e INT REFERENCES FileType ) ; CREATE INDEX PaperVersion_ id ON PaperVersion ( i d ) ; CREATE TABLE FileType ( i d INT NOT NULL PRIMARY KEY IDENTITY, extension VARCHAR( 5 ) NOT NULL, mime VARCHAR( 2 0 ) NOT NULL ) ; CREATE INDEX FileType_id ON FileType ( i d ) ;
Tvorba informačních systémů 32/50 Příklad, ORM Příklad, ORM
Tvorba informačních systémů 33/50 Příklad, ORM Příklad ORM, TableRelForm.aspx 1/2 1... 2 <html xmlns= " h t t p : / / www. w3. org /1999/ xhtml " > 3 <head runat=" server " >< t i t l e >AspNetExampleApp< / t i t l e >< / head> 4 <body> 5 <form i d = " form1 " runat=" server " ><div> 6 <asp : GridView ID= " GridView1 " runat = " server " AllowPaging= " True " 7 AutoGenerateColumns= " False " DataSourceID= " ODS_PaperVersion " > 8 <Columns> 9 <asp : BoundField DataField=" Id " HeaderText= " Id " 10 SortExpression= " Id " / > 11 <asp : BoundField DataField=" Date " HeaderText= " Date " 12 SortExpression= " Date " / > 13 <asp : BoundField DataField=" IdFileType " HeaderText= " IdFileType " 14 SortExpression= " IdFileType " / > Řádky 9-11: Přiřazení datového zdroje ke komponentě uživatelského rozhraní. Řádky 13-18: Definice jednotlivých sloupců tabulky atribut DataField obsahuje název atributu doménového objektu.
Tvorba informačních systémů 34/50 Příklad, ORM Příklad ORM, TableRelForm.aspx 2/2 1 <asp : TemplateField HeaderText= " FileType " SortExpression= " FileType " > 2 <ItemTemplate> 3 <asp : Label ID= " LabelFileType " runat = " server " 4 Text= <%# Eval ( " FileType. Extension " ) %> >< / asp : Label> 5 < / ItemTemplate> 6 < / asp : TemplateField> 7 < / Columns>< / asp : GridView>< / div> 8 <asp : ObjectDataSource ID= " ODS_PaperVersion " runat = " server " 9 SelectMethod= " Select " 10 TypeName= " AspNetExampleApp. Database. PaperVersionTable " > 11 < / asp : ObjectDataSource> 12 < / form>< / body>< / html> Řádky 1-6: Definice sloupce, který obsahuje hodnotu atributu záznamu s tabulky na kterou odkazuje cizí klíč idfiletype. Řádky 8-11: Definice datové zdroje GridView je naplněn kolekcí instancí získaných voláním metody Select třídy PaperVersionTable.
Tvorba informačních systémů 35/50 Příklad, ORM Příklad ORM, PaperVersion 1/2 Doménový objekt reprezentující záznam z tabulky PaperVersion. 1 using System ; 2 using System. C o l l e c t i o n s. Generic ; 3 using System. Text ; 4 5 namespace AspNetExampleApp. Database { 6 public class PaperVersion { 7 public s t a t i c S t r i n g ATTR_id = " i d " ; 8 public s t a t i c S t r i n g ATTR_date = " date " ; 9 public s t a t i c S t r i n g ATTR_idFileType = " i d F i l e T y p e " ; 10 11 private i n t mid ; 12 private DateTime mdate ; 13 private i n t midfiletype = 0 ; 14 private FileType mfiletype ; Řádek 14: Implementace vazby 1:1. Zde uložíme instanci na kterou odkazuje cizí klíč idfiletype.
Tvorba informačních systémů 36/50 Příklad, ORM Příklad ORM, PaperVersion 2/2 1 public i n t Id 2 { 3 get 4 { 5 return mid ; 6 } 7 set 8 { 9 mid = value ; 10 } 11 } 12 13 / /... set / get metody pro vsechny a t r i b u t y 14 } 15 } Pak můžeme psát: instance.id=...; popř. int myid = instance.id;
Tvorba informačních systémů 37/50 Příklad, ORM Příklad ORM, PaperVersionTable 1/4 Třída obsahuje metody reprezentující operace nad tabulkou PaperVersion.... namespace AspNetExampleApp. Database { public class PaperVersionTable : DbTable { public s t a t i c S t r i n g TABLE_NAME = " PaperVersion " ; public S t r i n g SQL_SELECT = "SELECT id, date, i d F i l e T y p e from " + TABLE_NAME + " ORDER BY i d ; " ; public PaperVersionTable ( ) : base (TABLE_NAME) { } / / I n s e r t the record public i n t I n s e r t ( PaperVersion paperversion ) { /... / } / / Update the record public i n t Update ( PaperVersion paperversion ) { /... / }
Tvorba informačních systémů 38/50 Příklad, ORM Příklad ORM, PaperVersionTable 2/4 1 / / Delete the record. 2 public i n t Delete ( PaperVersion paperversion ) 3 { /... / } 4 5 / / Select records 6 public C o l l e c t i o n <PaperVersion > Select ( ) 7 { 8 SqlCommand command = mdatabase. CreateCommand ( ) ; 9 command. CommandText = SQL_SELECT; 10 SqlDataReader reader = mdatabase. Select ( command ) ; 11 12 C o l l e c t i o n <PaperVersion > paperversions = Read ( reader ) ; 13 reader. Close ( ) ; 14 mdatabase. Close ( ) ; 15 return paperversions ; 16 } Řádky 8-10: Připravení dotazu a odeslání na databázi
Tvorba informačních systémů 39/50 Příklad, ORM Příklad ORM, PaperVersionTable 3/4 1 public C o l l e c t i o n <PaperVersion > Read ( SqlDataReader reader ) 2 { 3 C o l l e c t i o n <PaperVersion > paperversions = 4 new C o l l e c t i o n <PaperVersion > ( ) ; 5 while ( reader. Read ( ) ) { 6 PaperVersion paperversion = new PaperVersion ( ) ; 7 paperversion. Id = reader. GetInt32 ( 0 ) ; 8 paperversion. Date = reader. GetDateTime ( 1 ) ; 9 10 i f (! reader. IsDBNull ( 2 ) ) { 11 paperversion. IdFileType = reader. GetInt32 ( 2 ) ; 12 paperversion. FileType = 13 mdatabase. FileTypeTable. Select ( paperversion. IdFileType ) ; 14 } Řádky 10-14: Hodnota cizího klíče není NULL? Vyber záznam z tabulky FileType.
Tvorba informačních systémů 40/50 Příklad, ORM Příklad ORM, PaperVersionTable 4/4 1 else { 2 paperversion. IdFileType = 1; 3 paperversion. FileType = n u l l ; 4 } 5 paperversions. Add ( paperversion ) ; 6 } 7 return paperversions ; 8 } Řádky 1-4: Hodnota cizího klíče je NULL? Nastav null. Řádek 5: Přidáme načtený záznam do kolekce instancí.
Tvorba informačních systémů 41/50 Příklad, ORM Příklad ORM, DbTable 1 / /... 2 namespace AspNetExampleApp. Database { 3 public class DbTable { 4 i n t e r n a l s t a t i c Database mdatabase ; 5 protected S t r i n g mtablename ; 6 7 s t a t i c DbTable ( ) { 8 mdatabase = new Database ( ) ; 9 } 10 11 public DbTable ( S t r i n g tablename ) { 12 mtablename = tablename ; 13 } 14 15 / /... 16 } } Proměnná mdatabase je statická, bude tedy sdílena všemi třídami reprezentující tabulky. Platnost této instance skončí restartem webového serveru (IIS).
Tvorba informačních systémů 42/50 Příklad, ORM Příklad ORM, Database 1/6 1... 2 namespace AspNetExampleApp. Database { 3 { 4 public class Database { 5 / / p r i v a t e s t a t i c i n t TIMEOUT = 2 4 0 ; 6 private SqlConnection mconnection = new SqlConnection ( ) ; 7 u i n t mconnectnumber = 0 ; 8 bool mtransactionflag = false ; 9 SqlTransaction msqltransaction ; 10 private S t r i n g mlanguage = " en " ; 11 12 public PaperVersionTable PaperVersionTable ; 13 public FileTypeTable FileTypeTable ; Řádek 6: Všechny třídy reprezentující tabulky budou sdílet jedno spojení s databází. ASP.NET sám osobě používá pool - spojení se tedy nebude otevírat fyzicky. Řádek 12-13: Instance tříd reprezentující tabulky.
Tvorba informačních systémů 43/50 Příklad, ORM Příklad ORM, Database 2/6 1 public bool Connect ( ) 2 { 3 bool r e t = true ; 4 5 i f ( mconnection. State! = System. Data. ConnectionState. Open) 6 { 7 r e t = Connect ( WebConfigurationManager. 8 ConnectionStrings [ " ConnectionString " ]. ConnectionString ) ; 9 } 10 else i f (! mtransactionflag ) { 11 mconnectnumber++; 12 } 13 14 return r e t ; 15 } Řádek 7: V metodě connect se volá mconnection.open(); Řádek 11: Spojení je již aktivní? Pak pouze inkrementuj počet požadovaných spojení.
Tvorba informačních systémů 44/50 Příklad, ORM Příklad ORM, Database 3/6 1 public bool Close ( ) 2 { 3 i f (! mtransactionflag ) 4 { 5 i f ( mconnectnumber > 0 ) 6 { 7 mconnectnumber ; 8 } 9 } 10 11 i f ( mconnectnumber = = 0 ) 12 { 13 mconnection. Close ( ) ; 14 } 15 return true ; 16 } Řádky 11-14: Jakmile počet požadavků na spojení klesne na nula, můžeme zavolat close.
Tvorba informačních systémů 45/50 Příklad, ORM Příklad ORM, Database 4/6 1 public void BeginTransaction ( ) { 2 Connect ( ) ; 3 msqltransaction = mconnection. BeginTransaction ( 4 I s o l a t i o n L e v e l. S e r i a l i z a b l e ) ; 5 mtransactionflag = true ; 6 } 7 public void EndTransaction ( ) { 8 msqltransaction. Commit ( ) ; 9 mtransactionflag = false ; 10 mconnection. Close ( ) ; 11 Close ( ) ; 12 } Problém: Některé verze ADO.NET vyhodí výjimku pokud voláme BeginTransaction uvnitř jiné transakce. Musíme tedy zavést podobný systém jako v případě proměnné počítající počet požadavků na připojení mconnectnumber: int mtransactionnumber bude tedy obsahovat počet požadavků na začátek transakce.
Tvorba informačních systémů 46/50 Příklad, ORM Příklad ORM, Database 5/6 1 public SqlCommand CreateCommand ( ) { 2 SqlCommand command ; 3 i f ( mtransactionflag ) { 4 command = new SqlCommand ( n u l l, mconnection, msqltransaction ) ; 5 } 6 else { 7 command = new SqlCommand ( n u l l, mconnection ) ; 8 } 9 return command ; 10 } Před voláním každé operace s databází (Select, Insert apod.) volá třída reprezentující tabulku tuto metodu. Všichni klienti aplikace tedy sdílí connection, ale vytváří vlastní command. Poznámka: Je nutné provést zátěžové testy zda je toto řešení rovnocenné s řešením vytvářející pool spojení (v tomto případě by mconnection bylo pole připojení).
Tvorba informačních systémů 47/50 Příklad, ORM Příklad ORM, Database 6/6 1 public i n t I n s e r t ( SqlCommand command ) { 2 i n t rownumber = 0 ; 3 t r y { 4 Connect ( ) ; 5 command. Prepare ( ) ; 6 rownumber = command. ExecuteNonQuery ( ) ; 7 } 8 catch ( Exception e ) { 9 throw e ; 10 } 11 f i n a l l y { 12 Close ( ) ; 13 } 14 return rownumber ; 15 } 16 public SqlDataReader Select ( SqlCommand command ) { 17 Connect ( ) ; 18 command. Prepare ( ) ; 19 SqlDataReader sqlreader = command. ExecuteReader ( ) ; 20 return sqlreader ; 21 } 22 / /... D a l s i metody
Tvorba informačních systémů 48/50 Příklad, ORM Příklad, Diskuse Reprezentace databáze jako globální objekt se sdílenou instancí SqlConnection vede k těmto důsledkům: Musím zavést počítání požadavků na připojení a začátek transakce pro korektní uzavírání spojení. Musíme uzavírat části kódu, které pracují s těmito proměnnými, pro ostatní vlákna. Pokud Database odladíme, získáme transparentní objektové rozhraní k databázi. Alternativní řešení pak mohou vypadat takto: Objekt představující rozhraní k databázi popř. instanci SqlConnection vytváříme lokálně pro každý dotaz, popř. tuto instanci získáme jako parametr z metody, která otevírá transakci.
Tvorba informačních systémů 49/50 Příklad, ORM Další Detail záznamu s možností editace DetailView. Definice rolí a přiřazení viditelnosti položek menu a formulářů pro jednotlivé role. Společné vlastnosti stránky (záhlaví, zápatí) jsou shrnuty do tzv. MasterPage.
Tvorba informačních systémů 50/50 Příklad, ORM Reference Kurz na katedře informatiky: Vývoj webových aplikací http://dotnet.jku.at/courses/dotnet/ http://www.asp.net Tutoriály http://www.asp.net/quickstart/ aspnet/default.aspx.