LẬP TRÌNH JAVA Ch 6. MÔ HÌNH 3 LỚP Giảng viên: Tạ Việt Phương E-mail: phuongtv@uit.vn Nội dung 1. Mô hình 3 layer 3. Mô hình MVC 2 GIỚI THIỆU 3 Giới thiệu ◂ Mô hình 3 lớp: ◂ 3 tiers ? ◂ 3 layer ? 4 Giới thiệu ◂ 3 tiers - 3 tầng ◂ 3 layer - 3 lớp 5 3-tiers và 3-layer ◂ 3-tiers là một kiến trúc kiểu client/server mà trong đó giao diện người dùng (UI-user interface), các quy tắc xử lý (BR- business rule hay BL-business logic), và việc lưu trữ dữ liệu được phát triển như những module độc lập, và hầu hết là được duy trì trên các nền tảng độc lập, và mô hình 3 tầng (3-tiers) được coi là một kiến trúc phần mềm và là một mẫu thiết kế.
◂ Tầng Presentation: hiển thị các thành phần giao diện để tương tác với người dùng như tiếp nhận thông tin, thông báo lỗi, … ◂ Tầng Business Logic: thực hiện các hành động nghiệp vụ của phần mềm như tính toán, đánh giá tính hợp lệ của thông tin, Tầng này còn di chuyển, xử lí thông tin giữa 2 tầng trên dưới. ◂ Tầng Data: nơi lưu trữ và trích xuất dữ liệu từ các hệ quản trị CSDL hay các file trong hệ thống. Cho phép tầng Business logic thực hiện các truy vấn dữ liệu 6 3-tiers và 3-layer ◂ Nếu 3 tiers có tính vật lí thì 3 layer có tính logic. Nghĩa là ta phân chia ứng dụng thành các phần (các lớp) theo chức năng hoặc vai trò một cách logic.
Các layer khác nhau được thực thi trong 1 phân vùng bộ nhớ của process. Vì thế nên một tier có thể có nhiều layer. ◂ “Lớp” đề cập đến bộ phận chức năng của phần mềm, nhưng “tầng” đề cập đến bộ phận chức năng của phần mềm chạy trên cơ sở hạ tầng tách biệt với các bộ phận khác. 7 MÔ HÌNH 3 LAYER 8 Mô hình 3 lớp ◂ Trong phát triển ứng dụng, mô hình 3 lớp ra đời nhằm phân chia các thành phần trong hệ thống để dễ quản lý ◂ Các thành phần cùng chức năng sẽ được nhóm lại với nhau và phân chia trách nhiệm cho từng nhóm để công việc không bị chồng chéo và ảnh hưởng lẫn nhau 9 Tổ chức mô hình 3 layer ◂ Mô hình 3-layer gồm có 3 phần chính: ◂ Presentation Layer (GUI) : Lớp này có nhiệm vụ chính giao tiếp với người dùng.
Nó gồm các thành phần giao diện ( win form, web form,…) và thực hiện các công việc như nhập liệu, hiển thị dữ liêu, kiểm tra tính đúng đắn dữ liệu trước khi gọi lớp Business Logic Layer (BLL). ◂ Business Logic Layer (BLL) : Layer này phân ra 2 thành nhiệm vụ : ◂ Đây là nơi đáp ứng các yêu cầu thao tác dữ liệu của GUI layer, xử lý chính nguồn dữ liệu từ Presentation Layer trước khi truyền xuống Data Access Layer và lưu xuống hệ quản trị CSDL. ◂ Đây còn là nơi kiểm tra các ràng buộc, tính toàn vẹn và hợp lệ dữ liệu, thực hiện tính toán và xử lý các yêu cầu nghiệp vụ, trước khi trả kết quả về Presentation Layer. 10 Tổ chức mô hình 3 layer ◂ Mô hình 3-layer gồm có 3 phần chính: ◂ Data Access Layer (DAL): Lớp này có chức năng giao tiếp với hệ quản trị CSDL như thực hiện các công việc liên quan đến lưu trữ và truy vấn dữ liệu ( tìm kiếm, thêm, xóa, sửa,…).
◂ Một số cách đặt tên khác nhau cho 3 layer: ◂ Cách 1: GUI, BUS, DAL ◂ Cách 2: GUI, BLL, DAO, DTO ◂ Cách 3: Presentation, BLL, DAL 11 Tổ chức mô hình 3 layer 12 Tổ chức mô hình 3 layer ◂ Presentation Layer (GUI) ◂ Lớp này có nhiệm vụ chính là giao tiếp với người dùng. ◂ Gồm các thành phần giao diện và thực hiện các công việc như nhập liệu, hiển thị dữ liệu, kiểm tra tính đúng đắn dữ liệu trước khi gọi lớp Business Logic Layer. 13 Tổ chức mô hình 3 layer ◂ Business Logic Layer (BLL/BUS) ◂ Xử lý dữ liệu từ Presentation Layer trước khi truyền xuống Data Access Layer và lưu xuống hệ quản trị CSDL. ◂ Kiểm tra các ràng buộc, tính toàn vẹn và hợp lệ dữ liệu, thực hiện tính toán và xử lý các yêu cầu nghiệp vụ, trước khi trả kết quả về Presentation Layer.
14 Tổ chức mô hình 3 layer ◂ Data Access Layer (DAL/DAO) ◂ Lớp này có chức năng giao tiếp với hệ quản trị CSDL ◂ Thực hiện các công việc liên quan đến lưu trữ và truy xuất dữ liệu (đọc, thêm, xóa, sửa,…) 15 Tổ chức mô hình 3 layer ◂ Data Transfer Object (DTO) ◂ Các layer trao đổi dữ liệu thông qua Data Transfer Object (DTO). ◂ DTO là đối tượng chứa dữ liệu, được tạo từ các DTO class đại diện cho các đối tượng được lưu trữ trong CSDL. 16 Cách thức vận hành ◂ Đầu tiên người dùng giao tiếp với Presentation Layer (GUI) để gửi thông tin yêu cầu. ◂ Tại GUI, các thông tin sẽ được kiểm tra sơ bộ, nếu hợp lệ sẽ được chuyển xuống Business Logic Layer (BLL).
◂ BLL sẽ kiểm tra và tính toán các yêu cầu nghiệp vụ, nếu yêu cầu không hợp lệ hoặc không cần đến database thì BLL sẽ trả kết quả về cho GUI. 17 Cách thức vận hành ◂ Ngược lại, BLL sẽ gửi yêu cầu (đã xử lý nghiệp vụ) xuống Data Access Layer (DAL). ◂ DAL sẽ thao tác với hệ quản trị CSDL và trả kết quả về cho BLL. ◂ BLL kiểm tra và gửi kết quả lên GUI.
◂ GUI sẽ hiển thị thông báo và kết quả yêu cầu cho người dùng. 18 Cách thức vận hành ◂ Một khi gặp lỗi (các trường hợp không đúng dữ liệu) thì đang ở layer nào thì đưa lên trên layer cao hơn nó 1 bậc cho tới GUI thì sẽ đưa ra cho người dùng biết – Các dữ liệu được trung chuyển giữa các Layer thông qua Data Transfer Object (DTO) 19 Cách thức vận hành 20 Ưu điểm ◂ Giúp code được tường minh hơn, giảm sự kết dính nhờ vào việc chia ra từng lớp đảm nhận các chức năng khác nhau và riêng biệt như giao diện, xử lý, truy vấn. ◂ Dễ bảo trì: Khi 1 thành phần của hệ thống thay đổi, việc thay đổi này có thể được cô lập trong 1 lớp, hoặc ảnh hưởng đến lớp gần nhất mà không ảnh hưởng đến cả chương trình. 21 Ưu điểm ◂ Dễ phát triển: Khi muốn thêm chức năng nào đó thì việc lập trình theo mô hình sẽ dễ dàng hơn vì đã có chuẩn để tuân theo.
◂ Dễ bàn giao: Việc bàn giao, tương tác với nhau sẽ dễ dàng, nhanh chóng hơn vì mọi người đều theo một quy chuẩn định sẵn. ◂ Dễ phân phối khối lượng công việc: Mỗi nhóm sẽ nhận 1 nhiệm vụ được phân chia rõ ràng trong mô hình 3 lớp 22 Ví dụ 23 Ví dụ ◂ CSDL QLNhanSu có bảng Employee với cấu trúc như sau: 24 Ví dụ 25 Ví dụ ◂ Data transfer object (employeeDTO.employee_id = employee_id; } public String getEmployee_name() { return employee_name; } 26 Ví dụ public void setEmployee_name(String employee_name) { this.employee_name = employee_name; } public int getBirthYear() { return birthyear; } public void setBirthYear(int birthyear) { this.birthyear = birthyear; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } } 27 Ví dụ ◂ Data access layer (employeeDAL.java) package DAL; import DTO.employeeDTO; import java.Vector; public class employeeDAL { private Connection con; public boolean openConnection() { try { Class.SQLServerD river"); String dbUrl = "jdbc:sqlserver://localhost:1433; DatabaseName=QLNhanSu"; String username = "sa"; String password= ""; con = DriverManager.println(ex); } } 29 Ví dụ public Vector<employeeDTO> getAllEmployees(){ Vector<employeeDTO> arr = new Vector<employeeDTO>(); if (openConnection()) { try { String sql = “Select * from Employee"; Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(sql); while(rs.setEmployee_id(rs.setEmployee_name(rs.getString("address")); 30 Ví dụ arr.println(ex); } finally { closeConnection(); } } return arr; } public boolean addEmployee(employeeDTO emp) { boolean result = false; if (openConnection()) { try { String sql = “Insert into Employee values(?,?,?,?)"; 31 Ví dụ PreparedStatement stmt = con.getEmployee_id()); stmt.getEmployee_name()); stmt.getAddress()); if (stmt.println(ex); } finally{ closeConnection(); } } return result; } 32 Ví dụ public boolean hasEmployeeID(int id){ boolean result = false; if (openConnection()) { try { String sql = “Select * from Employee where employee_id="+id; Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(sql); result = rs.println(ex); } finally { closeConnection(); } } return result; } } 33 Ví dụ ◂ Business Logic Layer (employeeBLL.java) package BLL; import DAL.employeeDAL; import DTO.employeeDTO; import java.Vector; public class employeeBLL { employeeDAL empDAL = new employeeDAL(); public Vector<employeeDTO> getAllEmployees(){ return empDAL.getAllEmployees(); } 34 Ví dụ public String addEmployee(employeeDTO emp) { if (empDAL.getEmployee_id())) return "Mã NV đã tồn tại"; if (empDAL.addEmployee(emp)) return "Thêm thành công"; return "Thêm thất bại"; } } 35 Ví dụ ◂ Presentation layer (employeeGUI.java) package GUI; import BLL.employeeBLL; import DTO.employeeDTO; import java.Vector; import javax.DefaultTableModel; public class employeeGUI extends JFrame { employeeBLL empBLL = new employeeBLL(); JTable jTable1; … // khai báo các thành phần giao diện khác public employeeGUI() { initComponents(); loadEmployeeList(); } 36 Ví dụ public void initComponents() { …. // khởi tạo các thành phần giao diện } public void loadEmployeeList(){ DefaultTableModel dtm = new DefaultTableModel(); dtm.setModel(dtm); Vector<employeeDTO> arr = new Vector<employeeDTO>(); 37 Ví dụ arr = empBLL.getAllEmployees(); for(int i = 0; i < arr.size(); i++){ employeeDTO em = arr.get(i); int id = em.getEmployee_id(); String name = em.getEmployee_name(); int birthyear = em.getBirthYear(); String address = em.getAddress(); Object[] row = {id,name,birthyear,address}; dtm.addRow(row); } } } 38 Ví dụ public void addEmployeeActionPerformed(ActionEvent e) { try { if (txtID.setEmployee_id(Integer.setEmployee_name(txtName.getText()); 39 Ví dụ em.showMessageDialog(this, empBLL.showMessageDialog(this, “Thông tin không hợp lệ"); } } 40 Ví dụ ◂ Presentation layer (main.java) package GUI; public class main { public static void main(String[] args){ employeeGUI frm = new employeeGUI(); frm.setVisible(true); } } 41 MÔ HÌNH MVC 42 Mô hình MVC ◂ Mô hình MVC (Model – View – Controller) là một kiến trúc phần mềm hay mô hình thiết kế được sử dụng trong kỹ thuật phần mềm. Nó giúp cho các developer tách ứng dụng của họ ra 3 thành phần khác nhau Model, View và Controller.
Mỗi thành phần có một nhiệm vụ riêng biệt và độc lập với các thành phần khác. 43 Mô hình MVC ◂ Các thành phần của MVC: ◂ Model: Đây là thành phần chứa tất cả các nghiệp vụ logic, phương thức xử lý, truy xuất database, đối tượng mô tả dữ liệu như các Class, hàm xử lý… ◂ View: Đảm nhận việc hiển thị thông tin, tương tác với người dùng, nơi chứa tất cả các đối tượng GUI như textbox, images…Hiểu một cách đơn giản, nó là tập hợp các form hoặc các file HTML ◂ Controller: Giữ nhiệm vụ nhận điều hướng các yêu cầu từ người dùng và gọi đúng những phương thức xử lý chúng… Chẳng hạn thành phần này sẽ nhận request từ url và form để thao tác trực tiếp với Model. 44 Mô hình MVC 45 Mô hình MVC 46 Mô hình MVC ◂ MVC làm việc như thế nào? ◂ User tương tác với View, bằng cách click vào button, user gửi yêu cầu đi. ◂ Controller nhận và điều hướng chúng đến đúng phương thức xử lý ở Model.
◂ Model nhận thông tin và thực thi các yêu cầu.