MVC là một mô
hình kiến trúc phần mềm được tạo ra với mục đích quản lí và xây dựng dự án phần
mềm có hệ thống hơn, nói cụ thể thì nó là một mẫu thiết kế nhằm chia tách phần
giao diện và phần code của ứng dụng để dễ dàng quản lí, bảo trì và phát triển.
MVC được áp dụng trên hầu hết các ngôn ngữ lập trình hướng đối tượng hiện nay
như C++, C#, Java, PHP, …
MVC chia ứng
dụng phần mềm ra thành 3 phần có tương tác với nhau:
Model: thường
là các class chứa thông tin đối tượng (dữ liệu), tương tác truy xuất database.
Model sẽ đóng gói dữ liệu của ứng dụng và logic nghiệp vụ.
View: là nơi
nhận dữ liệu từ model, database và sắp xếp chúng chính xác nhờ yêu cầu từ controller
và truyền về client. View sẽ xử lý hiển thị trên ứng dụng.
Controller:
Đóng vai trò trung gian giữa Model và View, nó có nhiệm vụ nhận yêu cầu từ
client sau đó xử lý request, load model và gửi data qua view tương ứng với nhau
rồi trả kết quả về cho client.
Trong mẫu thiết
kế này bạn có một servlet hoặc một bộ lọc hoạt động với vai trò controller. Tất
cả các framework hiện tại đều triển khai theo mẫu thiết kế này.
Ở đây, các
trang JSP được sử dụng như các view của ứng dụng. Đối với model bạn sử dụng POJO.
Trong một ứng
dụng MVC, mọi yêu cầu HTTP phải được chuyển tới controller. URI nó cho
controller biết action nào cần thực hiện.
Ví dụ, việc
thêm một sản phẩm vào CSDL sẽ yêu cầu 2 hành động:
1. Hiển thị
forn Add Product để người dùng nhập thông tin sản phẩm
2. Lưu thông
tin sản phẩn vào CSDL
Như đã đề cập,
bạn sử dụng URI để báo cho controller biết action nào cần gọi.
Ví dụ để ứng
dụng gửi form Add Product, bạn sẽ sử dụng URI như sau:
Controller kiểm
tra URI để quyết định action nào cần gọi. Nó cũng lưu trữ đối tượng model ở một
nơi có thể được truy cập từ view, để các giá trị phía máy chủ có thể hiển thị
trên trình duyệt. Cuối cùng controller sử dụng một RequestDispatcher hoặc
HttpServletResponse.sendRedirect() để chuyển tiếp đến một view chính là một
trang JSP hoặc một tài nguyên khác. Trong trang JSP bạn sử dụng các thẻ để hiển
thị dữ liệu.
Lưu ý: Việc gọi
RequestDispatcher.forward() hoặc HttpServletResponse.sendRedirect() không ngăn
đoạn mã bên dưới nó được thực thi. Do đó, trừ khi lời gọi phương thức đó là
dòng mã cuối cùng, bạn cần phải trả về một cách rõ ràng.
if
(action.equals(...))
{
RequestDispatcher rd =
request.getRequestDispatcher(dispatchUrl);
rd.forward(request, response);
return; //explicitly return. Or else, the code below will
be executed
}
// do
something else
Hầu hết bạn sẽ
sử dụng một RequestDispatcher để chuyển tiếp đến một view vì nó nhanh hơn
sendRedirect. Điều này là do sendRedirect khiến máy chủ gửi mã trạng thái phải
hồi HTTP 302 với một Location Header chứa URL mới cho trình duyệt, khi nhận được
mã trạng thái 302, trình duyệt tạo một yêu cầu HTTP mới cho URL được tìm thấy
trong Location Header.
إرسال تعليق