You are on page 1of 21

Kin trc 3 layer

Kin trc 3 Layer: Hng tip cn ca phn mm l chia nh phn mn thnh cc tng, mi tng c vai tr c trng ring thun tin cho vic dng li, sn sng cho vic m rng h thng,d bo tr, c bit l d dng trong vic phn chia cng vic cho cc thnh vin trong nhmbao gm: + Presentation Layer(gui): tng ny giao tip vi ngi dng thu thp d liu v hin th kt qu thng qua giao din, tng ny s dng cc dch v do tng business cung cp + Bussiness Layer(bus): tng ny x l nghip v chnh ca h thng s dng cc dch v do tng Data cung cp v cung cp cc dch v cho tng Presentation + Datalayer(dao): tng ny chu trch nhim lu tr v x l d liu nh (insert, update, delete,) Tt c cc tng ny trao i d liu thng qua Data Transfer Object (dto)

Lp trnh theo M hnh 3 lp


ng ngy: Ch Nht, 08/04/2012 12:00 AM Lt xem: 2192

Khi bn mi tip xc vi Windows Form v ADO.NET, vic lp trnh bt u tr ln phc tp khi d n ln dn. Bi vy d qun l cc thnh phn ca h thng, cng nh khng b nh hng bi cc thay i, ngi ta hay nhm cc thnh phn c cng chc nng li vi nhau v phn chia trch nhim cho tng nhm cng vic khng b chng cho v nh hng ln nhau. Mt trong nhng m hnh lp trnh nh vy l M hnh 3 lp (Three Layers). Trong bi vit ny khng ti khng tham vng trnh by li chi tit m hnh thit k ng dng 3 lp m ch tm tt ngn gn li nhng im chnh ca n m ti nghin cu, tham kho t nhiu ngun khc nhau. Sau ti gi ti cc bn mt s Links, Book lin quan n m hnh 3 lp. V cui bi vit l Link download mt ng dng ti vit Demo theo m hnh 3 lp vi Windows Form v ADO.NET - ng dng qun l bn sch - BookShop. M hnh 3 lp c cu thnh t: Presentation Layers, Business Layers, v Data Layers. Cc lp ny s giao tip vi nhau thng qua cc dch v (services) m mi lp cung cp to nn ng dng, lp ny cng khng cn bit bn trong lp kia lm g m ch cn bit lp kia cung cp dch v g cho mnh v s dng n m thi.

Kin trc m hnh 3 lp By gi ti s m t tm tt v 3 lp nh sau: 1. Presentation Layers

Lp ny lm nhim v giao tip vi ngi dng cui thu thp d liu v hin th kt qu/d liu thng qua cc thnh phn trong giao din ngi s dng. Lp ny s s dng cc dch v do lp Business Logic cung cp. Trong .NET th bn c th dng Windows Forms, ASP.NET hay Mobile Forms hin thc lp ny. Trong lp ny c 2 thnh phn chnh l User Interface Components v User Interface Process Components.

UI Components: l nhng phn t chu trch nhim thu thp v hin th thng tin cho ngi dng cui. Trong ASP.NET th nhng thnh phn ny c th l cc TextBox, cc Button, DataGrid UI Process Components: l thnh phn chu trch nhim qun l cc qui trnh chuyn i gia cc UI Components. V d chu trch nhim qun l cc mn hnh nhp d liu trong mt lot cc thao tc nh trc nh cc bc trong mt Wizard Lu : Lp ny khng nn s dng trc tip cc dch v ca lp Data Access m nn s dng thng qua cc dch v ca lp Business Logic v khi bn s dng trc tip nh vy, bn c th b qua cc rng buc, cc logic nghip v m ng dng cn phi c. V hn na nu s dng nh vy th u cn n 3 lp phi khng bn? 2. Business Logic Layer

Lp ny thc hin cc nghip v chnh ca h thng, s dng cc dch v do lp Data Access cung cp, v cung cp cc dch v cho lp Presentation. Lp ny cng c th s dng cc dch v ca cc nh cung cp th 3 thc hin cng vic ca mnh.

Trong lp ny c cc thnh phn chnh l Business Components, Business Entities v Service Interface.

Service Interface: l giao din lp trnh m lp ny cung cp cho lpPresentation s dng. Lp Presentation ch cn bit cc dch v thng qua giao din ny m khng cn phi quan tm n bn trong lp ny c hin thc nh th no. Business Entities: l nhng thc th m t nhng i tng thng tin m h thng x l. Cc Business Entities ny cng c dng trao i thng tin gia lp Presentation v lp Data Layers. Business Components: l nhng thnh phn chnh thc hin cc dch v m Service Interface cung cp, chu trch nhim kim tra cc rng buc logic (constraints), cc qui tc nghip v (Business Rules), s dng cc dch v bn ngoi khc thc hin cc yu cu ca ng dng. 3. Data Layers

Lp ny thc hin cc nghip v lin quan n lu tr v truy xut d liu ca ng dng. Thng lp ny s s dng cc dch v ca cc h qun tr c s d liu nh SQL Server, Oracle, thc hin

nhim v ca mnh. Trong lp ny c cc thnh phn chnh l Data Access Logic, Data Sources, Servive Agents).

Data Access Logic Components (DAL) l thnh phn chnh chu trch nhim lu tr vo v truy xut d liu t cc ngun d liu Data Sources nh RDMBS, XML, File systems. Trong .NET Cc DAL ny thng c hin thc bng cch s dng th vin ADO.NET giao tip vi cc h c s d liu hoc s dng cc O/R Mapping Frameworks thc hin vic nh x cc i tng trong b nh thnh d liu lu tr trong CSDL. Chng ta s tm hiu cc th vin O/R Mapping ny trong mt bi vit khc. Service Agents: l nhng thnh phn tr gip vic truy xut cc dch v bn ngoi mt cch d dng v n gin nh truy xut cc dch v ni ti. Cc bn tm hiu qua cc c im ca tng lp trong m hnh 3 lp. y l nhng kin thc tm tt v 3 lp, bn no mun tm hiu k c th tham kho cc bi vit do chnh cc chuyn gia ca Microsoft vit ln: http://msdn.microsoft.com/en-us/library/ff648105.aspx

http://msdn.microsoft.com/en-us/library/ee658109.aspx Hoc bn c th Download cun sch Application Architecture for .NET: Designing Applications and Services ca Microsoft. y l cun sch rt hu ch v m t rt chi tit v thit k ng dng theo m hnh 3 lp. Tuy nhin ti liu ny l Ting Anh. Hi vng khng qu kh khn vi cc bn ang am m Cng ngh. Ti bui Seminar gn y, ti cng phn tch cho cc bn cch thit k mt d n Windows Forms theo m hnh 3 lp. cc bn c bit n c rt nhiu cch t tn cho cc thnh phn ca 3 lp nh: Cch 1: GUI, BUS, DAL Cch 2: GUI, BLL, DAO, DTO Cch 3: Presentation, BLL, DAL .. Vy la chn cch no l ng!? khng hn l iu quan trng m quan trng hn l bn bit cch vit, vit ng bn cht ca tng lp. Cch chia d n trong ng dng demo BookShop ca ti cng ch l 1 trong s rt nhiu cch. Hi vng cng l mt cch cc bn tham kho.

Xy dng Chng trnh C# theo m hnh 3 lp


Three_tier_Architecture_src.zip (17.5K)
Li ti: 724

I> Nhng Ch Dn Trong mc ny chng ta s tho lun v xy dng mt chng trnh C# thc thi theo m hnh 3 lp v mt ngi dng o s dng c s d liu MS Access . Trong mc ny Ti th thc thi nhng thnh phn nh c th dng li (reusable) bo v ngi dng trong vic xy dng theo 3 lp . Mc ny s ni cho ta bit lm th no thm (add) , cp nhp (update), v tm kim chi tit ngi dng . II> Nn tng : bt u chng ta s tho lun v 1 vn nh s b v l thuyt ca vic xy dng m hnh 3 lp . Ti s i qua mt cch vn tt bn bit ci g gi l m hnh 3 lp v nhng thun li khi bn dng n . Ci g xy dng mt m hnh 3 lp : M hnh 3 lp l kin trc kiu client - server trong n s dng giao din ngi dng , qu trnh din

bin , ct gi v truy vp d liu ngi pht trin bo v nhng modules (b phn tho ri c) c lp hoc nhiu nn ring r . V c bn mt chng trnh c 3 lp th tng lp s lm nhng nhim v sau : + Lp 1 ==> Gii thiu lp , lp GUI + Lp 2 ==> i tng ca lp ny l cc nhim v trong chng trnh , nhng lp nhim v mang tnh logic . + Lp 3 ==> Lp truy cp d liu . y lp c th pht trin v tch ring ra kim tra . Ci g cn chia lp ra lm 3 lp ? Vic chia giao din ngi dng t nhim v mang tnh logic v truy cp c s d liu c nhiu thun li . Mt vi thun li ta c th thy pha di . * C th dng li cc lp .Cho php chng ta c mt module thm , cp nhp , xo v tm kim ngi dng trong h thng . Nu nh nhng thnh phn ny c kim tra v pht trin th chng ta c th dng li n trong bt c project no tng t . * Ta c th thay i h thng mt cch d dng . Nu y cc lp ca chng ta c nhng thay i nh th chng ta cng khng cn phi ci t li chng trnh ca chng ta trn my ca ngi dng (Dng nh cp nhp phin bn mi) . Nu s thay i trong khong t 10 % n 15% th bn ch cn cp nhp li cc lp ny . * C nhng hm ring r trong server cho php pht trin song song nhng lp ring r bi chuyn gia phn mm . * Cung cp nhiu ti nguyn linh hot . III> S dng Code Chng trnh m bn ti trn c 3 lp . Lp th nht hay cn gi l FrmGUI , lp th hai hoc nhng nhim v logic s c gi tt BOCustomer cho i tng Customer v cui cng lp th ba hay cn gi l lp d liu s gi tt truy cp d liu ca ngi dng . Ti c bin son tt c lp trong nhng project ging nhau lm vic nh nhng hn . Ti bao gm li nhng m ngun dc theo c s d liu Access , ci m c s dng kim tra trong project ny bao gm trong file zip . Lp Th Nht (User Interface Tier) y l mt on ca code t giao din ca ngi dng . Ti ch bao gm nhng hm c s dng gi lp gia (lp th hai) . Ti s gi tham chiu n lp th hai nh BOCustomer.

//This function get the details from the user via GUI //tier and calls the Add method of business logic layer. private void cmdAdd_Click(object sender, System.EventArgs e) { try {

cus = new BOCustomer(); cus.cusID=txtID.Text.ToString(); cus.LName = txtLName.Text.ToString(); cus.FName = txtFName.Text.ToString(); cus.Tel= txtTel.Text.ToString(); cus.Address = txtAddress.Text.ToString(); cus.Add(); } catch(Exception err) { MessageBox.Show(err.Message.ToString()); } } //This function gets the ID from the user and finds the //customer details and return the details in the form of //a dataset via busniss object layer. Then it loops through //the content of the dataset and fills the controls.

private void cmdFind_Click(object sender, System.EventArgs e) { try { String cusID = txtID.Text.ToString(); BOCustomer thisCus = new BOCustomer(); DataSet ds = thisCus.Find(cusID); DataRow row; row = ds.Tables[0].Rows[0]; //via looping foreach(DataRow rows in ds.Tables[0].Rows ) { txtFName.Text = rows["CUS_F_NAME"].ToString(); txtLName.Text = rows["CUS_L_NAME"].ToString(); txtAddress.Text = rows["CUS_ADDRESS"].ToString(); txtTel.Text = rows["CUS_TEL"].ToString(); } } catch (Exception err) { MessageBox.Show(err.Message.ToString()); } } //this function used to update the customer details. private void cmdUpdate_Click(object sender, System.EventArgs

e) { try { cus = new BOCustomer(); cus.cusID=txtID.Text.ToString(); cus.LName = txtLName.Text.ToString(); cus.FName = txtFName.Text.ToString(); cus.Tel= txtTel.Text.ToString(); cus.Address = txtAddress.Text.ToString(); cus.Update(); } catch(Exception err) { MessageBox.Show(err.Message.ToString()); } }

Lp Th Hai (Business Logic Layer) y ti s bao gm tt c nhng on code trong lp ny . Nhng thuc tnh c bn ca n l nh ngha cho i tng ngi dng . Nhng nh ti cp th y l nhng ngi dng o v c khi phi cp nhp thm vo khi s dng . N cng c tt c cc phng thc bao gm nhng vic nh thm , tm kim , sa cha c s dng bo qun chi tit ngi dng . y l lp th hai (lp gia) s thc thi nhng hnh ng gia lp th nht v th ba . N gi mt tham chiu n lp truy cp d liu (lp th ba ) chng hn nh cusData = new DACustomer() . N cng tham chiu n namespace System.Data v i khi n ch v chi tit trong Form ca Dataset n lp th nht .
using System; using System.Data; namespace _3tierarchitecture { /// <SUMMARY> /// Summary description for BOCustomer. /// </SUMMARY>

public class BOCustomer { //Customer properties private private private private private String String String String String fName; lName; cusId; address; tel;

private DACustomer cusData; public BOCustomer() { //An instance of the Data access layer! cusData = new DACustomer(); }

/// <SUMMARY> /// Property FirstName (String) /// </SUMMARY> public String FName { get { return this.fName; } set { try { this.fName = value; if (this.fName == "") { throw new Exception( "Please provide first name ..."); } } catch(Exception e) { throw new Exception(e.Message.ToString()); } } } /// <SUMMARY> /// Property LastName (String) /// </SUMMARY> public String LName { get {

return this.lName; } set { //could be more checkings here eg revmove ' chars //change to proper case //blah blah this.lName = value; if (this.LName == "") { throw new Exception("Please provide name ..."); } } } /// <SUMMARY> /// Property Customer ID (String) /// </SUMMARY> public String cusID { get { return this.cusId; } set { this.cusId = value; if (this.cusID == "") { throw new Exception("Please provide ID ..."); } } } /// <SUMMARY> /// Property Address (String) /// </SUMMARY> public String Address { get { return this.address; }

set { this.address = value; if (this.Address == "") { throw new Exception("Please provide address ..."); } } } /// <SUMMARY> /// Property Telephone (String) /// </SUMMARY> public String Tel { get { return this.tel; } set { this.tel = value; if (this.Tel == "") { throw new Exception("Please provide Tel ..."); } } } /// <SUMMARY> /// Function Add new customer. Calls /// the function in Data layer. /// </SUMMARY> public void Add() { cusData.Add(this); }

/// <SUMMARY> /// Function Update customer details. /// Calls the function in Data layer. /// </SUMMARY>

public void Update() { cusData.Update(this); } /// <SUMMARY> /// Function Find customer. Calls the /// function in Data layer. /// It returns the details of the customer using /// customer ID via a Dataset to GUI tier. /// </SUMMARY> public DataSet Find(String str) { if (str == "") throw new Exception("Please provide ID to search"); DataSet data = null; data = cusData.Find(str); return data; } } }

Lp Th Ba (Data Access Layer) y l lp d liu c chi tit v c s d liu MS Access . Tuy nhin tt c nhng chi tit th cng r rng v khng nh hng n lp th hai . Module ny s tham chiu n lp th hai nh BOCustomer cus . c th d dng s dng bi bt k mt c s d liu khc ti to mt vi hng s bao gm c tn c s d liu v tn vng cn thay i nh bng chi tit v ngi dng . y l mt module c th dng cho bt k mt c s d liu no sau khi thay i .
using System; using System.Data.OleDb; using System.Data; namespace _3tierarchitecture { /// <SUMMARY> /// Summary description for DACustomer.

/// </SUMMARY> public class DACustomer { private OleDbConnection cnn; //change connection string as per the //folder you unzip the files private const string CnnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data " + "Source= D:\\Rahman_Backup\\Programming\\" + "Csharp\\3tierarchitecture\\customer.mdb;"; //local private private private private variables String strTable=""; String strFields=""; String strValues=""; String insertStr="";

//this needs to be changed based on customer //table fields' Name of the database! private const String thisTable = "tblCustomer"; private const String cus_ID = "CUS_ID"; private const String cus_LName = "CUS_L_NAME"; private const String cus_FName = "CUS_F_NAME"; private const String cus_Tel = "CUS_TEL"; private const String cus_Address = "CUS_ADDRESS";

public DACustomer() { } public DACustomer(BOCustomer cus) { // A reference of the business object class } //standard dataset function that adds a new customer public void Add(BOCustomer cus) { String str = BuildAddString(cus); OpenCnn(); //Open command option - cnn parameter is imporant OleDbCommand cmd = new OleDbCommand(str,cnn);

//execute connection cmd.ExecuteNonQuery(); // close connection

CloseCnn(); } //standard dataset function that updates //details of a customer based on ID public void Update(BOCustomer cus) { OpenCnn(); String selectStr = "UPDATE " + thisTable + " set " + cus_LName + " = '" + cus.LName + "'" + ", " + cus_FName + " = '" + cus.FName + "'" + ", " + cus_Address + " = '" + cus.Address + "'" + ", " + cus_Tel + " = '" + cus.Tel + "'" + " where cus_ID = '" + cus.cusID + "'"; OleDbCommand cmd = new OleDbCommand(selectStr,cnn); cmd.ExecuteNonQuery(); CloseCnn(); } //standard dataset function that finds and //return the detail of a customer in a dataset public DataSet Find(String argStr) { DataSet ds=null; try { OpenCnn(); String selectStr = "select * from " + thisTable + " where cus_ID = '" + argStr + "'"; OleDbDataAdapter da = new OleDbDataAdapter(selectStr,cnn); ds = new DataSet(); da.Fill(ds,thisTable); CloseCnn();

} catch(Exception e) { String Str = e.Message; } return ds; } private void OpenCnn() { // initialise connection

String cnnStr = CnnStr; cnn = new OleDbConnection(cnnStr); // open connection cnn.Open(); } private void CloseCnn() { // 5- step five cnn.Close(); } // just a supporting function that builds // and return the insert string for dataset. private String BuildAddString(BOCustomer cus) { // these are the constants as // set in the top of this module. strTable="Insert into " + thisTable; strFields=" (" + cus_ID + "," + cus_LName + "," + cus_FName + "," + cus_Address + "," + cus_Tel + ")"; //these are the attributes of the //customer business object. strValues= " Values ( '" + cus.cusID + "' , '" + cus.LName + "' , '" + cus.FName + "' , '" + cus.Address + "' , '" + cus.Tel + "' )"; insertStr = strTable + strFields + strValues; return insertStr; } } }

Lp trnh hng i tng vi m hnh 3 lp (3 layers)

10

JUN

Lu : Cc bn khng nn nhm ln khi nim lp(layer) trong phn ny vi khi nim lp(class) ca cc ngn ng lp trnh hng i tng.

Trong pht trin ng dng, d qun l cc thnh phn ca h thng, cng nh khng b nh hng bi cc thay i, ngi ta hay nhm cc thnh phn c cng chc nng li vi nhau v phn chia trch nhim cho tng nhm cng vic khng b chng cho v nh hng ln nhau. V d trong mt cng ty bn c tng phng ban, mi phng ban s chu trch nhim mt cng vic c th no , phng ny khng c can thip vo cng vic ni b ca phng kia nh Phng ti chnh th ch pht lng, cn chuyn ly tin u pht cho cc anh phng Marketing th cc anh khng cn bit. Trong pht trin phn mm, ngi ta cng p dng cch phn chia chc nng ny. Bn s nghe ni n thut ng kin trc a tng/nhiu lp, mi lp s thc hin mt chc nng no , trong m hnh 3 lp l ph bin nht. 3 lp ny l g? L Presentation, Business Logic, v Data Access. Cc lp ny s giao tip vi nhau thng qua cc dch v(services) m mi lp cung cp to nn ng dng, lp ny cng khng cn bit bn trong lp kia lm g m ch cn bit lp kia cung cp dch v g cho mnh v s dng n m thi. 1. Gii thiu cc thnh phn ca m hnh 3layer M hnh layer gm c 3 layer:
o o o

Layer GUI (Graphics User Interface) Layer Business Logic (y l layer x l cc d liu, thng tin trc khi a ln giao din hoc a xung d liu.) Layer Data Access Layer ny s ni chuyn Data.

o o o

1.1. GUI Layer. y l layer to ln giao din cho ngi dng, n s l ni tip nhn v kt xut ra kt qu ca chng trnh cho bn. N c nhim v x l, kim tra cc d liu nhp vo ( v nh TextBox ny n phi l s, s phi t 19.). N tip nhn cc Event ca ngi dng, kim tra d liu c nhp vo, gi yu cu x l xung tng k tip. 1.2. Business Logic Layer

o o o

y l layer x l chnh cc d liu trc khi c a ln hin th trn mn hnh hoc x l cc d liu trc khi lu d liu xung c s d liu. y l ni kim tra cc yu cu nghip v, tnh ton cc yu cu nghip v. Ti y cc tnh nng tnh ton trong chng trnh s c thc thi. (Nh tnh lng theo mt cng thc.) 1.3. Data Access Layer Layer ny s lo nhim v l c c s d liu ln, cp nht c s d liu, update c s d liu. Ni chung l n lm nhim v l ni chuyn phi tri vi database. 1.4. Cch cc layer ni chuyn vi nhau. Vn t ra y l 3 layer ny Ni chuyn vi nhau nh th no Nhn vo s ta cng s nhn c cu tr li: Qu trnh hin th d liu: Data Access layer ni chuyn vi Database v ly d liu ln theo mt cch no (c th l bng cu lnh select hay thng qua proceduce) lc ny sau khi ly c d liu ln th n s y ln Business layer ti y Business cn nho bt, thm mm mui ri y n ln trn GUI v ti GUI n s hin th ln cho ngi dng Qu trnh a d liu xung. Ngi dng thao tc vi GUI layer sau ra lnh thc hin (v nh Insert) sau h thng s kim tra cc thng tin ngi dng nhp vo nu tha i xung tip layer Business tip tc c nho nn, tnh ton v kim tra sau khi xong th d liu c y xung thng tin pha di Data Access Layer sau ti DataAccess Layer s thc thi n xung database. 1.5. Cch x l li trong m hnh 3 layer. Mt khi gp li (cc trng hp khng ng d liu) th ang layer no th qung ln trn layer cao hn n 1 bc cho ti GUI th s qung ra cho ngi dng bit. 1.6. Demo m hnh 3 layer trong chng trnh qun l

o o

You might also like