Chủ nhật, ngày 4 tháng 12 năm 2016

MVC là gì?

Ngày đăng: 7/8/2012, 17:44:37PM | Lượt xem: 8,467
Hot!
tag ,

 MVC (Model View Controller) là tên một phương pháp chia nhỏ một ứng dụng thành ba thành phần để cài đặt, mỗi thành phần đóng một vai trò khác nhau và ảnh hưởng lẫn nhau, đó là models, views, và controllers.

 

  1. Models (Tầng dữ liệu): là một đối tượng hoặc một tập hợp các đối tượng biểu diễn cho phần dữ liệu của chương trình, ví dụ như các dữ liệu được lưu trong database, dữ liệu từ một hệ thống các ứng dụng khác như legacy system, file system, mail system …
  2. Views (Tầng giao diện) : là phần giao diện với người dùng, bao gồm việc hiện dữ liệu ra màn hình, cung cấp các menu, nút bấm, hộp đối thoại, chọn lựa …, để người dùng có thể thêm, xóa. sửa, tìm kiếm và làm các thao tác khác đối với dữ liệu trong hệ thống.. Thông thường, các thông tin cần hiển thị được lấy từ thành phần Models.
  3. Controllers (Tầng điều khiển): chịu trách nhiệm xử lý các tác động về mặt giao diện, các thao tác đối với models, và cuối cùng là chọn một view thích hợp để hiển thị ra màn hình. Trong kiến trúc MVC, view chỉ có tác dụng hiển thị giao diện mà thôi, còn điều khiển dòng nhập xuất của người dùng vẫn do Controllers đảm trách.

 

Trong phân tích/ thiết kế hướng đối tượng (OOA/OOD), khi nói đến MVC, người ta thường dùng các thuật ngữ MVC Design Pattern, MVC Framework, MVC Paradigm.  Có người lại nói, về thiết kế chương trình, vẽ diagram về cấu trúc của chương trình, MVC là một phương pháp thiết kế (Design Pattern). Khi có một bộ công cụ tiện ích lập trình hỗ trợ cho lập trình viên viết chương trình theo phương pháp MVC (ví dụ như Jakarta Struts ), thì bộ công cụ tiện ích lập trình đó gọi là MVC Framework implementation. Còn từ Paradigm dùng cho MVC mang tính chất chỉ chung chung. Hiện nay, tại Mỹ, các thuật ngữ trên thường được dùng lẫn,   tùy theo tác giả và hoàn cảnh.

2. MVC 1: Trong MVC model 1, các trang JSP đóng vai trò Hiển thị (View) và Điều khiển (Controller). Có thể có nhiều trang JSP khác nhau đóng các vai trò khác nhau.

 

Sơ đồ MVC 1

  • Khi người sử dụng dùng các nút bấm, menu hoặc link … trên trình duyệt Web (Web browser) để thực hiện một     thao tác, một lệnh (có thể kèm theo các tham số) được gửi tới một trang JSP tương ứng.
  • Trang JSP này sẽ khởi tạo     một hoặc nhiều  Java Bean (nếu cần thiết), truyền các lệnh cần thi hành tới     Java Bean. Chú ý rằng đây là các Java Bean thông thường, chứ không phải Enterprise Java Bean (EJB)
  • Sau khi Java Bean thực hiện xong việc truy xuất hoặc cập nhật dữ liệu, trang JSP ban đầu có thể hiển thị dữ liệu lấy từ Bean (JSP ban đầu đóng luôn vai trò View), hoặc chọn một trang     JSP khác để hiện dữ liệu từ Bean (JSP ban đầu đóng luôn vai trò Controller). Trong một thiết kế tốt, để bảo đảm việc tách rời phần trình bày và logic của chương trình, trang JSP nhận request chỉ đóng vai trò Điều khiển (Controller).

MVC model 1 có  một nhược điểm là phần logic điều khiển được viết trong trang JSP, như vậy phần chương trình Java phức tạp dùng để điều khiển sẽ bị lẫn vào trong mã HTML dùng để trình bày. Độ phức tạp của chương trình càng cao, thì trang JSP càng khó bảo trì.  Hơn nữa trong các dự án phần mềm phức tạp, thì phẩn hiển thị của trang JSP thường được làm bởi người thiết kế Web, giỏi về HTML và đồ họa, còn phần chương trình Java được viết bởi lập trình viên chuyên về lập trình. Trong các dự án phức tạp, dùng JSP làm phần điều khiển sẽ làm lẫn lộn việc phân chia ranh giới trách nhiệm giữa nhóm thiết kế đồ họa và nhóm lập trình, đôi khi dẫn đến việc bảo trì và phát triển trở nên rất khó khăn, gần như không thể làm được.

3. MVC 2: Trong MVC model 2, một hoặc nhiều servlet (thường là một) đóng vai trò Điều khiển, các Java Bean đóng vai trò Mô hình và các trang JSP đóng vai trò hiển thị.

Trong model 2, các logic phức tạp của chương trình được viết hoàn toàn trong các servlet, là các chương trình Java. Phần hiển thị chỉ gồm các trang JSP với một vài mã đơn giản để lấy dữ liệu có sẵn, không có logic phức tạp, vì thế hoàn toàn có thể được tạo ra bằng những người thiết kế Web.

Các yêu cầu của người dùng được gửi từ trình duyệt Web tới servlet. Servlet sẽ khởi tạo Java Bean (nếu cần thiết), ra lệnh thu thập, cập nhật thông tin. Khi Java Bean hoàn thành công việc, servlet sẽ chọn trang JSP thích hợp để hiện thông tin trong Java Bean cho người dùng.

Đây chính là một cách sử dụng MVC rất  hiệu quả trong Java. Tất nhiên là sử dụng MVC model 2 một cách hoàn toàn cứng nhắc, phần Điều khiển chỉ dùng servlet, phần Hiển thị chỉ dùng JSP sẽ dẫn đến một vài trường hợp kém hiệu quả,  nhất là khi có các request từ trình duyệt Web chỉ đòi hỏi việc hiển thị thông tin.

Ví dụ:  một trang Web đang hiện các mail trong mail box từ mail thứ 20 đến mail thứ 40. Danh sách các mail này đã có sẵn phần Mô hình khi người dùng login và phần Điều khiển ra lệnh cho phần Mô hình lấy danh sách các mail có trong mail box trong POP server. Từ trang Web này, người dùng phát ra một yêu cầu “Next” để xem tiếp danh sách các mail từ mail thứ 40 đến mail thứ 60. Đây đơn thuần chỉ là đòi hỏi thông tin hiển thị, do đó, nếu gửi qua servlet Điều khiển , servlet sẽ không làm gì cả, mà chỉ gửi yêu cầu hiển thị tới trang JSP hiển thị danh sách mail. Trong trường hợp này, gửi thẳng yêu cầu hiển thị từ trình duyệt Web tới trang JSP sẽ hiệu quả hơn.

           

Sơ đồ MVC 2


4. Ưu điểm MVC:
- Phát triển phần mềm: Có tính chuyên nghiệp hóa, có thể chia cho nhiều nhóm được đào tạo nhiều kỹ năng khác nhau, từ thiết kế mỹ thuật cho đến lập trình đến tổ chức database.
- Bảo trì: Với các lớp được phân chia theo như đã nói, thì các thành phần của một hệ thống dễ được thay đổi, nhưng sự thay đổi có thể được cô lập trong từng lớp, hoặc chỉ ảnh hưởng đến lớp ngay gần kề của nó, chứ không phát tán náo loạn trong cả chương trình.
- Mở rộng: Với các lớp được chia theo ba lớp như đã nói, việc thêm chức năng vào cho từng lớp sẽ dễ dàng hơn là phân chia theo cách khác.
- Tiện về bug lỗi, kiểm soát code, workflow dễ dàng hơn và nhiều người có thể tham gia phát triển cùng trên 1 module.


5. Nhược điểm MVC:
- Đối với dự án nhỏ: Cồng kềnh, tốn thời gian phát triển.
- Trade-off là performance, do tốn thời gian trung chuyển DTO (Data Transfer Object) giữa các layers
Nguồn giancon.me
 Chia sẻ qua: 
Hot!
Ý kiến bạn đọc

These items will be permanently deleted and cannot be recovered. Are you sure?

Gallery

image

Maecenas viverra rutrum pulvinar

Maecenas viverra rutrum pulvinar! Aenean vehicula nulla sit amet metus aliquam et malesuada risus aliquet. Vestibulum rhoncus, dolor sit amet venenatis porta, metus purus sagittis nisl, sodales volutpat elit lorem…

Read more

Text Links

Thiết kế logo chuyên nghiệp Insky
DAFABET
W88 w88b.com/dang-ky-tai-khoan-w88
W88
Copyright © 2011 - 2012 vietshare.vn by phamkhuong102@gmail.com doanhkisi2315@gmail.com. All rights reserved.