ASP.net : Business objecten

  1. Inleiding
  2. 2-Tier
  3. 3-Tier
  4. Oefening: online shop

Inleiding

In dit hoofdstuk leer je hoe je verschillende onderdelen van een applicatie kan scheiden. Veelal wordt gesproken over lagen of layers van een applicatie. Deze termen geven aan hoe de verschillende aspecten fysiek van elkaar worden gescheiden. Voor een ASP.net applicatie kunnen we op die manier steeds een client, een server en dikwijls een database-layer onderscheiden.

Met het begrip tier wordt wordt ook een laag aangegeven, maar wordt meestal niet als een fysieke scheidingslijn aangenomen, maar een programmatorische afsplitsing in klassen en groepen van gerateerde klassen. Het is de bedoeling dat de verschillende tiers enkel communiceren met elkaar, maar in principe niks over elkaar hoeven te weten.

Op deze manier kan je je toepassing opbouwen op een gestructureerde manier en kan je later aanpassingen doen in een van de tiers van de applicatie zonder daarvoor andere tiers te moeten manipuleren.

Je kan een toepassing opsplitsen in 2, 3 of meer lagen, algemeen spreken we over een N-Tier structuur.

Een gangbare manier om jouw toepassingen in tiers op te delen is de 3-Tier architectuur:

2-Tier applicatie

In deze toepassing maken we gebruik van twee lagen: een presentatielaag en een datalaag. We koppelen de interactie met de database los van de presentatie van de gegevens.

De gebruikte Stored Procedures:

CREATE  PROCEDURE Categorieen
AS
SELECT cat_id, categorie
FROM categorie
ORDER BY categorie

CREATE PROCEDURE ArtikelUitCategorie @CatID smallint
AS
SELECT artikel, omschrijving, verkoopprijs
FROM artikel
WHERE cat_id = @CatID
ORDER BY artikel

3-Tier

Wens je ook nog bedrijfslogica in deze toepassing te verwerken, bijvoorbeeld een korting afhankelijk van de klant, dan kan je werken met een 3-Tier logica.

In deze toepassing vullen we een ListBox met de namen van de klanten. De basis hiervoor is de Stored Procedure KlantenBasis:

Voor de eenvoud plaatsen we de eigenschap AutoPostBack van de ListBox lstCategorie op false, we voorzien een ListBox lstKlant voor de klantenlijst en een Button om de gegevens op te vragen.

CREATE PROCEDURE KlantenBasis
AS
SELECT klant_id, 
       (naam +' ' +voornaam +' (' +convert(varchar(10),klant_id,103) +')')
            as VolledigeNaam
FROM klant
ORDER BY naam

BusObj.cs
using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Configuration;

    public class BusObj
    {
        private DataObj data;

        public BusObj()
        {
            data = new DataObj(ConfigurationSettings.AppSettings["SpionString"]);
        }

        public DataView GetCategorieen()
        {
            return data.GetCategorieen();
        }

        public DataView GetKlantenBasis()
        {
            return data.GetKlantenBasis();
        }

        public DataView GetArtikelsVoorCategorie(short catid, short klantid)
        {
            DataView view = data.GetArtikelsVoorCategorie(catid);

            double korting = 0;
            if ((klantid >= 3)&&(klantid < 5))
            {
                korting = .50;
            }
            else if (klantid >= 5)
            {
                korting = 1.00;
            }
            

            for (int i=0; i<view.Count; i++)
            {
                view[i]["Verkoopprijs"] = Double.Parse(view[i]["Verkoopprijs"].ToString()) - korting;
            }

            return view;
        }
    }

DataObj.cs
	...
	public DataView GetKlantenBasis()
        {
            SqlConnection conn = new SqlConnection(_connStr);
            SqlDataAdapter da = new SqlDataAdapter("KlantenBasis", conn);
            da.SelectCommand.CommandType = CommandType.StoredProcedure;

            DataSet ds = new DataSet();
            da.Fill(ds, "KlantenBasis");

            return ds.Tables["KlantenBasis"].DefaultView;
        }

DrieTier.aspx
...
    public class DrieTier : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.ListBox lstCategorie;
        protected System.Web.UI.WebControls.ListBox lstKlant;
        protected System.Web.UI.WebControls.Button Button1;
        protected System.Web.UI.WebControls.DataGrid dgArtikel;
    
        private void Page_Load(object sender, System.EventArgs e)
        {
            if (!IsPostBack)
            {
                BusObj data = new BusObj();
                
                DataView dv = data.GetCategorieen();
                lstCategorie.DataSource = dv;
                lstCategorie.DataValueField = dv.Table.Columns[0].ColumnName;
                lstCategorie.DataTextField = dv.Table.Columns[1].ColumnName;
                lstCategorie.DataBind();

                DataView dvK = data.GetKlantenBasis();
                lstKlant.DataSource = dvK;
                lstKlant.DataValueField = dvK.Table.Columns[0].ColumnName;
                lstKlant.DataTextField = dvK.Table.Columns[1].ColumnName;
                lstKlant.DataBind();
                
            }
            
        }

        ...


        
        private void VulArtikels()
        {
            
            BusObj data = new BusObj();
            dgArtikel.DataSource = data.GetArtikelsVoorCategorie(Int16.Parse(lstCategorie.SelectedValue),Int16.Parse(lstKlant.SelectedValue));
            dgArtikel.DataBind();
        }

        private void Button1_Click(object sender, System.EventArgs e)
        {
            VulArtikels();
        }
    }
}


Oefeningen

Download de gegevens voor de Spyshop:

Figuren (opgepast, deze figuren zijn beschermd door copyright, enkel voor leerdoeleinden thuis gebruiken)
Om deze figuren correct te gebruiken pas je in de tabel CMRC_Products de ProductImage aan zodanig dat deze gelijk is aan het ProductId gevolgd door '.gif'. Anders krijg je steeds een sample-image te zien.

De SQL-Server 2000 mdf

Spyshop - opgave

Meer tutorials:
leer ook: html | xhtml | css | asp | asp.net | c# | ado.net | linq | ajax | java | javascript
Valid HTML 4.01! Valid CSS! © - Cursusweb