You are on page 1of 10

Ngi son: Nguyn Vn Tm

LP TRNH THEO KIN TRC 3 LP (3-tiers architechture)


1. Xy dng phn mm theo kin trc 3 lp: Trc y, i vi cc phn mm c s dng lin quan n d liu, thng khi lm ngi lp trnh thng tch hp vic giao tip vi ngi s dng , x l ri ghi xung d liu trn cng mt form (y l m hnh mt lp). Nhng trong kin trc 3 lp (m hnh 3 lp), phi c vic phn bit rch ri gia cc lp ny. M hnh 3 lp c th c m t nh sau :

Lp giao din

Lp x l Lp d liu
D liu

Lp th nht : Lp giao din (giao tip vi ngi s dng) : ch thun x l vic giao tip vi ngi s dng, nhp xut, m khng thc hin vic tnh ton, kim tra, x l, hay cc thao tc lin quan n c s d liu. Lp th hai : Lp x l : Lp ny chuyn thc hin cc x l , kim tra cc rng buc, cc qui tc ng x ca phn mm , cc chc nng ct yu, Vic thc hin ny c lp vi cch thit k cng nh ci t giao din. Thng tin cho lp ny thc hin cc x l ca mnh c ly t lp giao din. Lp th ba : Lp d liu : Lp ny chuyn thc hin cc cng vic lin quan n d liu. D liu c th ly t c s d liu (Access, SQL Server ) hoc tp tin (text, binary, XML ). i vi c s d liu, lp ny thc hin kt ni trc tip vi c s d liu v thc hin tt c cc thao tc lin
Trang 1

Ngi son: Nguyn Vn Tm

quan n c s d liu m phn mm cn thit. i vi tp tin, lp ny thc hin vic c, ghi tp tin theo yu cu ca phn mm. Vic thc hin ny do lp x l gi. R rng, vi m hnh ny, cc cng vic ca tng lp l c lp vi nhau. Vic thay i mt lp khng lm thay i cc lp cn li, thun tin hn cho qu trnh pht trin v bo tr phn mm. Lu : lp y l tier ch khng phi l class 2. ng dng minh ha: Bi ton Xy dng chng trnh tnh tng 2 phn s theo kin trc 3 lp. Theo d liu ca phn s c c ln t tp tin XML, kt qu sau khi c tnh s c ghi xung tp tin XML Cch lm thng thng l mi vic u c y vo trong 1 form v x l trc tip trong form . Tuy nhin, khi c s thay i xy ra v giao din, x l, hay d liu th vic chnh sa kh kh khn. Do vy, vic xy dng theo kin trc 3 lp s khc phc nhc im ny. Kin trc ca chng trnh nh sau

Mn hnh

Th hin phn s

X l phn s D liu phn s

D liu tp tin XML

Trang 2

Ngi son: Nguyn Vn Tm

Xy dng lp th hin phn s (TH_PHANSO) S dng User Control ci t cho TH_PHANSO. Thm User Control vo project bng cch chn Project > Add User Control. t tn User Control . Ta c TH_PHANSO.cs

txtTuSo

txtMauSo

Do th hin t s v th hin mu s u l TextBox do trong lp TH_PHANSO cn thit lp cc properties l tuso v mauso c kiu int.
public int tuso{ set{ this.txtTuSo.Text = value.ToString(); } get{ return int.Parse(this.txtTuSo.Text); } } public int mauso { set { this.txtMauSo.Text = value.ToString(); } get { return int.Parse(this.txtMauSo.Text); } }

Trang 3

Ngi son: Nguyn Vn Tm

Lp lu tr phn s (LT_PHANSO) Tp tin XML lu tr c nh dng nh sau <?xml version ="1.0" encoding = "utf-8"?> <PHANSO> <Tu_so>5</Tu_so> <Mau_so>3</Mau_so> </PHANSO> thc hin vic c v ghi d liu XML ta s dng DOM. Khai bo tuso v mauso thc hin vic lu tr
public int tuso; public int mauso;

Thc hin ci t hm khi to mc nh vi tham s truyn vo l ng dn file XML


public LT_PHANSO(string strFilename) { // // TODO: Add constructor logic here // XmlDocument doc = LT_XML.DocTaiLieu(strFilename); if(doc == null) { tuso = 0; mauso = 0; return; } XmlElement ele = doc.DocumentElement; tuso = int.Parse(ele.SelectSingleNode("Tu_so").InnerText); mauso = int.Parse(ele.SelectSingleNode("Mau_so").InnerText); }

Trang 4

Ngi son: Nguyn Vn Tm

Thc hin ci t hm ghi phn s vi tham s truyn vo l ng dn file XML


public void GhiPhanSo(string strFilename) { XmlDocument doc = new XmlDocument(); XmlElement root = doc.CreateElement("PHANSO"); doc.AppendChild(root); XmlElement ele_Tuso = root.OwnerDocument.CreateElement("Tu_so"); ele_Tuso.InnerText = this.tuso.ToString(); root.AppendChild(ele_Tuso); XmlElement ele_Mauso = root.OwnerDocument.CreateElement("Mau_so"); ele_Mauso.InnerText = this.mauso.ToString(); root.AppendChild(ele_Mauso); LT_XML.GhiTaiLieu(strFilename,doc); }

Lp lu tr XML (LT_XML) Vic load v save XmlDocument c tch ra thnh mt lp ring l lp LT_XML
public static XmlDocument DocTaiLieu(string strFilename) { XmlDocument kq = new XmlDocument(); try { kq.Load(strFilename); } catch{ return null; } return kq; } public static void GhiTaiLieu(string strFilename, XmlDocument doc) { try{ doc.Save(strFilename); } catch{ } }

Trang 5

Ngi son: Nguyn Vn Tm

Lp x l phn s (XL_PHANSO) Lp ny s thc hin ci t cc hm lin quan n x l v tnh ton trn phn s nh nh ngha php cng 2 phn s, rt gn phn s hay cp nht gi tr t i tng th hin. Khai bo 2 i tng ln lt thuc v lp LT_PHANSO v TH_PHANSO gip to lin kt vi tng x l vi 2 tng cn li l tng d liu v tng giao din.
private LT_PHANSO lt_ps = null; private TH_PHANSO th_ps = null;

Ci t hm khi to mc nh to lin kt vi i tng th hin v i tng x l


public XL_PHANSO(LT_PHANSO lt_ps, TH_PHANSO th_ps) { this.lt_ps = lt_ps; this.th_ps = th_ps; this.th_ps.tuso = this.lt_ps.tuso; this.th_ps.mauso = this.lt_ps.mauso; }

Ci t phng thc ghi


public void Ghi(string strFilename) { this.lt_ps.tuso = this.th_ps.tuso; this.lt_ps.mauso = this.th_ps.mauso; this.lt_ps.GhiPhanSo(strFilename); }

Ci t ton t +
public static XL_PHANSO operator +(XL_PHANSO ps1,XL_PHANSO ps2) { XL_PHANSO kq = new XL_PHANSO(new LT_PHANSO(), new TH_PHANSO()); kq.th_ps.tuso = ps1.th_ps.tuso * ps2.th_ps.mauso + ps2.th_ps.tuso * ps1.th_ps.mauso; kq.th_ps.mauso = ps1.th_ps.mauso * ps2.th_ps.mauso; return kq; }

Trang 6

Ngi son: Nguyn Vn Tm

Ci t hm cp nht t i tng x l phn s khc


public void CapNhat(XL_PHANSO ps) { this.th_ps.tuso = ps.th_ps.tuso; this.th_ps.mauso = ps.th_ps.mauso; }

Ci t hm rt gn phn s
public void RutGon() { int tuso = this.th_ps.tuso; int mauso = this.th_ps.mauso; int maxUC = TimMaxUocChung(tuso,mauso); tuso = tuso/maxUC; mauso = mauso/maxUC; this.th_ps.tuso = tuso; this.th_ps.mauso = mauso; }

rt gn ta cn tnh c chung ln nht, c th ci t hm ny chung vi lp XL_PHANSO


public int TimMaxUocChung(int a, int b) { while(a!=b) { if(a>b) a -= b; else b -= a; } return a; }

Trang 7

Ngi son: Nguyn Vn Tm

Thc hin ci t mn hnh chnh (MainFrm)


tH_PHANSO1 tH_PHANSO2 tH_PHANSO3

Mn hnh form x l chnh

btnCong btnThoat

Trong form chnh s thc hin khai bo 3 i tng x l phn s


private PhanSo.XL_PHANSO xl_PhanSo1; private PhanSo.XL_PHANSO xl_PhanSo2; private PhanSo.XL_PHANSO xl_PhanSo3;

Thc hin khi to 3 i tng x l phn s va khai bo


public MainFrm() { // // Required for Windows Form Designer support InitializeComponent();
xl_PhanSo1 = new XL_PHANSO(new LT_PHANSO("phanso1.xml"), tH_PHANSO1); xl_PhanSo2 = new XL_PHANSO(new LT_PHANSO("phanso2.xml"), tH_PHANSO2); xl_PhanSo3 = new XL_PHANSO(new LT_PHANSO(""),tH_PHANSO3);

Trang 8

Ngi son: Nguyn Vn Tm

Vit hm x l cho cc nt chc nng trn form: Hm x l cho nt Cng


private void btnCong_Click(object sender, System.EventArgs e) { XL_PHANSO kq = xl_PhanSo1 + xl_PhanSo2; xl_PhanSo3.CapNhat(kq); xl_PhanSo3.Ghi(ketqua.xml); xl_PhanSo3.RutGon(); }

Hm x l cho nt Thoat
private void btnThoat_Click(object sender, System.EventArgs e) { this.Close(); }

To cc tp tin phanso1.xml, phanso2.xml, c nh dng nh v d trn. Thc hin bin dch v chy th chng trnh.

Trang 9

Ngi son: Nguyn Vn Tm

3. Nhn xt : Thc hin ci t vi kin trc 3 lp s gip chng trnh d dng thay i, ti s dng li chng trnh. V d: TH_PHANSO khng th hin t s v mu s bng TextBox na m thay bng control khc (v d nh MyControl th cng khng nh hng, lc ch cn thay i code trong phn property t s v mu s m thi.
public int tuso{ set{ this.MyControl.Value = value.ToString(); } get{ return int.Parse(this.MyControl.Value); } } public int mauso { set { this.MyControl.Value = value.ToString(); } get { return int.Parse(this.MyControl.Value); } }

Khi khng lu tr bng XML m chuyn sang dng c s d liu th ta ch cn thay code phn LT_PHANSO, m khng cn thay i code phn TH_PHANSO, cng nh XL_PHANSO. Ch : Khng ph thuc phng php lp trnh. Mi nghip v khng nht thit ch c gii quyt bi 3 i tng. Khng l mt kin trc siu vit.

Trang 10

You might also like