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
Trang 1LẬP TRÌNH JAVA
Giảng viên: Tạ Việt Phương E-mail: phuongtv@uit.edu.vn
Ch 6 MÔ HÌNH 3 LỚP
Trang 2Nội dung
1 Giới thiệu
2 Mô hình 3 layer
3 Mô hình MVC
Trang 3GIỚI THIỆU
Trang 4Giới thiệu
◂ Mô hình 3 lớp:
◂ 3 tiers ?
◂ 3 layer ?
Trang 5Giới thiệu
◂ 3 tiers - 3 tầng
◂ 3 layer - 3 lớp
Trang 63-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
Trang 73-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.
Trang 8MÔ HÌNH 3 LAYER
Trang 9Mô 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 để
Trang 10Tổ 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à
Trang 11Tổ 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
Trang 12Tổ chức mô hình 3 layer
Trang 13Tổ chức mô hình 3 layer
◂ Lớp này có nhiệm vụ chính là giao tiếp với người
Trang 14Tổ chức mô hình 3 layer
◂ 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ị
Trang 15Tổ chức mô hình 3 layer
◂ 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,…)
Trang 16Tổ chức mô hình 3 layer
◂ 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.
Trang 17◂ 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.
Trang 18◂ 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.
Trang 20Cách thức vận hành
Trang 22Ư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
Trang 23Ví dụ
Trang 24Ví dụ
◂ CSDL QLNhanSu có bảng Employee với cấu trúc
như sau:
Trang 25Ví dụ
Trang 26Ví dụ
public class employeeDTO {
private int employee_id;
private String employee_name;
private int birthyear;
private String address;
public int getEmployee_id() {
Trang 27Ví 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; }}
Trang 28public class employeeDAL {
private Connection con;
public boolean openConnection() {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String dbUrl = "jdbc:sqlserver://localhost:1433;
Trang 30Ví dụ
public Vector<employeeDTO> getAllEmployees(){
Vector<employeeDTO> arr = new Vector<employeeDTO>();
Trang 31public boolean addEmployee(employeeDTO emp) {
boolean result = false;
if (openConnection()) {
try {
String sql = “Insert into Employee values(?,?,?,?)";
Trang 33Ví dụ
public boolean hasEmployeeID(int id){
boolean result = false;
Trang 34public class employeeBLL {
employeeDAL empDAL = new employeeDAL();
public Vector<employeeDTO> getAllEmployees(){
return empDAL.getAllEmployees();
}
Trang 35return "Thêm thành công";
return "Thêm thất bại";
}
}
Trang 36Ví dụ
package GUI;
import BLL.employeeBLL; import DTO.employeeDTO;
import java.awt.*; import java.awt.event.*;
import javax.swing.*; import java.util.Vector;
import javax.swing.table.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();
Trang 37Ví dụ
public void initComponents() {
… // khởi tạo các thành phần giao diện
}
public void loadEmployeeList(){
DefaultTableModel dtm = new DefaultTableModel();
Trang 38String name = em.getEmployee_name();
int birthyear = em.getBirthYear();
String address = em.getAddress();
Object[] row = {id,name,birthyear,address};
dtm.addRow(row);
}
}
}
Trang 40} catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(this, “Thông tin không
hợp lệ");
}
}
Trang 41Ví dụ
◂ Presentation layer (main.java)
package GUI;
public class main {
public static void main(String[] args){
employeeGUI frm = new employeeGUI();
frm.setVisible(true);
}
}
Trang 42MÔ HÌNH MVC
Trang 43Mô 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.
Trang 44Mô 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
Trang 45Mô hình MVC
Trang 46Mô hình MVC
Trang 47Mô 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 –
◂ Khi Model hoàn tất việc xử lý, View sẽ nhận kết quả từ Model và hiển thị lại cho người dùng.
Trang 48Mô hình 3 lớp và MVC
◂ 3 Layer và MVC là 2 mô hình phổ biến trong lập trình
và có nhiều điểm giống nhau
◂ Điểm khác biệt của mô hình MVC so với mô hình 3 lớp: Khác biệt rõ nhất là cách xử lý yêu cầu
(workflow) của 2 mô hình Ở MVC, thành phần Model giữ chức năng của cả lớp Business và Data Access trong mô hình 3 Layer.
◂ 3 Layer thường được sử dụng trong lập trình ứng
dụng Trong khi đó, MVC được ưu chuộng nhiều
trong lập trình website vì tính linh hoạt và không bắt
Trang 49Ví dụ
Trang 50Ví dụ
◂ Model
Trang 51Ví dụ
◂ View
Trang 52Ví dụ
◂ Controller
Trang 53Ví dụ
Trang 54Ví dụ
◂ Main
public class MVCPattern {
public static void main(String[] args){
LoginView view = new LoginView();
LoginController control = new LoginController(view);
Control.login();
}}
Trang 55Q & A
Giảng viên: Tạ Việt Phương E-mail: phuongtv@uit.edu.vn