1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Seminar phương pháp mô hình hóa mô hình 3 lớp

29 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 29
Dung lượng 762,78 KB

Nội dung

lOMoARcPSD|20597478 ĐẠI HỌC QUỐC GIA TP HCM TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN SEMINAR CUỐI KỲ PHƯƠNG PHÁP MÔ HÌNH HÓA Đề tài MÔ HÌNH LỚP Lớp: SE101.M21.PMCL Nhóm TP HCM, Tháng 5, Năm 2022 lOMoARcPSD|20597478 BẢNG PHÂN CÔNG THỰC HIỆN Họ tên : Lưu Lê Bá Chính Họ tên : Nguyễn Trung Đức Họ tên: Nguyễn Ngọc Đức MSSV: 20521133 MSSV: 20521200 MSSV: 20520151 Họ tên: Lê Quan MSSV: 20521396 Tìm hiểu nội dung mơ hình lớp ? Có thành phần ? Tìm hiểu nội dung chi tiết thành phần mơ hình lớp Tìm hiểu nội dung cách hoạt động Demo Chỉnh sửa nội dung Góp ý Demo Góp ý Dem Viết báo cáo Thuyết trình Làm Slide Làm Slide Tìm hiểu nội dun nhược điểm s với mơ hình k lOMoARcPSD|20597478 Mục lục Mơ hình lớp gì…………………………………………………… Các thành phần mơ hình lớp………………………… … 2.1 Presentation Layer……………………………………………… 2.2 Business Logic Layer…………………………………………… 2.3 Data Access Layer…………………………………………… ….7 Cách hoạt động………………………………………………… … Ưu điểm nhược điểm………… ………………………… .…….9 So sánh mơ hình lớp MVC……………………………… ……10 Phân biệt 3-tier 3-layer 10 Demo .12 lOMoARcPSD|20597478 Mô hình lớp ? -Mơ hình lớp hay cịn gọi mơ hình Three Layer(3-Layer), mơ hình đời nhằm phân chia thành phần hệ thống, thành phần chức nhóm lại với phân chia cơng việc cho nhóm để liệu khơng bị chồng chéo qn -Mơ hình phát huy hiệu bạn xây dựng hệ thống lớn, việc quản lý code xử lý liệu lỗi dễ dàng Các thành phần mơ hình lớp Mơ hình 3-layer gồm có phần : – Presentation Layer (GUI) : Lớp có nhiệm vụ giao tiếp với người dùng Nó gồm thành phần giao diện ( win form, web form,…) thực công việc nhập liệu, hiển thị liêu, kiểm tra tính đắn liệu trước gọi lớp Business Logic Layer (BLL) – Business Logic Layer (BLL) : Layer phân thành nhiệm vụ : lOMoARcPSD|20597478  Đây nơi đáp ứng yêu cầu thao tác liệu GUI layer, xử lý nguồn liệu từ Presentation Layer trước truyền xuống Data Access Layer lưu xuống hệ quản trị CSDL  Đây nơi kiểm tra ràng buộc, tính tồn vẹn hợp lệ liệu, thực tính tốn xử lý u cầu nghiệp vụ, trước trả kết Presentation Layer – Data Access Layer (DAL) : Lớp có chức giao tiếp với hệ quản trị CSDL thực công việc liên quan đến lưu trữ truy vấn liệu ( tìm kiếm, thêm, xóa, sửa,…) Three-layer architecture lOMoARcPSD|20597478 2.1 Presentation Layer (GUI): Có hai thành phần sau với tác vụ cụ thể :  UI Components : gồm thành phần tạo nên giao diện ứng dụng (GUI) Chúng chịu trách nhiệm thu nhận hiển thị liệu cho người dùng…  UI Process Components : thành phần chịu trách nhiệm quản lý trình chuyển đổi UI… 2.2 Bussiness Layer (BLL) : Lớp gồm thành phần: Service Interface : thành phần giao diện lập trình mà lớp cung cấp cho lớp Presentation sử dụng  Bussiness Workflows : chịu trách nhiệm xác định điều phối quy trình nghiệp vụ gồm nhiều bước kéo dài Những quy trình phải xếp thực theo thứ tự xác  Bussiness Components : chịu trách nhiệm kiểm tra quy tắc nghiệp vụ, ràng buộc logic thực công việc Các thành phần thực dịch vụ mà Service Interface cung cấp Business Workflows sử dụng  Downloaded by Vu Gi (vuchinhhp4@gmail.com) lOMoARcPSD|20597478  Bussiness Entities : thường sử dụng Data Transfer Objects ( DTO ) Bạn sử dụng để truyền liệu lớp (Presentation Data Layer) Chúng thường cấu trúc liệu ( DataSets, XML,… ) hay lớp đối tượng tùy chỉnh 2.3 Data Layer (DAL) : DAL có chức ghi lại liệu quan trọng Vì mơ hình có phần là:  Data Access Logic Components : chịu trách nhiệm lưu trữ truy xuất liệu từ nguồn liệu (Data Sources) XML, file system,… Hơn tạo thuận lợi cho việc dễ cấu hình bảo trì  Service Agents : giúp bạn gọi tương tác với dịch vụ từ bên cách dễ dàng đơn giản Kinh nghiê ̣m xây dựng mơ hình lớp bạn cần thành lâ ̣p solution riêng cho project Trong có project khác để tạo lớp Thực hiê ̣n đă ̣t tên Project cần có tiền tố theo mẫu Tên lớp_Tên tê ̣p (Ví dụ: GUI_Quản lý) Tuy nhiên, để đảm bảo thống bạn nên đă ̣t tên theo nguyên tắc Dưới mô ̣t số cách đặt tên cho thành phần lớp, Ví dụ:  Mơ ̣t là, đă ̣t tên GUI - BUS - DAL  Hai là, sử dụng tên có chứa tiền tố GUI - BLL - DAL - DTO  Ba là, áp dụng tên có chứa GUI - BLL - DAL Cách hoạt động Downloaded by Vu Gi (vuchinhhp4@gmail.com) lOMoARcPSD|20597478 tiến trình giao tiếp từ GUI đến Data Acess Layer: - Người sử dụng tác động lên GUI u cầu hiển thị thơng tin lên hình Tại GUI kiểm tra yêu cầu người dùng nhập có hợp lệ hay khơng, khơng hợp lệ thông báo cho người dùng - Ngược lại yêu cầu gởi trực tiếp đến BLL thông qua lớp object DTO hỗ trợ luân chuyển , BLL xử lý nghiệp vụ yêu cầu người dùng, yêu cầu không hợp lệ tự xử lý yêu cầu không cần phải truy vấn BLL gởi thơng tin GUI GUI hiển thị kết cho người dùng - Trong trường hợp BLL cần thao tác liệu từ CSDL BLL gởi yêu cầu đến trực tiếp đến DAL thông qua DTO , nhờ DAL giao tiếp với hệ quản trị CSDL lấy thêm, xóa, sửa liệu - DAL giao tiếp hệ quản trị CSDL với truy vấn (sử dụng công nghệ ADO, LINQ to SQL, NHibernate, Entity Framework) Tại tiếp tục thực tiến trình thứ biểu diễn mũi tên màu xanh: Downloaded by Vu Gi (vuchinhhp4@gmail.com) lOMoARcPSD|20597478 - Sau DAL thực giao tiếp, hệ quản trị CSDL trả kết truy vấn DAL , DAL gởi thông tin liệu vừa lấy trực tiếp sang BLL thông qua DTO xử lý tiếp nghiệp vụ với yêu cầu gởi từ trước, sau xử lý xong nghiệp vụ, BLL gởi thông tin đến GUI , GUI hiển thị thông báo kết yêu cầu lên hình VD: Mơ tả hoạt động mơ hình 3-layer với ứng dụng liệt kê danh sách điểm sinh viên: Từ hình form quản lý sinh viên gồm có combobox chọn lớp, gridview để hiển thị danh sách sinh viên button để thực lệnh liệt kê danh sách - Người dùng chọn combobox lớp GUI ấn button liệt kê - GUI kiểm tra yêu cầu chọn combobox hợp lệ gởi mã lớp (**) vừa chọn sang BUS xử lý yêu cầu hiển thị danh sách điểm sinh viên - Tại BUS yêu cầu từ GUI đơn giản nên BUS khơng xử lý mà gởi mã lớp sang DAL lấy danh sách điểm - Tại DAL sau nhận yêu cầu lấy danh sách điểm từ mã lớp, DAL tương tác với hệ quản trị CSDL qua lệnh mở tập tin, kết nối, truy vấn,… để lấy danh sách điểm với mã số yêu cầu, DAL tiếp tục gởi danh sách (**) sang BUS để xử lý - Tại BUS sau nhận danh sách điểm từ DAL gởi sang, BUS thực nghiệp vụ cách tính điểm trung bình, kết luận đậu/rớt sinh viên (tất xử lý mặt nghiệp vụ), sau gởi danh sách điểm xử lý (**) sang GUI để hiển thị - lần GUI kiểm tra tính hợp lệ liệu hiển thị thơng tin thơng báo lên hình cho người dùng Một số câu kinh nghiệm sử dụng: - Các thao tác control như: kiểm tra nhập hợp lệ, ẩn control, xử lý thơng tin control ta đặt hàm xử lý GUI - Các thao tác liệu như: List, Array List, Object, DataTable, string, int, long, float,… ta xử lý tầng nghiệp vụ BUS, chất thay đổi hệ quản trị hay platform BUS khơng thay đổi - Các thao tác với CSDL truy vấn, kết nối, đóng kết nối,… ta xử lý DAL - Khi có nhu cầu thay đổi hệ quản trị CSDL, ta cần thay đổi DAL phù hợp với hệ quản trị mới, giữ nguyên BUS, GUI build lại project - Khi có nhu cầu chuyển đổi qua lại ứng dụng web forms win forms ta cần thay GUI, giữ nguyên DAL,BUS build lại project Downloaded by Vu Gi (vuchinhhp4@gmail.com) lOMoARcPSD|20597478 Ưu điểm nhược điểm mơ hình lớp Đây mơ hình nhà lâ ̣p trình tin học tin dùng sở hữu nhiều ưu điểm như: Việc phân chia thành lớp với nhiệm vụ khác mang lại hiê ̣u quản lý tường minh Khi chúng đảm nhận chức riêng biệt khác giảm kết dính Những người có kinh nghiê ̣m lâ ̣p trình thường áp dụng kiểm soát giao diện, xử lý, truy vấn, Hạn chế tối đa viê ̣c để tất lại chỗ nhằm quản lý maintain project tối ưu Dễ dàng phân loại hành động Business góp cơng lớn cơng tác bảo trì Khi phân chia thành nhóm, lâ ̣p trình viên nhanh chóng thay đổi cần bảo trì thành phần hệ thống Với mơ hình lớp , thao tác thay đổi liê ̣u cô lập lớp ảnh hưởng đến lớp gần Điều đảm bảo khơng ảnh hưởng đến chương trình, tiết kiê ̣m thời gian công sức Thao tác phân loại hàm truy xuất Database hay phân loại hàm theo table,… Chúng trở nên dễ dàng có chuẩn để tn theo Nhờ có mơ hình viê ̣c muốn thêm chức dễ dàng Khi có thay đổi hai mơi trường từ Winform sang Webform Và bạn mong muốn tái sử dụng việc thay đổi lớp GUI Nếu người tuân theo quy chuẩn định sẵn, bàn giao cơng viê ̣c trở nê dễ dàng tiết kiê ̣m thời gian Các thành viên tương tác thuận tiện Mơ hình quản lý lớp hỗ trợ phân phối nhiệm vụ, khối lượng cơng việc rõ ràng Đồng thời, giúp lập trình viên kiểm sốt cơng tác Với ưu điểm tu ̣t vời, mơ hình cho phéo áp dụng cho nhiều project lớn bên Downloaded by Vu Gi (vuchinhhp4@gmail.com) lOMoARcPSD|20597478 Bây bắt đầu tạo, Project DTO, Business Data Access tạo theo Class Library Và tạo xong, ta có project sau Downloaded by Vu Gi (vuchinhhp4@gmail.com) lOMoARcPSD|20597478 Và liên kết, làm project GUI trước Đầu tiên ta chọn chuột fải vào References => Add Reference Một bảng ra, mục Project ta chọn lớp mà lớp GUI liên kết tới BUS DTO: Downloaded by Vu Gi (vuchinhhp4@gmail.com) lOMoARcPSD|20597478 Cứ OK Reference thêm vào GUI, kiểm tra cách mở References ra: Làm tương tự BUS DAL theo bên Thế liên kết xong cho mơ hình lớp Downloaded by Vu Gi (vuchinhhp4@gmail.com) lOMoARcPSD|20597478 C# – Mơ hình lớp đơn giản – Xây dựng mơ hình lớp: Xây dựng DTO Cơ sở liệu: CSDL xài table ThanhVien 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 tạo file DTO_ThanhVien.cs (Class file), cột table ThanhVien tạo class y hệt kèm get/set 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; } set { _THANHVIEN_ID = value; } } Downloaded by Vu Gi (vuchinhhp4@gmail.com) lOMoARcPSD|20597478 public string THANHVIEN_NAME { get { return _THANHVIEN_NAME; } set { _THANHVIEN_NAME = value; } } public string THANHVIEN_PHONE { get { return _THANHVIEN_PHONE; } set { _THANHVIEN_PHONE = value; } } public string THANHVIEN_EMAIL { get { return _THANHVIEN_EMAIL; } set { _THANHVIEN_EMAIL = value; } } /* === Constructor === */ public DTO_ThanhVien() { } Downloaded by Vu Gi (vuchinhhp4@gmail.com) lOMoARcPSD|20597478 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# – Mơ hình lớp đơn giản – Xây dựng mơ hình lớp: Xây dựng Data Access Tại lại xây dựng Data Access trước? Đơn giản là lớp mà ta xử lý bên database, làm trước design GUI xong việc bỏ vào sử dụng Điều quan trọng đầu tiên, cần tạo class DBConnect.cs với nội dung 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 tạo SqlConnection khởi tạo luôn, sau class DAL ta cần kế thừa class DBConnect sử dụng _conn khơng cần khởi tạo lại Phải sửa lại connection string chuẩn Ta tạo file DAL_ThanhVien.cs (Class file) Ở làm sẵn methods là: Lấy tất cả, Thêm, Xóa, Sửa DAL_ThanhVien.cs: using using using using using using using System; System.Collections.Generic; System.Linq; System.Text; System.Data; System.Data.SqlClient; DTO_QuanLy; namespace DAL_QuanLy Downloaded by Vu Gi (vuchinhhp4@gmail.com) lOMoARcPSD|20597478 { public class DAL_ThanhVien : DBConnect { /// /// Get toàn 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 thành viên /// /// /// public bool themThanhVien(DTO_ThanhVien tv) { try { // Ket noi _conn.Open(); // Query string - để TV_ID identity (giá trị tự tăng dần) nên ko cầ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 khỏi fải làm nhiều) SqlCommand cmd = new SqlCommand(SQL, _conn); // Query kiểm tra if (cmd.ExecuteNonQuery() > 0) return true; } catch (Exception e) { Downloaded by Vu Gi (vuchinhhp4@gmail.com) lOMoARcPSD|20597478 } 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 khỏi fải làm nhiều) SqlCommand cmd = new SqlCommand(SQL, _conn); // Query kiểm tra if (cmd.ExecuteNonQuery() > 0) return true; } catch (Exception e) { } finally { // Dong ket noi Downloaded by Vu Gi (vuchinhhp4@gmail.com) lOMoARcPSD|20597478 _conn.Close(); } return false; } /// /// Xóa thành viên /// /// /// public bool xoaThanhVien(int TV_ID) { try { // Ket noi _conn.Open(); // Query string - xóa cần ID nên ko cần DTO, ID đủ string SQL = string.Format("DELETE FROM THANHVIEN WHERE TV_ID = {0})", TV_ID); // Command (mặc định command type = text nên khỏi fải làm nhiều) SqlCommand cmd = new SqlCommand(SQL, _conn); // Query kiểm tra if (cmd.ExecuteNonQuery() > 0) return true; } catch (Exception e) { } finally { // Dong ket noi _conn.Close(); } return false; } } Downloaded by Vu Gi (vuchinhhp4@gmail.com) lOMoARcPSD|20597478 } C# – Mơ hình lớp đơn giản – Xây dựng mơ hình lớp: Xây dựng Business Bước bước xử lý business logic (Business layer) Ở bước này, ta lấy liệu từ DAL về, xử lý ABC XYZ trả lại cho GUI sử dụng Hoặc update liệu DB, GUI gửi data lên BUS ta xử lý ABC XYZ cho data chúng ta, insert/update/delete chẳng hạn,… Vì app build app đơn giản, nên cần gọi lên DAL trả tương ứng cho GUI xài thui Mình tạo BUS_ThanhVien.cs (Class file): using System; using System.Collections.Generic; using using using using using System.Linq; System.Text; System.Data; DAL_QuanLy; 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); Downloaded by Vu Gi (vuchinhhp4@gmail.com) lOMoARcPSD|20597478 } } } C# – Mơ hình lớp đơn giản – Xây dựng mơ hình lớp: Xây dựng GUI Về GUI design sau Và gán chức vào using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; Downloaded by Vu Gi (vuchinhhp4@gmail.com) lOMoARcPSD|20597478 using System.Windows.Forms; using DTO_QuanLy; using BUS_QuanLy; namespace GUI_QuanLy { public partial class GUI_ThanhVien : Form { BUS_ThanhVien busTV = new BUS_ThanhVien(); public GUI_ThanhVien() { InitializeComponent(); } private void btnExit_Click(object sender, EventArgs e) { Application.Exit(); } private void btnAdd_Click(object sender, EventArgs e) { if (txtEmail.Text != "" && txtName.Text != "" && txtSDT.Text != "") { // Tạo DTo DTO_ThanhVien tv = new DTO_ThanhVien(0, txtName.Text, txtSDT.Text, txtEmail.Text); // Vì ID tự tăng nên để ID số dc // Them if (busTV.themThanhVien(tv)) { MessageBox.Show("Thêm thành công"); dgvTV.DataSource = busTV.getThanhVien(); // refresh datagridview } else { MessageBox.Show("Thêm ko thành công"); } } else { MessageBox.Show("Xin nhập đầy đủ"); Downloaded by Vu Gi (vuchinhhp4@gmail.com) lOMoARcPSD|20597478 } } private void GUI_ThanhVien_Load(object sender, EventArgs e) { dgvTV.DataSource = busTV.getThanhVien(); // get vien } private void btnEdit_Click(object sender, EventArgs e) { // Kiểm tra có chọn table if (dgvTV.SelectedRows.Count > 0) { if (txtEmail.Text != "" && txtName.Text != "" && txtSDT.Text != "") { // Lấy row DataGridViewRow row = dgvTV.SelectedRows[0]; int ID = Convert.ToInt16(row.Cells[0].Value.ToString()); // Tạo DTo DTO_ThanhVien tv = new DTO_ThanhVien(ID, txtName.Text, txtSDT.Text, txtEmail.Text); // Vì ID tự tăng nên để ID số dc // Sửa if (busTV.suaThanhVien(tv)) { MessageBox.Show("Sửa thành công"); dgvTV.DataSource = busTV.getThanhVien(); // refresh datagridview } else { MessageBox.Show("Sửa ko thành công"); } } else { MessageBox.Show("Xin nhập đầy đủ"); } } else { Downloaded by Vu Gi (vuchinhhp4@gmail.com) lOMoARcPSD|20597478 MessageBox.Show("Hãy chọn thành viên muốn sửa"); } } private void dgvTV_Click(object sender, EventArgs e) { // Lấy row DataGridViewRow row = dgvTV.SelectedRows[0]; // Chuyển giá trị lên form txtName.Text = row.Cells[1].Value.ToString(); txtSDT.Text = row.Cells[2].Value.ToString(); txtEmail.Text = row.Cells[3].Value.ToString(); } private void btnDelete_Click(object sender, EventArgs e) { // Kiểm tra có chọn table if (dgvTV.SelectedRows.Count > 0) { // Lấy row DataGridViewRow row = dgvTV.SelectedRows[0]; int ID = Convert.ToInt16(row.Cells[0].Value.ToString()); // Xóa if (busTV.xoaThanhVien(ID)) { MessageBox.Show("Xóa thành cơng"); dgvTV.DataSource = busTV.getThanhVien(); // refresh datagridview } else { MessageBox.Show("Xóa ko thành cơng"); } } else { MessageBox.Show("Hãy chọn thành viên muốn xóa"); } } } } Downloaded by Vu Gi (vuchinhhp4@gmail.com) lOMoARcPSD|20597478 Kết thúc Video cụ thể : Downloaded by Vu Gi (vuchinhhp4@gmail.com)

Ngày đăng: 22/06/2023, 20:54

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w