Lập trình C# - Mô hình 3 lớp trong C#

Cập nhật ngày: 28/03/2024 - Đã có 17743 lượt xem bài viết này!
Lập trình C# - Mô hình 3 lớp trong C#
Khi bạn 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, tuy nhiên khi bạn làm với những dự án lớn hơ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

Lập trình C# - Mô hình 3 lớp trong C#

1. Lời giới thiệu
      Khi bạn 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, tuy nhiên khi bạn làm với những dự án lớn hơ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 (3 - Layer).
 

Khi bạn 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, tuy nhiên khi bạn làm với những dự án lớn hơ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 (3 - Layer).

 

 

2. Phân biệt tầng (Tier) và lớp (Layer)

 

Tầng cho chúng ta thấy sự tách biệt vật lý với nhau, những tầng này có thể nầm cùng một nơi hay các nơi khác nhau trên thực tế các ứng dụng lớn thì Database sẽ nằm ở một Server, các API hay Web Service nằm một Server khác và ứng dụng thì chạy ở Client.

 

 

Khác với tầng, lớp không thể hiện rõ sự tách biệt về mặt vật lý chúng thường nằm chung một nơi nhưng ở các namspace khác nhau.

 

 

3. Xây dựng demo

 

+  dbConnection

Lớp này được sử dụng chủ yếu để thực hiện các thao tác update, delete và các truy vấn cơ sở dữ liệu. Nó cũng kiểm tra nếu kết nối cơ sở dữ liệu được mở hay không. Nếu kết nối  không mở (Close /Broken) thì sẽ mở lại. Các kết quả truy vấn cơ sở dữ liệu sẽ trả về table trong lớp này. 
Thông tin kết nối cơ sở dữ liệu lấy từ file app.config

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
 
namespace ThreeLayer
{
    class dbConnection
    {
        private SqlDataAdapter myAdapter;
        private SqlConnection conn;
 
        public dbConnection()
        {
            conn = new SqlConnection(ConfigurationSettings.AppSettings["dbConnectionString"]);
        }
 
        private SqlConnection openConnection()
        {
            if (conn.State == ConnectionState.Closed || conn.State == ConnectionState.Broken)
            {
                conn.Open();
            }
            return conn;
        }
 
        public DataTable executeSelectQuery(String _query, SqlParameter[] sqlParameter)
        {
            SqlCommand myCommand = new SqlCommand();
            DataTable dataTable = new DataTable();
            myAdapter = new SqlDataAdapter();
            dataTable = null;
            DataSet ds = new DataSet();
            try
            {
                myCommand.Connection = openConnection();
                myCommand.CommandText = _query;
                myCommand.Parameters.AddRange(sqlParameter);
                myCommand.ExecuteNonQuery();                
                myAdapter.SelectCommand = myCommand;
                myAdapter.Fill(ds);
                dataTable = ds.Tables[0];
            }
            catch (SqlException e)
            {
                return null;
            }
            finally
            {
 
            }
            return dataTable;
        }
 
        public bool executeInsertQuery(String _query, SqlParameter[] sqlParameter)
        {
            SqlCommand myCommand = new SqlCommand();
            try
            {
                myCommand.Connection = openConnection();
                myCommand.CommandText = _query;
                myCommand.Parameters.AddRange(sqlParameter);
                myAdapter.InsertCommand = myCommand;
                myCommand.ExecuteNonQuery();
            }
            catch (SqlException e)
            {
                return false;
            }
            finally
            {
            }
            return true;
        }
 
        public bool executeUpdateQuery(String _query, SqlParameter[] sqlParameter)
        {
            SqlCommand myCommand = new SqlCommand();
            try
            {
                myCommand.Connection = openConnection();
                myCommand.CommandText = _query;
                myCommand.Parameters.AddRange(sqlParameter);
                myAdapter.UpdateCommand = myCommand;
                myCommand.ExecuteNonQuery();
            }
            catch (SqlException e)
            {
                return false;
            }
            finally
            {
            }
            return true;
        }
    }
}



Database Access Layer

Database Access Layer (DAO) xây dựng các truy vấn dựa vào các thông số từ Business Logic Layer và chuyển nó đến lớp DBConnection để thực hiện. Sau đó trả kết quả về Business Logic Layer.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
 
namespace ThreeLayer.DAO
{
    class CustomerDAO
    {
        private dbConnection conn;
 
        public CustomerDAO()
        {
            conn = new dbConnection();
        }
 
        public DataTable getAllCus()
        {
            string query = string.Format("select * from [MD_Customer]");
            SqlParameter[] sqlParameters = new SqlParameter[0];
            return conn.executeSelectQuery(query, sqlParameters);
        }
 
        public DataTable searchById(int _id)
        {
string query = "select * from [MD_Customer] where CustomerId = @Cus_id";
            SqlParameter[] sqlParameters = new SqlParameter[1];
            sqlParameters[0] = new SqlParameter("@Cus_id", SqlDbType.Int);
            sqlParameters[0].Value =_id;
            return conn.executeSelectQuery(query, sqlParameters);
        }
    }
}


Value Object

Đây đơn giản là lớp trình bày các thuộc tính của đối tượng (Customer) nó cung cấp phương thức Post và Get, kết nối trực tiếp với Business Logic Layer và Presentation Layer. Như bạn có thể thấy trong sơ đồ giá trị của đối tượng được SET trong Business Logic Layer và GET ở Presentation Layer.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ThreeLayer.VO
{
    class CustomerVO
    {
        private int _iCustomerId;
        private string _sCustomerName;
        private int _iAge;
        private string _sAddress;
 
        public CustomerVO()
        {
        }
        public int iCustomerId
        {
            get
            {
                return _iCustomerId;
            }
 
            set
            {
                _iCustomerId = value;
            }
        }
        public string sCustomerName
        {
            get
            {
                return _sCustomerName;
            }
 
            set
            {
                _sCustomerName = value;
            }
        }
        public int iAge
        {
            get
            {
                return _iAge;
            }
            set
            {
                _iAge = value;
            }
        }
        public string sAddress
        {
            get
            {
                return _sAddress;
            }
 
            set
            {
                _sAddress = value;
            }
        }
    }
}


Business Logic Layer

Business Logic Layer (BUS) hoạt động như một cầu nối giữa Presentation Layer và DAO. Tất cả thông tin mà người dùng nhập vào được truyền đến Business Logic Layer. Các kết quả nhận được từ DAO là các dòng dữ liệu trong bảng nhưng và BUS sẻ chuyển đổi chúng thành các đối tượng VO. Business Logic Layer (BUS) là lớp quan trọng nhất trong toàn bộ kiến trúc vì nó có chứa tất cả các logic của chương trình. Bất cứ khi nào người dùng muốn cập nhật các logic của chương trình chỉ cần cập nhật lớp này.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ThreeLayer.DAO;
using ThreeLayer.VO;
using System.Data;
namespace ThreeLayer.BUS
{
    class CustomerBUS
    {
        private CustomerDAO _customerDAO;
        public CustomerBUS()
        {
            _customerDAO = new CustomerDAO();
        }
        public CustomerVO getCusById(int _id)
        {
            CustomerVO customerVO = new CustomerVO();
            DataTable dataTable = new DataTable();
            dataTable = _customerDAO.searchById(_id);
 
            foreach (DataRow dr in dataTable.Rows)
            {
                customerVO.iCustomerId = Int32.Parse(dr["CustomerId"].ToString());
                customerVO.sCustomerName = dr["CustomerName"].ToString();
                customerVO.iAge = Int32.Parse(dr["Age"].ToString());
                customerVO.sAddress = dr["Address"].ToString();                
            }
            return customerVO;
        }
        public DataTable getAllCus()
        {
            CustomerVO customerVO = new CustomerVO();
            DataTable dataTable = new DataTable();
            dataTable = _customerDAO.getAllCus();
            return dataTable;
        }
    }
}


Presentation Layer

Presentation Layer là lớp tương tác với người sử dụng, lớp này được sử dụng chủ yếu để nhận dữ liệu của người sử dụng và truyền nó sang Business Logic Layer để thực hiện những thao tác sử lý, dữ liệu sau trả về từ Business Logic Layer được trình bày sao cho người dùng có thể hiểu được.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ThreeLayer.BUS;
using ThreeLayer.VO;
namespace ThreeLayer
{
    public partial class frmCustomer : Form
    {
        public frmCustomer()
        {
            InitializeComponent();
        }
        CustomerBUS _customerBUS = new CustomerBUS();
 
        private void btnLoadData_Click(object sender, EventArgs e)
        {
            grdCustomer.DataSource = _customerBUS.getAllCus();
        }
 
        private void btnSearch_Click(object sender, EventArgs e)
        {
            int id;
            bool isNumeric = int.TryParse(txtCusId.Text, out id);
            if (isNumeric)
            {
                CustomerVO cusResuilt = _customerBUS.getCusById(id);
            }
             
        }
    }
}



Như vậy là chúng ta đã hoàn thành xong việc tìm hiểu về mô hình 3 lớp trong ứng dụng C#, phân biệt 3 tầng và 3 lớp cũng như hiểu được các khái niệm và chức năng của mỗi lớp.

 

Bạn đang muốn tìm kiếm 1 công việc với mức thu nhập cao.
✅ Hoặc là bạn đang muốn chuyển đổi công việc mà chưa biết theo học ngành nghề gì cho tốt.
✅ Giới thiệu với bạn Chương trình đào tạo nhân sự dài hạn trong 12 tháng với những điều đặc biệt mà chỉ có tại IMIC và đây cũng chính là sự lựa chọn phù hợp nhất dành cho bạn:
👉 Thứ nhất: Học viên được đào tạo bài bản kỹ năng, kiến thức chuyên môn lý thuyết, thực hành, thực chiến nhiều dự án và chia sẻ những kinh nghiệm thực tế từ Chuyên gia có nhiều năm kinh nghiệm dự án cũng như tâm huyết truyền nghề.
👉 Thứ hai: Được ký hợp đồng cam kết chất lượng đào tạo cũng như mức lương sau tốt nghiệp và đi làm tại các đối tác tuyển dụng của IMIC. Trả lại học phí nếu không đúng những gì đã ký kết.
👉 Thứ ba: Cam kết hỗ trợ giới thiệu công việc sang đối tác tuyển dụng trong vòng 10 năm liên tục.
👉 Thứ tư: Được hỗ trợ tài chính với mức lãi suất 0 đồng qua ngân hàng VIB Bank.
👉  Có 4 Chương trình đào tạo nhân sự dài hạn dành cho bạn lựa chọn theo học. Gồm có:
1)  Data Scientist full-stack
2)  Embedded System & IoT development full-stack
3)  Game development full-stack
4)  Web development full-stack 
✅ Cảm ơn bạn đã dành thời gian lắng nghe những chia sẻ của mình. Và tuyệt vời hơn nữa nếu IMIC được góp phần vào sự thành công của bạn. 
✅ Hãy liên hệ ngay với Phòng tư vấn tuyển sinh để được hỗ trợ về thủ tục nhập học.
✅ Chúc bạn luôn có nhiều sức khỏe và thành công!

Tham khảo các khóa đào tạo nhân sự qua danh mục