Học Lập Trình

Giới thiệu về kiến trúc đa tần và Mô hình 3 lớp trong C#

Giới thiệu về kiến trúc đa tần và Mô hình 3 lớp trong c#

Nếu dự án nhỏ:

Khi Ta làm việc với các ứng dụng, nếu với những dự án nhỏ thì việc tạo một ứng dụng theo ý của chúng ta rất dễ dàng

Nếu dự án lớn:

Cần nhiều người cùng làm hơn thì việc lập trình trở nên phức tạp hơn, vậy nên để dễ dàng hơn trong việc quản lý các thành phần của hệ thống cũng như ảnh hưởng tới các thành phần khác khi ta thay đổi một thành phần, chúng ta thường nhóm các thành phần có cùng chức năng lại với nhau. Chính vì thế các mô hình lập trình được sinh ra, một trong những mô hình lập trình đó là mô hình 3 lớp .

mô hình 3 lớp trong c#

Presentation Layer (GUI)

Đây chính là giao diện xử lý của ứng dụng (Windows form, webform, …).

Nhiệm vụ chính của lớp này là nhập liệu và trình bày dữ liệu, có thể bao gồm kiểm tra dữ liệu đầu vào trước khi gọi Business Logic Layer.

Business Logic Layer (BLL)

Có thể gọi là BLL hay BUS, đều là Business Logic Layer.

Kiểm tra các yêu cầu nghiệp vụ trước khi cập nhật dữ liệu, quản lý các transaction… Công việc của BLL là gọi lại các xử lý của lớp Data Access Layer, nếu gặp ngoại lệ sẽ thôngbáo cho GUI.

Data Access Layer (DAL)

Có thể là DAL hay DAO, đều là Data Access Layer cả.

Chức năng của DAL là kết nối CSDL, tìm kiếm, thêm, xóa, sửa,… trên CSDL.  Tầng này sẽ sử dụng ADO.NET, Entity Framework để xử lý.

Data Transfer Object (DTO) 

Có thẻ hiểu DTO là tập các đối tượng được chuyển từ mô hình CSDL quan hệ lên hướng đối tượng để dễ dàng trong việc tương tác xử lý nghiệp vụ.

Tên Bảng Tên Lớp

Tên Cột Tên Thuộc tính

Từng dòng dữ liệu từng đối tượng

mô hình 3 lớp trong lập trình c#

COBE HƯỚNG DẪN MÔ HÌNH 3 LỚP

1. TẦNG DTO:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace DTO

{

  public   class DanhMuc

    {

        public int MaDM { get; set; }

        public string TenSP { get; set; }

    }

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace DTO

{

    public  class SanPham

    {

        public int MaSP { get; set; }

        public string TenSP { get; set; }

        public int GiaSP { get; set; }

        public int MaDM { get; set; }

    }

}

  1. TẦNG DAL : TƯƠNG TÁC VỚI CSDL SQL SERVER

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Data.SqlClient;

using System.Data;

namespace DAL

{

  public  class Databaseaccess

    {

       public SqlConnection conec = null;

        string strconec = @”server =DESKTOP-CR8PM8T\SQLEXPRESS ; Database=CSDL3LOP ; User ID=sa; PWd=123″;

        public void Moketnoi()

        {

            if (conec==null)

            {

                conec = new SqlConnection(strconec);

            }

            if (conec.State==ConnectionState.Closed)

            {

                conec.Open();

            }

        }

        public void DongKetNoi()

        {

            if (conec!=null && conec.State==ConnectionState.Open)

            {

                conec.Close();

            }

        }

    }

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using DTO;

using System.Data;

using System.Data.SqlClient;

namespace DAL

{

   public class SanPhamAccess:Databaseaccess

    {

        List dsap = new List();

        public List LayToanBoSanPham()

        {

            Moketnoi();

            SqlCommand command = new SqlCommand();

            command.CommandType = CommandType.Text;

            command.CommandText = “select * from SanPham”;

            command.Connection = conec;

            SqlDataReader reader = command.ExecuteReader();

            while (reader.Read())

            {

                int ma = reader.GetInt32(0);

                string ten = reader.GetString(1);

                int gia = reader.GetInt32(2);

                int madm = reader.GetInt32(3);

                SanPham sp = new SanPham();

                sp.MaSP = ma;

                sp.TenSP = ten;

                sp.GiaSP = gia;

                sp.MaDM = madm;

                dsap.Add(sp);

            }

            reader.Close();

            return dsap;

        }

        public bool xoasanpham(int ma)

        {

            Moketnoi();

            SqlCommand commnand = new SqlCommand();

            commnand.CommandType = CommandType.Text;

            commnand.CommandText = “delete from SanPham where MaSP = @ma”;

            commnand.Connection = conec;

            commnand.Parameters.Add(“@ma”, SqlDbType.Int).Value = ma;

            int kq = commnand.ExecuteNonQuery();

            return kq > 0;

        }

        public bool Themsanpham(SanPham sp)

        {

            Moketnoi();

            SqlCommand command = new SqlCommand();

            command.CommandType = CommandType.Text;

            command.CommandText = ” insert into SanPham Values(@ma, @ten,@gia,@mdm)”;

            command.Connection = conec;

            command.Parameters.Add(“@ma”, SqlDbType.Int).Value = sp.MaSP;

            command.Parameters.Add(“@ten”, SqlDbType.NVarChar).Value = sp.TenSP;

            command.Parameters.Add(“@gia”, SqlDbType.Int).Value = sp.GiaSP;

            command.Parameters.Add(“@mdm”, SqlDbType.Int).Value = sp.MaDM;

            int kq = command.ExecuteNonQuery();

            return kq > 0;

        }

    }

}

  1. TẦNG BLL 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using DAL;

using DTO;

namespace BLL // tầng này xử lý nghiệp vụ

{

    public class SanPhamBLL

    {

        SanPhamAccess spa = new SanPhamAccess();

        public List Laytoanbosanham()

        {

            return spa.LayToanBoSanPham();

        }

        public bool xoasanpham(int ma)

        {

            return spa.xoasanpham(ma);

        }

        public bool Themsanpham(SanPham sp)

        {

            if (sp.TenSP.Length==0)

            {     

                return false;

            }

            return spa.Themsanpham(sp);

        }

    }

}

  1. TẦNG GUI

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using DTO;

using BLL;

namespace GUI

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)

        {

        }

        private void btnhiensanPham_Click(object sender, EventArgs e)

        {

            SanPhamBLL spbll = new SanPhamBLL();

            List dssp = spbll.Laytoanbosanham();

            lvSanPham.Items.Clear();

            foreach (SanPham sp in dssp)

            {

                ListViewItem lvi = new ListViewItem(sp.MaSP+””);

                lvi.SubItems.Add(sp.TenSP);

                lvi.SubItems.Add(sp.GiaSP + “”);

                lvi.SubItems.Add(sp.MaDM + “”);

                lvSanPham.Items.Add(lvi);

                lvi.Tag = sp;

            }

        }

        private void btnXoa_Click(object sender, EventArgs e)

        {

            if (lvSanPham.SelectedItems.Count>0)

            {

                ListViewItem lvi = lvSanPham.SelectedItems[0];

                SanPham sp = lvi.Tag as SanPham;

                SanPhamBLL spbll = new SanPhamBLL();

                bool kq = spbll.xoasanpham(sp.MaSP);

                if (kq)

                {

                    btnhiensanPham.PerformClick();

                }

            }

        }

        private void btnThem_Click(object sender, EventArgs e)

        {

            SanPham sp = new SanPham();

            sp.MaSP = int.Parse(txtMa.Text);

            sp.TenSP = txtTen.Text;

            sp.GiaSP = int.Parse(txtGia.Text);

            sp.MaDM = int.Parse(txtMaDM.Text);

            SanPhamBLL spbll = new SanPhamBLL();

            bool kq = spbll.Themsanpham(sp);

            if (kq)

            {

                btnhiensanPham.PerformClick();

            }

        }

    }

}

hướng cách lập trình mô hình 3 lớp trong c#