You are on page 1of 26

Mô hình 3 tầng

LOGO
04/15/24
Mô hình 3 lớp
Nội dung

1 Khái niệm

2 Các thành phần cơ bản

3 Phương thức hoạt động

4 Lập trình mô phỏng


1. KHÁI NIỆM

 Mô hình 3 lớp được cấu thành từ:


+ Presentation Layers
+ Business Layers
+ Data Layers
 Các lớp này sẽ giao tiếp với nhau thông qua các
dịch vụ (services) mà mỗi lớp cung cấp để tạo
nên ứng dụng.

04/15/24
2. Các thành phần của mô hình 3 tầng

Kiến trúc

User

UI Component
UI Processor Component
Operational Managerment

Service Inteface
Comunication

Security

Businnesss Workflows Businness Components Businness Entities

Data Access Components Service Agent

Data Source
Service

04/15/24
 Mô hình 3 tầng là một kiến trúc kiểu client/server mà trong đó giao diện
người dùng, các quy tắc xử lý, và việc lưu trữ dữ liệu được phát triển như
những module độc lập.
 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.
Giải thích các thành phần

 Presentation Layers
- Lớp này làm nhiệm vụ giao tiếp với người dùng cuối để thu thập dữ liệu
và hiển thị kết quả/dữ liệu thông qua các thành phần trong giao diện
người sử dụng. Lớp này sẽ sử dụng các dịch vụ do lớp Business Logic
cung cấp.Trong lớp này có 2 thành phần chính là User Interface
Components và User Interface Process Components.
UI Components: là những phần tử chịu trách nhiệm thu thập và hiển thị
thông tin cho người dùng cuối. Trong .NET thì những thành phần này có
thể là các TextBox, các Button, DataGrid…

04/15/24
UI Process Components: là thành phần chịu trách nhiệm quản lý các qui trình
chuyển đổi giữa các UI Components. Ví dụ chịu trách nhiệm quản lý các màn
hình nhập dữ liệu trong một loạt các thao tác định trước như:
1.Hiển thị màn hình tra cứu ID
2.Hiển thị màn hình thông tin chi tiết khách hàng tương ứng
3.Hiển thị màn hình liên lạc với khách hàng.
 Business Logic Layer
Lớp này thực hiện các nghiệp vụ chính của hệ thống, sử dụng các dịch vụ do
lớp Data Access cung cấp, và cung cấp các dịch vụ cho lớp Presentation.
Trong lớp này có các thành phần chính là Business Components, Business
Entities và Service Interface.
+ Service Interface: là giao diện lập trình mà lớp này cung cấp cho
lớpPresentation sử dụng. Lớp Presentation chỉ cần biết các dịch vụ thông
qua giao diện này mà không cần phải quan tâm đến bên trong lớp này
được hiện thực như thế nào.
+ Business Entities: là những thực thể mô tả những đối tượng thông
tin mà hệ thống xử lý. Các Business Entities này cũng được dùng để
trao đổi thông tin giữa lớp Presentation và lớp Data Layers.
+ Business Components: là những thành phần chính thực hiện các
dịch vụ mà Service Interface cung cấp, chịu trách nhiệm kiểm tra các
ràng buộc logic (constraints), các qui tắc nghiệp vụ (Business Rules),
sử dụng các dịch vụ bên ngoài khác để thực hiện các yêu cầu của ứng
dụng.
 Data Layers
- Lớp này thực hiện các nghiệp vụ liên quan đến lưu trữ và truy xuất dữ liệu
của ứng dụng. Trong lớp này có các thành phần chính là Data Access
Logic, Data Sources, Servive Agents).
+ Data Access Logic Components (DAL) là thành phần chính chịu trách
nhiệm lưu trữ vào và truy xuất dữ liệu từ các nguồn dữ liệu – Data
Sources như RDMBS, XML, File systems…
+ Service Agents: là những thành phần trợ giúp việc truy xuất các dịch vụ
bên ngoài một cách dễ dàng và đơn giản như truy xuất các dịch vụ nội
tại.

04/15/24
Phương thức hoạt động của mô hình 3 tầng

- Đầu tiên User giao tiếp với GUI. Các thông tin sẽ được kiểm tra, nếu OK
chúng sẽ được chuyển xuống Business Logic Layer (BLL).
- BLL xử lý các thông tin, tính toán theo đúng yêu cầu đã gửi, nếu không
cần đến Database thì BLL sẽ gửi trả kết quả về GUI, ngược lại nó sẽ đẩy
thông tin đã xử lý xuống DAL.
- DAL sẽ thao tác với Database và trả kết quả về cho BLL, BLL kiểm tra và
gửi nó lên GUI để hiển thị cho người dùng.
- Các dữ liệu được trung chuyển giữa các Layer thông qua một đối tượng
gọi là Data Transfer Object (DTO)

04/15/24
- Ưu điểm:
Code được tường minh hơn.
Dễ bảo trì khi được phân chia. Việc thay đổi 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.
Dễ phát triển, tái sử dụng: khi chúng ta muốn thêm một chức năng nào đó thì
việc lập trình theo một mô hình sẽ dễ dàng hơn. Muốn thay đổi giữa hai môi
trường ( Winform sang Webform ) thì chỉ việc thay đổi lại lớp GUI.
Dễ bàn giao. Nếu mọi người đều theo một quy chuẩn đã được định sẵn, thì
công việc bàn giao, tương tác với nhau sẽ dễ dàng hơn và tiết kiệm được nhiều
thời gian.
Dễ phân phối khối lượng công việc.

04/15/24
Lập trình mô phỏng
 Cho CSDL Quản lý sinh viên gồm các bảng như sau:

04/15/24
 Yêu cầu: Sử dụng mô hình 3 lớp thực thi các thao tác Thêm, sửa, xóa vào các bảng CSDL
theo các giao diện sau:

04/15/24
•Giao diện form nhập bảng Lớp:

04/15/24
 Hướng dẫn
- Bước 1: Khởi động Visual studio 2022 \ New \Project\ QLSV_3tang=>
Đây chính là tầng GUI. Thiết kế form theo yêu cầu bằng cách kéo đối
tượng Menustrip vào form.
- Bước 2: Tạo Phải chuột vào Solution=> Chọn Add =>New
Project=>Class Library=> Đặt tên DTO

Tương tự với 2 tầng còn lại

04/15/24
Tên project –
Tầng GUI

04/15/24
Bước 3: Tham chiếu giữa các tầng.
Tầng DAL=> Tham chiếu DTO

Tầng BUS=> Tham chiếu tới DTO, DAL

Tầng GUI=> Tham chiếu tới DTO, BUS


 Bấm vào tầng DAL=> Phải chuột vào Refences=> Add Refence=> Tích chọn DTO

Tương tự làm với 2 tầng còn lại

04/15/24
 Tạo đủ 4 tầng:
 DTO
 DAL
 BUS
 GUI

Lưu ý: Chỉ được sửa tên


tầng GUI, các tầng khác đã
đặt tên rồi không được sửa
nữa.

04/15/24
 Sau khi tham chiếu
các tầng

04/15/24
 Bước 4: Code

 Tầng DTO – Tạo một lớp đặt tên là Lop

04/15/24
 Tầng DAL
 Tạo lớp kết nối dữ liệu
public class Connect
{
SqlConnection conn = new SqlConnection("Data Source=localhost\\
SQLEXPRESS;Initial Catalog=Quanlysv;Integrated Security=True");
// Phương load CSDL
public DataTable Load_DL(string sql)
{
conn.Open();
SqlDataAdapter ad = new SqlDataAdapter(sql, conn);
DataTable dt = new DataTable();
ad.Fill(dt); conn.Close();return dt;
}
public void Excecute(string sql){
conn.Open();SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();conn.Close();}}
}

04/15/24
 Tạo lớp DAL
using System.Data;using DTO;
public class Lop_DAL:Connect
{
public Lop_DAL() { }
public DataTable Load_Lop() {
return Load_DL("select * from Lop");
}
public void Insert_Lop(Lop ob) {
string sql = "insert into lop values('" +
ob.malop + "','" + ob.tenlop + "')";
Excecute(sql);
}
public void Update_Lop(Lop ob) {
string sql = "update Lop set tenlop='" + ob.tenlop + "' " +
"where malop='" + ob.malop + "'";
Excecute(sql);
}
public void Delete_Lop(string malop) {
string sql = "delete from Lop where malop='" + malop + "'";
Excecute(sql);
}
04/15/24
 Tạo lớp BUS
using System.DAL;using DTO;
public class Lop_Bus {
Lop_DAL lop = new Lop_DAL();
public DataTable Load_Bus() {
return lop.Load_Lop();
}
public void Insert_Bus(Lop ob) {
lop.Insert_Lop(ob);
}
public void Update_Bus(Lop ob)
{
lop.Update_Lop(ob);
}
public void Delete_Bus(string malop)
{
lop.Delete_Lop(malop);
}
}
04/15/24
 Tạo lớp FORM
using DTO;using BUS;
Lop_Bus lop = new Lop_Bus();
private void frm_lop_Load(object sender, EventArgs e) {
dataGridView1.DataSource = lop.Load_Bus(); }
private void Insert_Click(object sender, EventArgs e) {
Lop ob = new Lop(txtMalop.Text, txtTenlop.Text);
lop.Insert_Bus(ob);frm_lop_Load(sender, e);
txtMalop.Clear();txtTenlop.Clear();}
// Phải chuột vào datagridview => Chọn sự kiện RowEnter
private void Chon_dong(object sender, DataGridViewCellEventArgs e)
{ int i = e.RowIndex;
txtMalop.Text = dataGridView1.Rows[i].Cells[0].Value.ToString();
txtTenlop.Text = dataGridView1.Rows[i].Cells[1].Value.ToString();
}
private void Update_Click(object sender, EventArgs e){
Lop ob = new Lop(txtMalop.Text, txtTenlop.Text);
lop.Update_Bus(ob);frm_lop_Load(sender, e);
txtMalop.Clear(); txtTenlop.Clear();
}

04/15/24
private void Delete_Click(object sender, EventArgs e)
{
lop.Delete_Bus(txtMalop.Text);
frm_lop_Load(sender, e);
txtMalop.Clear(); txtTenlop.Clear();
}

04/15/24

You might also like