Hướng dẫn lập trình mô hình ba lớp three layer trong csharp
Ở C# chúng ta gọi là mô hình 3 lớp aka 3 Layers. Nó khá là nổi tiếng với sinh viên VN đang học C# (một số trường sẽ là Lập trình .NET, lập trình C#, lập trình ứng dụng).
Mục lục:
- Giới thiệu về mô hình 3 lớp.
- Cách tạo project và liên kết 3 lớp.
- Xây dựng DTO
- Xây dựng Data Access
- Xây dựng Business (BUS)
- Xây dựng GUI
- Lời kết và Source Code mẫu
Cấu tạo của C# – Mô hình 3 lớp đơn giản:
Gồm 3 lớp, đó là:
- GUI Layer: Lớp này là lớp hiển thị giao diện và các chức năng để người dùng cuối sử dụng.
- Business (BUS) Layer: Đây là lớp nhận các yêu cầu từ lớp GUI và truy xuất lên lớp Data để lấy thông tin và trả về GUI.
- Data Access Layer: Lớp này là lớp để truy xuất với CSDL, chỉ duy nhất lớp này được làm việc với database.
- (Ko cần thiết) DTO Layer: Lớp này chỉ là 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ó cũng như để ta gán data khi query lấy dữ liệu. Các bạn có thể hiểu nôm na là 1 dạng cơ 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ó khá là giống MVC bên web nhỉ? Business như là Controller :D, GUI là View và Data Access là Model.
Lợi thế của mô hình 3 lớp:
- Phân loại rõ ràng các lớp có các nhiệm vụ khác nhau. Từ đó ta có thể quản lý và maintain project tốt hơn.
- Dễ dàng phân loại các hành động tại Business.
- Dễ dàng phân loại các hàm truy xuất tại Database, phân loại hàm theo table,…
- Ứng dụng được cho các project lớn ở bên ngoài.
- …
Lưu ý khi xây dựng mô hình 3 lớp:
- Cần một solution riêng cho project.
-
Cần 3 project khác 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 các file đặt cần có các tiền tố như sau:
Ví dụ mình có một table tên 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ư các bạn đã thấy tên Table liên quan mật thiết tới cách đặt tên file nhé
C# – Mô hình 3 lớp đơn giản: Liên kết 3 lớp
Như các bạn đã nhìn tại sơ đồ ở trang 1 thì Mô hình 3 lớp hoạt động như sau:
- GUI liên kết tới dc Business Layer và DTO.
- Business Layer liên kết tới được Data Access và DTO.
- Data Access chỉ liên kết tới DTO.
Bây giờ chúng ta bắt đầu tạo, đối với 3 Project DTO, Business và Data Access chúng ta tạo theo Class Library nhé

Và khi tạo xong, ta sẽ có 4 project như sau(Có mấy file class1.cs xóa thoải mái nhé.

Và bây giờ chúng ta sẽ liên kết, làm project GUI trước nhé. Đầu tiên ta chọn chuột fải vào References => Add Reference

Một cái bảng hiện ra, tại mục Project ta sẽ chọn 2 lớp mà lớp GUI 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 cách mở References ra:

Như bên hình thì mình đã thêm thành công, và các bạn làm tương tự đối với BUS và DAL theo mình nói bên trên nhé.
Thế là bạn đã liên kết xong cho mô hình 3 lớp.
C# – Mô hình 3 lớp đơn giản – Xây dựng mô hình 3 lớp: Xây dựng DTO
Cơ sở dữ liệu:
CSDL mình sẽ xài table ThanhVien như sau:
Xây dựng DTO
Mình sẽ tạo file DTO_ThanhVien.cs (Class file), về cơ bản thì các cột của table ThanhVien của mình ra sao thì mình tạo 1 class y hệt vậy kèm get/set và 2 hàm khởi tạo.
DTO_ThanhVien.cs
C# – Mô hình 3 lớp đơn giản – Xây dựng mô hình 3 lớp: Xây dựng Data Access
Tại sao mình lại xây dựng Data Access trước? Đơn giản là đây là lớp mà ta xử lý bên database, làm trước thì design GUI xong chỉ việc bỏ vào sử dụng thôi.
Điều quan trọng đầu tiên, chúng ta cần tạo class DBConnect.cs với nội dung như sau:
Chúng ta sẽ tạo SqlConnection và khởi tạo luôn, sau này các class DAL chúng ta chỉ cần kế thừa class DBConnect là có thể sử dụng _conn thoải mái ko cần khởi tạo lại.
Các bạn nhớ sửa lại connection string cho chuẩn bên máy của các bạn nhé. Ở đây vì bài tập đơn giản nên ta chịu khó hard-code vậy :D. Chúng ta có nhiều cách khác nhau để tránh hard-code nhưng mình sẽ nói sau ở các bài khác.
Mình sẽ tạo file DAL_ThanhVien.cs (Class file)
Ở đây mình sẽ làm sẵn luôn 4 methods là: Lấy tất cả, Thêm, Xóa, Sửa nhé
DAL_ThanhVien.cs:
C# – Mô hình 3 lớp đơn giản – Xây dựng mô hình 3 lớp: Xây dựng Business
Bước này là bước xử lý business logic (Business layer).
Ở bước này, ta có thể lấy dữ liệu từ DAL về, xử lý ABC XYZ gì đó 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 xử lý ABC XYZ gì đó cho data của chúng ta, rồi mới insert/update/delete chẳng hạn,…
Vì app mình build là app đơn giản, nên mình chỉ cần gọi lên DAL và trả về tương ứng cho GUI xài thui
Mình sẽ tạo BUS_ThanhVien.cs (Class file):
Chỉ đơn giản là gọi hàm và trả về thôi (app đơn giản mà @@)
C# – Mô hình 3 lớp đơn giản – Xây dựng mô hình 3 lớp: Xây dựng GUI
Về GUI thì mình sẽ design như sau (mình sẽ gửi source đầy đủ ở trang cuối nhé):

Và mình sẽ gán lần lượt các chức năng vào nhé:
Xây dựng mô hình 3 lớp: Lời kết + source files
Sau khi viết xong thì toàn bộ chương trình demo của mình.
