Mô Hình 3 Lớp Trong C# Winform

     

Đối cùng với lập trình hiện tại đại, rất nhiều thứ phần đông đi nhiều lớp, tựa như như C#, cũng đều có cả mô hình 3 lớp C# để chúng ta thực thi áp dụng.

Bạn đang xem: Mô hình 3 lớp trong c# winform

Ở C# họ gọi là quy mô 3 lớp aka 3 Layers. Nó hơi là danh tiếng với sinh viên toàn quốc đang học C# (một số trường vẫn là lập trình sẵn .NET, xây dựng C#, lập trình sẵn ứng dụng).

Mục lục:

Giới thiệu về mô hình 3 lớp.Cách sinh sản project và liên kết 3 lớp.Xây dựng DTOXây dựng Data AccessXây dựng Business (BUS)Xây dựng GUILời kết cùng Source Code mẫu

Cấu chế tác của C# – quy mô 3 lớp đối chọi giản:

Gồm 3 lớp, kia là:

GUI Layer: Lớp này là lớp hiển thị đồ họa và các công dụng để người dùng cuối sử dụng.Business (BUS) Layer: Đây là lớp nhận các yêu mong từ lớp GUI cùng truy xuất lên lớp Data để lấy thông tin cùng trả về GUI.Data Access Layer: Lớp này là lớp nhằm truy xuất cùng với CSDL, chỉ độc nhất lớp này được thiết kế việc với database.(Ko phải thiết) DTO Layer: Lớp này chỉ nên phụ thôi, đấy là lớp định nghĩa các table trong database của bạn, định nghĩa cột của nó tương tự như để ta gán data khi query đem dữ liệu. Các bạn có thể hiểu nôm na là 1 trong dạng cơ phiên bản ORM (Object Relation Mapping).

Đây là cách hoạt động của mô hình 3 lớp:

*

Nhìn sơ qua thì nó hơi là giống MVC mặt web nhỉ? Business như thể Controller :D, GUI là View và Data Access là Model.

Lợi cố kỉnh của quy mô 3 lớp:

Phân loại ví dụ các lớp có các nhiệm vụ khác nhau. Từ kia ta bao gồm thể quản lý và maintain project tốt hơn.Dễ dàng phân các loại các hành vi tại Business.Dễ dàng phân loại những hàm truy tìm xuất trên Database, phân loại hàm theo table,…Ứng dụng được cho những project khủng ở bên ngoài.…

Lưu ý khi xây dựng quy mô 3 lớp:

Cần một solution riêng đến project.Cần 3 project không giống nhau để làm nên 3 lớp, tên Project đặt như sau:Lớp GUI: GUI_* (VD: GUI_QuanLy)Lớp Business: BUS_* (VD: BUS_QuanLy)Lớp Data Access: DAL_* (VD: DAL_QuanLy)Lớp DTO: DTO_* (VD: DTO_QuanLy)Bên trong 3 lớp như trên những file đặt cần có các tiền tố như sau:Ví dụ mình bao gồm một table thương hiệu là ThanhVien

 

Lớp GUI: GUI_* (VD: GUI_ThanhVien)Lớp Business: BUS_* (VD: GUI_ThanhVien)Lớp Data Access: DAL_* (VD: GUI_ThanhVien)Lớp DTO: DTO_* (VD: DTO_ThanhVien)

Như chúng ta đã thấy tên Table liên quan mật thiết tới phương pháp đặt tên tệp tin nhé 

C# – mô hình 3 lớp đơn giản: link 3 lớp

Như chúng ta đã quan sát tại sơ vật dụng ở trang 1 thì mô hình 3 lớp hoạt động như sau:

GUI links tới dc Business Layer và DTO.Business Layer link tới được Data Access và DTO.Data Access chỉ link tới DTO.

Xem thêm: Những Lời Thơ Chúc Mừng Sinh Nhật Mẹ Yêu Hay ❤️ Ý Nghĩa Nhất

Bây giờ chúng ta ban đầu tạo, đối với 3 Project DTO, Business với Data Access họ tạo theo Class Library nhé

*

Và khi sản xuất xong, ta sẽ có 4 project như sau(Có mấy tệp tin class1.cs xóa thoải mái và dễ chịu nhé.

*

Và hiện thời chúng ta đang liên kết, làm project GUI trước nhé. Đầu tiên ta chọn chuột fải vào References => địa chỉ Reference

*

Một cái biển hiện ra, tại mục Project ta sẽ chọn 2 lớp mà lại lớp GUI hoàn toàn có thể liên kết tới là BUS và DTO:

*

Cứ OK là Reference sẽ được thêm vào GUI, chúng ta có thể kiểm tra bằng phương pháp mở References ra:

*

Như mặt hình thì tôi đã thêm thành công, và các bạn làm tương tự như đối với BUS và DAL theo bản thân nói trên nhé.

Thế là các bạn đã liên kết kết thúc cho mô hình 3 lớp. 

C# – quy mô 3 lớp dễ dàng và đơn giản – Xây dựng quy mô 3 lớp: thiết kế DTO

Cơ sở dữ liệu:

CSDL mình sẽ xài table ThanhVien như sau:

CREATE TABLE THANHVIEN ( TV_ID INT NOT NULL PRIMARY KEY IDENTITY, TV_NAME NVARCHAR(30) NOT NULL, TV_PHONE VARCHAR(11) NOT NULL, TV_EMAIL VARCHAR(50) NOT NULL)

Xây dựng DTO

Mình sẽ tạo file DTO_ThanhVien.cs (Class file), về cơ bạn dạng thì những cột của table ThanhVien của chính mình ra sao thì mình sản xuất 1 class đồng nhất vậy kèm get/set với 2 hàm khởi tạo.

DTO_ThanhVien.cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace DTO_QuanLy public class DTO_ThanhVien private int _THANHVIEN_ID; private string _THANHVIEN_NAME; private string _THANHVIEN_PHONE; private string _THANHVIEN_EMAIL; /* ======== GETTER/SETTER ======== */ public int THANHVIEN_ID get return _THANHVIEN_ID; mix _THANHVIEN_ID = value; public string THANHVIEN_NAME get return _THANHVIEN_NAME; mix _THANHVIEN_NAME = value; public string THANHVIEN_PHONE get return _THANHVIEN_PHONE; set _THANHVIEN_PHONE = value; public string THANHVIEN_EMAIL get return _THANHVIEN_EMAIL; mix _THANHVIEN_EMAIL = value; /* === Constructor === */ public DTO_ThanhVien() public DTO_ThanhVien(int id, string name, string phone, string email) this.THANHVIEN_ID = id; this.THANHVIEN_EMAIL = email; this.THANHVIEN_NAME = name; this.THANHVIEN_PHONE = phone;

C# – quy mô 3 lớp dễ dàng – Xây dựng mô hình 3 lớp: xây đắp Data Access

Tại sao mình lại xây cất Data Access trước? Đơn giản là đây là lớp nhưng mà ta xử lý mặt database, làm cho trước thì thiết kế GUI hoàn thành chỉ vấn đề bỏ vào áp dụng thôi.

Điều quan trọng đặc biệt đầu tiên, họ cần tạo class DBConnect.cs với ngôn từ như sau:

using System.Data.SqlClient;namespace DAL_QuanLy public class DBConnect protected SqlConnection _conn = new SqlConnection("Data Source=ADMINISTRATORSQLEXPRESS;Initial Catalog=ThanhVien;Integrated Security=True"); Chúng ta đang tạo SqlConnection và khởi tạo luôn, sau đây các class DAL chúng ta chỉ cần kế thừa class DBConnect là rất có thể sử dụng _conn thoải mái ko đề xuất khởi tạo lại.

Các bạn nhớ sửa lại connection string cho chuẩn bên trang bị của các bạn nhé. Ở phía trên vì bài xích tập dễ dàng và đơn giản nên ta cần cù hard-code vậy :D. Họ có nhiều cách khác biệt để né hard-code cơ mà mình đã nói sau ở những bài khác.

Xem thêm: Mẫu Thiệp Mời Dự Tiệc - Mẫu Thiệp Mời Tất Niên Công Ty Đẹp Nhất

Mình sẽ khởi tạo file DAL_ThanhVien.cs (Class file)

Ở phía trên mình sẽ làm cho sẵn luôn 4 methods là: Lấy vớ cả, Thêm, Xóa, Sửa nhé 

DAL_ThanhVien.cs:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using System.Data.SqlClient;using DTO_QuanLy;namespace DAL_QuanLy public class DAL_ThanhVien : DBConnect /// /// Get toàn bộ thành viên /// /// public DataTable getThanhVien() SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM THANHVIEN", _conn); DataTable dtThanhvien = new DataTable(); da.Fill(dtThanhvien); return dtThanhvien; /// /// Thêm member /// /// /// public bool themThanhVien(DTO_ThanhVien tv) try // Ket noi _conn.Open(); // Query string - vì chưng mình để TV_ID là identity (giá trị từ bỏ tăng dần) đề xuất ko nên fải insert ID string SQL = string.Format("INSERT INTO THANHVIEN(TV_NAME, TV_PHONE, TV_EMAIL) VALUES ('0', '1', '2')", tv.THANHVIEN_NAME, tv.THANHVIEN_PHONE, tv.THANHVIEN_EMAIL); // Command (mặc định command type = text nên bọn họ khỏi fải làm những gì nhiều). SqlCommand cmd = new SqlCommand(SQL, _conn); // Query và đánh giá if (cmd.ExecuteNonQuery() > 0) return true; catch (Exception e) finally // Dong ket noi _conn.Close(); return false; /// /// Sửa thành viên /// /// /// public bool suaThanhVien(DTO_ThanhVien tv) try // Ket noi _conn.Open(); // Query string string SQL = string.Format("UPDATE THANHVIEN set TV_NAME = '0', TV_PHONE = '1', TV_EMAIL = '2' WHERE TV_ID = 3", tv.THANHVIEN_NAME, tv.THANHVIEN_PHONE, tv.THANHVIEN_EMAIL, tv.THANHVIEN_ID); // Command (mặc định command type = text nên bọn họ khỏi fải làm những gì nhiều). SqlCommand cmd = new SqlCommand(SQL, _conn); // Query và soát sổ if (cmd.ExecuteNonQuery() > 0) return true; catch (Exception e) finally // Dong ket noi _conn.Close(); return false; /// /// Xóa member /// /// /// public bool xoaThanhVien(int TV_ID) try // Ket noi _conn.Open(); // Query string - vì xóa chỉ việc ID nên họ ko yêu cầu 1 DTO, ID là đầy đủ string SQL = string.Format("DELETE FROM THANHVIEN WHERE TV_ID = 0)", TV_ID); // Command (mặc định command type = text nên họ khỏi fải làm những gì nhiều). SqlCommand cmd = new SqlCommand(SQL, _conn); // Query và kiểm soát if (cmd.ExecuteNonQuery() > 0) return true; catch (Exception e) finally // Dong ket noi _conn.Close(); return false;

C# – quy mô 3 lớp đơn giản – Xây dựng quy mô 3 lớp: chế tạo Business

Bước này là bước xử lý business xúc tích và ngắn gọn (Business layer).

Ở bước này, ta hoàn toàn có thể lấy tài liệu từ DAL về, cách xử lý ABC XYZ gì đấy rồi trả về lại cho GUI sử dụng. Hoặc khi update dữ liệu trên DB, GUI gửi data lên BUS và rồi ta giải pháp xử lý ABC XYZ nào đó cho data của bọn chúng ta, rồi new insert/update/delete chẳng hạn,…

Vì phầm mềm mình build là app đối chọi giản, cần mình chỉ việc gọi lên DAL cùng trả về khớp ứng cho GUI xài thui 

Mình đã tạo BUS_ThanhVien.cs (Class file):

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using DAL_QuanLy;using DTO_QuanLy;namespace BUS_QuanLy public class BUS_ThanhVien DAL_ThanhVien dalThanhVien = new DAL_ThanhVien(); public DataTable getThanhVien() return dalThanhVien.getThanhVien(); public bool themThanhVien(DTO_ThanhVien tv) return dalThanhVien.themThanhVien(tv); public bool suaThanhVien(DTO_ThanhVien tv) return dalThanhVien.suaThanhVien(tv); public bool xoaThanhVien(int TV_ID) return dalThanhVien.xoaThanhVien(TV_ID); Chỉ đơn giản và dễ dàng là gọi hàm cùng trả về thôi (app đơn giản và dễ dàng mà