N-lags design/Otto Knudsen 1 N-lags Design Definition Motivation.

Slides:



Advertisements
Lignende præsentationer
SPBG.  Test driven development  Unit test frameworks  MOSS TDD  Mocking  Design patterns.
Advertisements

Introduktion til ASP.NET 2 Michell Cronberg Microsoft MVP, MCAD TechTalks hos Microsoft.
SQL introduktion og basis
1 GUI Programmering i.NET WinForms. Mål “.NET supports two types of form-based apps, WinForms and WebForms. WinForms are the traditional, desktop GUI.
Drupal[.org] Open Source CMS 6/
Masterpages/Otto Knudsen 1 Master Pages  Master Pages i ASP.NET 2.0.
1 Test – bl.a. med fokus på sharepoint løsninger Automatisering af deploy og test ifm. VSTS •Kort om build jobs med Team Foundation Server •Support for.
Når en applikation går i fejl… … er det interessant, at vide noget om: Hvornår gik applikationen i fejl Hvilken applikation gik i fejl Hvad er fejlen.
Februar 2005Sprog-nyheder i C# og VB1 Captator Tlf: Henrik Lykke Nielsen Softwarearkitekt, Microsoft Regional Director for Denmark.
SMALL BUSINESS er BIG BUSINESS Tips og Tricks til Small Business Server Rico Raja marts 2006.
Microsoft Windows.NET Compact Framework Niels Hilmar Madsen Developer & Platform Strategy Group Microsoft Danmark.
C#: Data Typer. Indhold: “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different languages, to.
Sikkerhed/Otto Knudsen 1 Sikkerhed  Sikkerhed i ASP.NET  Autentifikation (Authentication)  Autorisation (Authorization)
Sikkerhed/Otto Knudsen 1 Diagnostics  Debug af web-applikationer.
B.V. Electronic Østerbro Skive GuideOnLine.
Distribueret programmering, specielt Web Services Rasmus D. Lehrmann DM
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
SQL 1 DDL og DML.
13 – Database med JDBC. 2 NOEA2009Java-kursus – JDBC JDBC JDBC er et standard bibliotek til at tilgå relational databaser API’et er en standardiseret.
Arkitektur Embedded SQL Tema Persistens
1 JavaServer Faces Copyright © Lund & Bendsen Dynamikken i JSF.
Effective Java items Orange gruppe Thuy, Janne, Mads T.P., Oliver og Sebastian.
C#: Udtryk og metoder. Indhold “With regards to programming statements and methods, C# offers what you would come to expect from a modern OOPL…” Udtryk.
Datastrukturer og Collections Oversigt og forskel imellem Jave og.net Collections library Collection interfaces ArrayList IList interface Hashtable Hashtable.
06 – Java Packages Packages og ClassPath. 2 NOEA2009Java-kursus – Packages og class path Hvad er Packages? En package er en gruppering af relaterede typer.
Item gennemgang  Item: 01 – Static factory methods  Item: 09 – Override hashCode  Item: 17 – Design & document inheritence  Item: 25 – Lists over arrays.
Arne Winther Et værdifuldt samarbejde mellem hospital og produktudvikler.
View Procedures Trigger og Function Jesper Tørresø DAB1 E07 1. november 2007.
CodeIgniter Database Brugerinput Form Validation 20101JFH.
Udvikling med Microsoft 2007 Office System Michell Cronberg Microsoft MVP, MCT, MCAD ISV Innovation Day 2006 ServerServer.
Objekter og klasser Applikationsdesign Code Namespace Value og reference typer Reference type Rasmus D. Lehrmann1.
FEN Databaser/dbAdgang11 Databaseadgang fra C#: ADO.NET (ActiveX Data Objects)
FEN Databaser/DBAdgang21 DB-adgang - Connectionless Connectionless DataAdapter DataSet.
WCF service Hostet på website x. Opret tomt web applikations projekt.
Introduktion til.NET- platformen og version 2.0 Michell Cronberg Microsoft MVP
Mød Microsoft – for udviklere & arkitekter Visual Studio, Express og Team System Niels Hilmar Madsen Microsoft
Tilstandsstyring/Otto Knudsen 1 Tilstandsstyring Motivation ViewState EventTarget, EventArgument.
Masterpages/Otto Knudsen 1 Master Pages Master Pages i ASP.NET 2.0.
Eksekvering/Otto Knudsen 1 Udrulning Publicering af en web-applikation.
Introduktion/Otto Knudsen 1 Overblik WebForms ASP.NET.
Introduktion til Access (Access, del 1)
Oprettelse af tabeller (Access, del 2)
Distribution af funktionalitet Webservice med WCF x.
Distribution af funktionalitet Webservice med WCF x.
Web service - elementer SOAP (Simple Object Access Protocol) WSDL (Web Service Description language) UDDI (Universal Description, Discovery and Integration)
Web service - elementer SOAP (Simple Object Access Protocol) WSDL (Web Service Description language) UDDI (Universal Description, Discovery and Integration)
ASP.NET Custom Web Controls Deployment. Agenda – ASP.NET Web User Controls Composite Control Rendered Custom Control Deploy en Web Applikation.
Programering af mobile enheder Windows Phone Storage.
Begreber og Redskaber 9. Plan for idag I dag: Datastrukturer Tabeller Lister, mængder, maps, grafer Hægtede lister.
14. Web-baserede Apps i.NET. 2 NOEA2009C#-kursus Objectives “Real-world applications are typically multi-tier, distributed designs involving many components.
Session Når man hoster en WCF Service på ASP.NET website, kan man bruge ASP.NET’s Session.
Gruppe sort Morten, Peter, Jesper, Spencer & Støving.
Begreber og Redskaber 5. Collections i Java 1.2 Framework: samling af datastrukturer og algoritmer som generelt værktøj. En ramme til at arbejde med søgning.
1 HMAK XMLRelationel model og XMLNOEA / PQC 2005 SQLServer og XML Hent data via URL Generering af xml –Raw –Auto –Explicit Hent data via template Evt.
Begreber og Redskaber 5. Plan for idag Overblik over klasser,objekter,nedarvning –Repetition fra Dat A/Indledende programmering –Centrale begreber om.
1 XMLRelationel model og XMLNOEA / FEN 2007 Relationelle databaser og XML Overblik. –For detaljer se PQC: sqlOgXml.ppt og SqlServerOgXml.ppt RDB-struktur.
Globaliseringsredegørelsen 24.mar. 14 Figurer fra Danmark tiltrækker for få udenlandske investeringer i Sådan ligger landet
AJAX/Otto Knudsen 1 AJAX Motivation Definition. AJAX/Otto Knudsen 2 Motivation En typisk web-applikation er synkron klienten sender en forespørgsel og.
Rapporter (Access, del 5). RHS – Informationsteknologi – Udgangspunkt Vi har oprettet en database Vi har defineret en eller flere tabeller, og.
1 USB Gennemgang af installering af USB driver til ICT. Er fortaget på Windows XP.
Introduktion til Access (Access, del 1). RHS – Informationsteknologi – Fra design til udvikling Vi ved nu, hvordan vi finder et design for en database,
1 Team Build med Team Foundation Server 2008 Konfiguration og udvidelse af build jobs Kort præsentation Hvorfor bruge Team Build Afvikling af et build.
Masterpages/Otto Knudsen 1 Navigation på webstedet Kontroller til navigation mellem siderne på webstedet.
10. Datastrukturer. 2 Nordjyllands Erhvervakademi Collections library Datastrukturer i.NET kaldes normalt Collections Findes i namespace System.Collections.
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
ADO.NET Databaser SQL Client (SQL server 7 og senere) OleDb (en række incl. jet) ODBC MySql (ekstra driver skal instaleres) Oracle (XML dataset) Samme.
Fremstilling af Simple WEB steder [ITPL] Foråret 2004
Oprettelse af tabeller (Access, del 2)
Databaseadgang fra C#:
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
Præsentationens transcript:

N-lags design/Otto Knudsen 1 N-lags Design Definition Motivation

N-lags design/Otto Knudsen 2 N-lags Design Datadrevne applikationer har typisk N > 1 lag Præsentations-, Forretnings-, Datatilgangs-, og Data-laget BusinessData AccessData StorePresentation data access DB object business "To support all security, business rules, and data processing (validation, manipulation & storage) for our particular business." [Rocky Lhotka] “Not to manage or store data, but to provide an interface between business logic & data store.” [Rocky Lhotka]

N-lags design/Otto Knudsen 3 Motivation Hvorfor N-lags design? Mange gode grunde fx: objektorienteret løsning opdeling i logiske enheder softwareudvikling i teams genbrug af forretningslogik og data på tværs af præsentationer data access DB object business Desktop App Web App

N-lags design/Otto Knudsen 4 Eksempel Lad os redesigne StudentInfo applikationen … Forretningslaget omhandler de studerende Datatilgangslaget omhandler databasen Students

N-lags design/Otto Knudsen 5 Præsentationslaget Præsentationslaget kommunikeret kun med forretningslaget: protected void Page_Load(object sender, EventArgs e) { object obj = this.Context.Items["ID"]; // Kom brugeren direkte? if (obj == null) this.Response.Redirect("Login.aspx", true /*afslut nu*/); // Hvis alt er ok... BusinessTier.Students students; BusinessTier.Student s; id = System.Convert.ToInt64(obj); students = new BusinessTier.Students(); s = students.GetStudent(id); this.tbxName.Text = string.Format("{0}, {1}", s.LastName, s.FirstName); this.tbx .Text = s. ; this.tbxGPA.Text = s.GPA.ToString("0.00"); } protected void Page_Load(object sender, EventArgs e) { object obj = this.Context.Items["ID"]; // Kom brugeren direkte? if (obj == null) this.Response.Redirect("Login.aspx", true /*afslut nu*/); // Hvis alt er ok... BusinessTier.Students students; BusinessTier.Student s; id = System.Convert.ToInt64(obj); students = new BusinessTier.Students(); s = students.GetStudent(id); this.tbxName.Text = string.Format("{0}, {1}", s.LastName, s.FirstName); this.tbx .Text = s. ; this.tbxGPA.Text = s.GPA.ToString("0.00"); }

N-lags design/Otto Knudsen 6 Forretningslaget Erklærer en Student -klasse til at repræsentere en student Erklærer en Students -klasse til at repræsentere en samling af studerende kommunikerer med datatilgangslaget vha. SQL namespace BusinessTier { public class Students { private DataAccessTier.DataAccess data; public Students() {... } public Student GetStudent(long id) { string sql = string.Format("Select * From Students Where SID={0};", id); DataSet ds = data.Select(sql); return new Student(...); } namespace BusinessTier { public class Students { private DataAccessTier.DataAccess data; public Students() {... } public Student GetStudent(long id) { string sql = string.Format("Select * From Students Where SID={0};", id); DataSet ds = data.Select(sql); return new Student(...); } namespace BusinessTier { public class Student {. } namespace BusinessTier { public class Student {. }

N-lags design/Otto Knudsen 7 Datatilgangslaget En generisk og genbrugbar klasse til eksekvering af SQL stiller metoder til rådighed til Select - og Action - forespørgsler namespace DataAccessTier { public class DataAccess {. public System.Data.DataSet Select(string sql) { // Udfører en sql-sætning og returnerer et DataSet } public int Action(string sql) { // Udfører en sql-sætning og returnerer antallet af berørte poster }. } namespace DataAccessTier { public class DataAccess {. public System.Data.DataSet Select(string sql) { // Udfører en sql-sætning og returnerer et DataSet } public int Action(string sql) { // Udfører en sql-sætning og returnerer antallet af berørte poster }. }

N-lags design/Otto Knudsen 8 N-lags Design Der findes rigtig mange forskellinge måder at designe N-lags applikationer på anvendelse af SQL til at forbinde lagene med er fleksibelt men risikofyldt mange foretrækker at anvende "stored procedures" ved datatilgang og så videre …

N-lags design/Otto Knudsen 9 Assemblies Logisk vs. fysisk design Arbejde med assemblies

N-lags design/Otto Knudsen 10 Logisk vs. fysisk design Lagdelingen udgør det logiske design Assemblies udgør det fysiske design data access DB object business App.dll Business.DLL Data.DLL komponenter eller "assemblies"

N-lags design/Otto Knudsen 11 Motivation Hvorfor oprette fysisk adskilte assemblies? assemblies kan skrives i forskellige sprog assemblies kan deles af flere programmer assemblies kan flyttes til andre maskiner assemblies kan let erstattes/opdateres.NET selv udgøres af en mængde assemblies, fx ASP.NET. App.dll Business.DLL Data.DLL DB

N-lags design/Otto Knudsen 12 Eksempel StudentInfo webapplikationen består af tre assemblies …

N-lags design/Otto Knudsen 13 Oprettelse af Assemblies Ethvert projekt i en Visual Studio solution udgør én assembly class library =>.dll File menu > Add > New Project … Bemærk: for at kunne bruge en assembly, skal der refereres til den! Project menu > Add Reference… brug.NET-fanen til kompileret kode brug Project-fanen til andre projekter

N-lags design/Otto Knudsen 14 Arbejde med flere projekter Lav først en tom solution File > New Project > Other Project Types > Visual Studio Solutions Opret en webapplikation: File > Add > New Web Site … placeres i den tomme solution, som just er oprettet Opret klassebibliotek: File > Add > New Project > Class Library… placeres også i den nyligt oprettede solution Tilføj projektreferencer …

N-lags design/Otto Knudsen 15 ADO.NET Resumé af databasetilgang i.NET

N-lags design/Otto Knudsen 16 Forespørgsler i VS 2005 VS kan åbne databaser og lade dig forespørge i dem For at teste SQL-forespøgsler, granske metadata, osv. Tools menu > Connect to Database… Vælg Datakilde m.v. — tryk OK Du kan nu arbejde via Server Explorer-vinduet og Data-menuen …

N-lags design/Otto Knudsen 17 Eksempel — Programmering med ADO.NET Indlæs alle kunderne fra databasen og vis dem i en ListBox … List customers; customers = new List ();.. // Indlæs Customers-tabellen og opret tilhørende objekter …. foreach (Customer c in customers) this.lstCustomers.Items.Add(c); List customers; customers = new List ();.. // Indlæs Customers-tabellen og opret tilhørende objekter …. foreach (Customer c in customers) this.lstCustomers.Items.Add(c); DB

N-lags design/Otto Knudsen 18 Databasetilgang - mønster Tre trin: opret og konfigurér objekter forbered og udfør SQL gennemløb data

N-lags design/Otto Knudsen 19 Overblik over objekter Datatilgang kræver flere forskellige objekter: Connection – objekt, som repræsenterer forbindelsen Command – objekt, som repræsenterer SQL-forespørgslen DataAdapter – objekt, som udtrækker data fra databasen til et DataSet DataSet – objekt, som er en beholder til tabeldata Name Price Stock Ants $ Birds $ Cats $ Dogs $ DB Command Connection DataAdapter "Table" DataSet DB engine

N-lags design/Otto Knudsen 20 (1) Opret og konfigurér objekter ADO.NET Factory klasse skjuler provider-specifikke detaljer Eksempel: opsætning af en Microsoft Access 2000 database ("Sales.mdb") using System.Data; using System.Data.Common; string provider; DbProviderFactory dbFactory; DbConnection dbConn; // Repræsenterer databasen DbCommand dbCmd; // Kommandoobjekt DbDataAdapter dbAdapter; // Indlæser data og gemmer i et DataSet DataSet ds; // Beholder til tabeldata provider = "System.Data.OleDb"; dbFactory = DbProviderFactories.GetFactory(provider); dbConn = dbFactory.CreateConnection(); dbCmd = dbFactory.CreateCommand(); dbAdapter = dbFactory.CreateDataAdapter(); ds = new DataSet(); dbCmd.Connection = dbConn; // Associér forbindelse og kommando dbAdapter.SelectCommand = dbCmd; // Associér adapter og kommando using System.Data; using System.Data.Common; string provider; DbProviderFactory dbFactory; DbConnection dbConn; // Repræsenterer databasen DbCommand dbCmd; // Kommandoobjekt DbDataAdapter dbAdapter; // Indlæser data og gemmer i et DataSet DataSet ds; // Beholder til tabeldata provider = "System.Data.OleDb"; dbFactory = DbProviderFactories.GetFactory(provider); dbConn = dbFactory.CreateConnection(); dbCmd = dbFactory.CreateCommand(); dbAdapter = dbFactory.CreateDataAdapter(); ds = new DataSet(); dbCmd.Connection = dbConn; // Associér forbindelse og kommando dbAdapter.SelectCommand = dbCmd; // Associér adapter og kommando

N-lags design/Otto Knudsen 21 (2) Forbered og udfør SQL Opret de SQL-sætninger, som skal udføres Åbn forbindelse til databasen, udfør SQL og luk forbindelsen igen! forbindelses-info er også provider-specifikt Sørg for at placere "Sales.mdb"-databasen i samme mappe som.exe-filen string sql, connection; sql = "Select * From Customers Order By LastName Asc, FirstName Asc;"; connection = string.Format("Provider={0};Data Source={1}", "Microsoft.Jet.OLEDB.4.0", "|DataDirectory|Sales.mdb"); dbConn.ConnectionString = connection; // Angiv database dbCmd.CommandText = sql; // Angiv SQL-forespørgsel dbConn.Open(); // Åbn, udfør, luk! dbAdapter.Fill(ds); dbConn.Close(); string sql, connection; sql = "Select * From Customers Order By LastName Asc, FirstName Asc;"; connection = string.Format("Provider={0};Data Source={1}", "Microsoft.Jet.OLEDB.4.0", "|DataDirectory|Sales.mdb"); dbConn.ConnectionString = connection; // Angiv database dbCmd.CommandText = sql; // Angiv SQL-forespørgsel dbConn.Open(); // Åbn, udfør, luk! dbAdapter.Fill(ds); dbConn.Close();

N-lags design/Otto Knudsen 22 (3) Gennemløb data Kopi af data findes nu i DataSet Gennemløb data Eksempel: Lav kunde-objekter og vis dem i en ListBox this.customers = new List (); foreach (DataRow row in ds.Tables["Table"].Rows) { Customer c; c = new Customer( System.Convert.ToInt64(row["CID"]), row["FirstName"].ToString(), row["LastName"].ToString(), System.Convert.ToDecimal(row["CreditLimit"]), System.Convert.ToDecimal(row["AcctBalance"]) ); this.customers.Add(c); } foreach (Customer c in customers) this.lstCustomers.Items.Add(c); this.customers = new List (); foreach (DataRow row in ds.Tables["Table"].Rows) { Customer c; c = new Customer( System.Convert.ToInt64(row["CID"]), row["FirstName"].ToString(), row["LastName"].ToString(), System.Convert.ToDecimal(row["CreditLimit"]), System.Convert.ToDecimal(row["AcctBalance"]) ); this.customers.Add(c); } foreach (Customer c in customers) this.lstCustomers.Items.Add(c);

N-lags design/Otto Knudsen 23 God programmeringsskik Sørg for at lukke forbindelsen Rapportér fejl. dbFactory = DbProviderFactories.GetFactory(provider); try { using (dbConn = dbFactory.CreateConnection()) { dbCmd = dbFactory.CreateCommand(); dbAdapter = dbFactory.CreateDataAdapter();. dbConn.Open(); dbAdapter.Fill(ds); } // Databasen lukkes automatisk } catch(Exception ex) { System.Diagnostics.Debug.WriteLine("Fejl: " + ex.Message); System.Diagnostics.Debug.WriteLine("Stack: " + ex.StackTrace); throw; }. dbFactory = DbProviderFactories.GetFactory(provider); try { using (dbConn = dbFactory.CreateConnection()) { dbCmd = dbFactory.CreateCommand(); dbAdapter = dbFactory.CreateDataAdapter();. dbConn.Open(); dbAdapter.Fill(ds); } // Databasen lukkes automatisk } catch(Exception ex) { System.Diagnostics.Debug.WriteLine("Fejl: " + ex.Message); System.Diagnostics.Debug.WriteLine("Stack: " + ex.StackTrace); throw; }

N-lags design/Otto Knudsen 24 Tilgang til andre typer databaser? Gode nyheder — ændr provider- og connection-oplysningerne! Eksempel: udtræk af kunde fra Microsoft SQL Server. provider = "System.Data.SqlClient";. connection = string.Format("Server={0};Database={1};{2}", ".", // "." = lokal server, ellers ip-adresse/alias "Sales", "Integrated Security=SSPI"); // eller "uid=?;pwd=?". provider = "System.Data.SqlClient";. connection = string.Format("Server={0};Database={1};{2}", ".", // "." = lokal server, ellers ip-adresse/alias "Sales", "Integrated Security=SSPI"); // eller "uid=?;pwd=?".

N-lags design/Otto Knudsen 25 Hvad så? Øvelse #6

N-lags design/Otto Knudsen 26 …