Demo mô hình 3 lớp
Trong phần trước mình đã giới thiệu cơ bản về mô hình 3 lớp, trong phần này mình sẽ thực hiện 1 ví dụ về mô hình 3 lớp này.
Cơ sở dữ liệu
Lướt qua cơ sở dũ liệu tí nào, đơn giản thôi. Ở đây Id
là khóa chính tự động tăng cho đơn giản nhé.
Giao diện
Tổ chức Project
StudentDTO
Nên nhớ đây không phải là 1 layer mà chỉ là đối tượng trao đổi dữ liệu giữa các layers. Có thể bỏ các namespace
không cần thiết đi.
StudentBLL
Các nghiệp vụ chính xử lí cho lớp Student. Ở đây gồm 3 phương thức cơ bản là lấy danh sách, thêm, xóa và cập nhật.
- Phương thức
Remove(string name)
nên nhận vào tham số là khóa chính (Id
), nhưng vì ở đây mình ví dụ khóa chính là số tự động tăng nên dùng tên cho đơn giản. - Lớp xử lý nghiệp vụ sẽ gọi lại các phương thức xử lý ở DAL nên trước hết chỉ cần viết đúng ngữ nghĩa, logic sẽ được xử lý sau.
StudentDAL
Đầu tiên sẽ là phương thức lấy danh sách tất cả các học sinh, việc này đơn giản chỉ là gọi câu lệnh (trong sql)
Mình đã có phương thức để trả về 1 DataTable
trước đó, chỉ cần gọi là truyền vào câu truy vấn như trên để lấy về 1 bảng danh sách các học sinh, từ đó với mỗi hàng dữ liệu chỉ cần lấy ra các cột tương ứng.
Trong đó:
Lớp DataHelper như đã giới thiệu ở phần ADO.NET (*)
Và phương thức GetStudentFromDataRow
như sau
Vậy là mình đã có 2 layers là BLL và DAL. Giờ sẽ là phần việc của layer thứ 3: GUI. Trong giao diện mình sẽ hiển thị ra danh sách của học sinh (1), việc lấy danh sách sẽ được BLL đưa ra (2), và BLL sẽ gọi DAL (3) để lấy danh sách từ CSDL. Bạn đã thấy được mô hình 3 lớp hoạt động thế nào chưa? Và giữa 3 lớp đó, DTO (StudentDTO) chỉ là lớp lưu trữ dữ liệu và trao đổi giữa các lớp đó mà thôi.
GUI
Và kết quả
Tổng quan mô hình
Hãy xem xét cách làm việc tổng thể của mô hình như sau
Không có gì cần phải giải thích nhiều. Ở đây, tầng trên muốn làm gì thì gọi tầng dưới làm thay, tầng dưới làm xong rồi thì trả kết quả lại cho tầng trên. Vô cùng đơn giản!
Phần còn lại...
Bây giờ thì bạn đã hiểu cách hoạt động của mô hình 3 lớp, do vậy các phương thức còn lại không khó để viết. Sau đây là phần thêm mới 1 sinh viên cho button Add.
Trong BLL
Trong DAL
Hoàn toàn tương tự đối với phần Update, do vậy các bạn hãy thử tự mình code phần đó đi nhé.
Cho mình xin cái source đi bạn.
ReplyDeleteCủa bạn đây: https://www.dropbox.com/s/pk9yyjji9gmitlv/3layers.rar?dl=0
DeleteCảm ơn bạn.
Deletesủa, xóa sao bạn? :D
ReplyDeleteXóa, sửa bạn làm tương tự, chỉ thay bằng câu lệnh delete và update thôi. Bạn có thể download source code ở comment trên để xem.
DeleteChào bạn. Trong code có sử dụng connectionstring ... Mình muốn hỏi là nếu dùng như thế thì đâu biết được là chương trình sẽ vào đúng csdl nào và đúng table nào ??? Bạn phản hồi nhé :))
ReplyDelete"
public DataHelper()
{
var connStr = ConfigurationManager.AppSettings["ConnectionString"];
_connection = new SqlConnection(connStr);
}
"
Cách tạo nhanh cái DTO như thế nào bạn?
ReplyDelete: ) nó là 1 class bình thường nên cũng chỉ có thể add bình thường thôi nhé @Dẫn
DeleteService Interface,Service Interface,Bussiness Component,Bussiness Entities là gì, công dụng và chức năng của chúng trong BLL. ad có thể giải thích cho mình được không ạ
ReplyDeletehi,
Deletetrong mô hình 3 layers, bạn làm sao để các layer phân tách ra rõ ràng và đảm nhận 1 vai trò chuyên biệt là được, còn chuyện đặt tên nó ra sao thì tùy mỗi người. Hơn nữa trong ví dụ của mình không dùng những khái niệm đó, bạn có thể đưa sample để mình giải thích rõ ràng hơn.
Ad dành ít thời gian giải đáp câu hỏi của mình ạ.
Delete-Khi thiết kế BLL thì không nhất thiết phải có 4 phần :Service Interface,Service Interface,Bussiness Component,Bussiness Entities đúng không ạ
mình có 4 bảng:
TB_DocGia(id_Docgia(Pk), hovaten)
TB_phieumuon(id_phieumuon(Pk), id_docgia(fk), ngaymuon)
TB_ChiTietPhieuMuon( id_phieumuon(fk), id_sach(fk))
TB_Sach(Id_sach (pk), tensach )
Trên GUI (Phiếu mượn) có 1 table mình muốn hiển thị mình muốn hiện thị tất cả các thông tin của 4 bảng kia thì ở phần BLL mình thiết kế như thế nào ạ.
Kiến thức của mình còn kém, nếu câu hỏi sai mong AD bỏ qua. mình có tìm hiểu kha khá trên youtube hay GG mà chưa thu được nhiều lắm kết quả, Hi vọng AD giúp mình , mình trân thành cảm ơn ạ
-
có lẽ bài viết của mình không được hữu ích với bạn lắm nên bạn mới có những câu hỏi như thế này. Chuyện này mình không thể giải thích cho bạn hiểu bằng comment được vì comment cũng giống như bài post của mình ở trên. Nếu bạn muốn chi tiết có thể add skype của mình "oclockvn" để tiện trao đổi. Cheers.
Delete