[ iT ] Forums: Mô hình Model-View-Controller (MVC) - [ iT ] Forums

Jump to content


Balloon vs. Thorns

MU Phuc Hung

Làm Việc Tài Nhà

Mu Da Nang

Tuyển Nhân Viên Bán Hàng



Trang 1 / 1
  • Bạn không thể gửi chủ đề mới
  • Bạn không thể gửi trả lời cho chủ đề này

Mô hình Model-View-Controller (MVC) Đánh Giá: -----

#1 User is offline   Huỳnh Văn Thâm 

  • Nhóm: VIP
  • Bài Viết: 2364
  • Gia Nhập: 09-October 07
  • Thạc sĩ CSTH
  • PipPipPipPipPipPip

Gửi vào 20 November 2007 - 09:41 PM

Chào PhươngĐiệp2410!
Bạn có thể bỏ ra một ít thời gian giới thiệu cho mình về MVC chút nhá, mình cũng chưa hiểu lắm.
Thanks
0

#2 User is offline   PhươngĐiệp2410 

  • Nhóm: VIP
  • Bài Viết: 1917
  • Gia Nhập: 08-March 07
  • Thạc sĩ CSTH
  • PipPipPipPipPip

Gửi vào 21 November 2007 - 04:09 PM

Quote

Thiết kế MVC và Java Web Mail
Phương pháp thiết kế MVC bắt nguồn từ việc phát triển giao diện người dùng trong ngôn ngữ lập trình Smalltalk, đây là một trong những phương pháp thiết kế thành công nhất trong các phương pháp thiết kế hướng đối tượng. Hiện nay, MVC được dùng rộng rãi trong nhiều hệ thống phần mềm hướng đối tượng, bất kể được viết bằng ngôn ngữ hướng đối tượng nào.

Sau đây mình xin giới thiệu tổng quan về phương pháp thiết kế MVC, và minh họa cách sử dụng MVC trong thiết kế hướng đối tượng bằng việc xây dựng chương trình Java Web Mail. Bạn phải quen thuộc với ngôn ngữ lập trình Java, các khái niệm về JSP, Servlet, Java Mail API.

Thiết kế MVC và Java
MVC là viết tắt của Model-View-Controller. Phương pháp thiết kế MVC (MVC Design Pattern)[1] là phương pháp chia nhỏ một ứng dụng nhiều lớp hoặc chia nhỏ phần giao diện người dùng (user interface) của một ứng dụng thành ba thành phần chính là Model, View và Controller (hình 1).

- Model (tạm dịch là phần “Mô hình” [2]): Là một đối tượng hoặc 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ụ các dữ liệu được lưu trong cơ sở dữ liệu (CSDL) hay từ các hệ thống ứng dụng khác (như mail...).
- View (tạm dịch là phần “Hiển thị”): 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.
- Controller (tạm dịch là phần “Điều khiển”): Là phần điều khiển toàn bộ logic về hoạt động của giao diện, tương tác với thao tác của người dùng (từ chuột, bàn phím và các thiết bị ngoại vi khác) và cập nhật, thao tác trên dữ liệu theo đầu vào nhận được và điều khiển việc chọn phần “Hiển thị” thích hợp để truyền dữ liệu tới người dùng.

Với phương pháp thiết kế này, các chức năng hiển thị, chức năng logic điều khiển và chức năng truy cập dữ liệu của chương trình được chia làm các phần tách biệt.
Java là một ngôn ngữ lập trình hướng đối tượng thuần túy nên việc áp dụng MVC vào các phần mềm viết bằng Java rất dễ dàng và hiển nhiên. Có hai hình mẫu chính của phương pháp thiết kế MVC trong Java là MVC model 1 (hình 2) và MVC model 2 (hình 3).
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.
Thao tác của người dùng trên trình duyệt web được gửi tới một trang JSP.
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 (không phải Enterprise Java Bean).

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 yêu cầu 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ó phát triển và bảo trì. Hơn nữa, trong các dự án phức tạp, phần hiển thị do người thiết kế web giỏi về HTML và đồ họa thực hiện, còn phần điều khiển được người chuyên về lập trình thực hiện. Dùng JSP làm phần điều khiển sẽ khó phân ranh giới trách nhiệm giữa nhóm thiết kế đồ họa và nhóm lập trình. Để khắc phục nhược điểm này, MVC model 2 ra đời.

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 (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ể giao cho 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 là một cách sử dụng MVC rất hiệu quả trong Java. Tất nhiên, 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 yêu cầu từ trình duyệt web chỉ đòi hỏi việc hiển thị thông tin. 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 (hình 4).

Trong cách áp dụng MVC này, các yêu cầu có liên quan đến logic chương trình hoặc truy cập dữ liệu sẽ được gửi tới servlet controller, còn các yêu cầu chỉ liên quan tới hiển thị sẽ được gửi tới JSP controller.

Chương trình Java Web Mail
Chương trình Java Web Mail được thiết kế theo MVC model 2. Yêu cầu của chương trình chỉ là hiện màn hình đăng nhập username và password, không có logic, nên nó có thể được gọi thông qua servlet controller hoặc JSP controller. Sau đó, tùy theo các yêu cầu mà HTTP request sẽ được chuyển đến servlet controller hoặc JSP controller cho phù hợp.

Chương trình gồm các chức năng sau:
- Sử dụng HTTP để đọc và gửi mail từ bất kỳ một mail server nào dùng POP3 protocol trên Internet hoặc trong intranet.
- Có thể truy cập mail qua bất kỳ proxy server nào có chức năng HTTP proxy. Chức năng này rất có ích khi người dùng kết nối vào Internet từ một mạng intranet phía sau một tường lửa (firewall), và firewall này ngăn chặn các máy tính trong intranet truy cập POP server bên ngoài, trong khi đó, người dùng muốn gửi và nhận mail từ một POP server trên Internet.
- Sử dụng khả năng xử lý các loại dữ liệu của trình duyệt web để hiện attachment.
Chương trình gồm các thành phần sau:

Một servlet controller MailUtilServlet, dùng để nhận các yêu cầu: log in, log out, gửi mail, hiện tập tin đính kèm (attachment). Những yêu cầu này sẽ được xử lý về mặt logic rồi gửi tới Java Bean để thực sự làm công việc truy cập mail server. Sau khi Java Bean thực hiện việc truy cập dữ liệu xong, MailUtilServlet sẽ chọn trang JSP thích hợp để hiển thị dữ liệu.
Một Java Bean MailUserBean dùng để truy cập mail server, lấy danh sách và mội dung mail trong mail box, xóa mail trong server.

Trang JSP index.jsp đóng vai trò JSP controller, dùng để nhận các yêu cầu: hiện danh sách các mail trong hộp thư, hiện nội dung của một mail được chọn trong danh sách, hiện trang soạn thảo mail để người dùng soạn thảo và gửi mail. Những thông tin cần để hiển thị đã có sẵn trong MailUserBean, vì MailUserBean đã lấy những thông tin này khi nhận được yêu cầu log in từ MailUtilServlet. Vì thế, những loại yêu cầu này thuộc về loại yêu cầu hiển thị, không có logic phức tạp, nên không cần phải gửi qua MailUtilServlet.

Tập hợp các trang JSP:
* menu.jsp dùng để hiện menu lệnh bao gồm Log in, Inbox, Compose và Exit.
* first.jsp là trang để nhập username, password, mailserver cho việc login.
* messageheaders.jsp là trang hiện danh sách mail có trong mail box để người dùng chọn xem và xóa mail.
* messagecontent.jsp là trang để hiện nội dung của mail đã chọn từ danh sách.
* compose.jsp là trang để soạn thảo mail cần gửi.
* status.jsp là trang dùng để báo về lỗi khi log in, log out không thành công, và thông báo về kết quả gửi mail thành công hay không.
* errordetails.jsp là trang dùng để cung cấp thông tin chi tiết mỗi khi có lỗi log in, log out, gửi mail không thành công. Thông tin trong trang này bao gồm cả Stack Trace của exception khi sinh ra lỗi, chủ yếu dành cho lập trình viên dùng để xem chi tiết về vấn đề đã xảy ra.
* logout.jsp là trang hiện ra khi người dùng log in ra khỏi hệ thống mail.
Một vài trang JSP và text file khác dùng để trang trí.
* Một CSS (Cascade Style Sheet) tên là styleSheet.txt, dùng để định dạng về font và màu sắc cho tất cả các file JSP.
Trong hệ thống này, không có database sever. MailUserBean lấy và cập nhật dữ liệu từ POP mail server, gửi mail từ SMTP server, sử dụng Java Mail API.
Đây là một ứng dụng web sử dụng JSP/Servlet nên phải được cài đặt trên một web server có hỗ trợ servlet engine (ví dụ BEA WebLogic, IBM Web Sphere, Sun One, JBoss, Tomcat, Alaire JRun...) hoặc một web server kết nối với servlet engine (ví dụ như IIS + Tomcat, Apache + Tomcat, IIS + JRun, Apache + Jrun...).

Quote


Bài viết này được chỉnh sửa bởi PhươngĐiệp2410: 21 November 2007 - 04:11 PM

<div align='center'><!--coloro:#008080--><span style="color:#008080"><!--/coloro--><i><b><!--sizeo:5--><span style="font-size:18pt;line-height:100%"><!--/sizeo--><a href="http://winsocks.net/" target="_blank">http://winsocks.net/</a>

<!--sizec--></span><!--/sizec--></b></i><!--colorc--></span><!--/colorc--><!--sizeo:3--><span style="font-size:12pt;line-height:100%"><!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff"><!--/coloro--><b>Are You looking for a good socks 5 service? But you don't know where to buy?
Welcome to WinSocks.Net - Crazy Socks Service
Here we provide Fresh Socks 5 with fast speed , less blacklist, especially price is cheaper than others service.</b><!--colorc--></span><!--/colorc--><!--sizec--></span><!--/sizec--> <!--sizeo:3--><span style="font-size:12pt;line-height:100%"><!--/sizeo--><!--coloro:#0000ff--><span style="color:#0000ff"><!--/coloro--><b><i>More over, if you want to test our socks 5 before buying, don't be hesitate to contact our supporter through yahoo to receive Free Socks 5</i></b><!--colorc--></span><!--/colorc--><!--sizec--></span><!--/sizec-->
</div>
0

#3 User is offline   Huỳnh Văn Thâm 

  • Nhóm: VIP
  • Bài Viết: 2364
  • Gia Nhập: 09-October 07
  • Thạc sĩ CSTH
  • PipPipPipPipPipPip

Gửi vào 21 November 2007 - 09:25 PM

Bạn có thể viết một bài viết nhỏ hướng dẫn cụ thệ về các cấu hình của mô hình MVC không vậy?

Bài viết này được chỉnh sửa bởi PhươngĐiệp2410: 22 November 2007 - 02:22 AM
Nguyên nhân chỉnh sửa Sao đã nhỏ mà lại cụ thể được

0

#4 User is offline   hungdang1312 

  • Nhóm: Newbies
  • Bài Viết: 1
  • Gia Nhập: 03-February 08
  • Thành viên mới

Gửi vào 04 February 2008 - 01:52 PM

Chào các bạn mình là thành viên mới tham gia vào forum này. Mình hiện tại đang viết web asp.net bằng c# nhưng ngôn ngữ chính của mình là Java. Mình có một ví dụ thật đơn giản cho những ai mới tiếp cận với java. Mô hình MVC gồm ba phần M= Model là phần dữ liệu, V=View phần hiển thị Model lên và cuối cùng là Controller để tác động đến Model.

Trong ví dụ của mình mình tạo ra 2 cái view, mỗi cái nằm ở một Frame và có thêm một cái Controller là một Frame khác. Khi bạn click và nut "Increase" hay "Decrease" thì sẽ tác động lên Model làm tăng hay giảm giá trị cua Model và khi Model thay đổi thì nó sẽ gọi sử thay đổi của tất cả các view.

Ứng dụng của MVC có thể giải quyết được nhiều bài toán khó về cấu trúc và GUI. Nếu bạn có ý định làm một phần mềm như là Spreadsheet Excel thì MVC là một lựa chọn tốt. Giá trị của một cell trong excel có thể được tổng hợp bởi nhiêu cell khác trong cùng một worksheet. Nếu không có MVC bạn sẽ làm thế nào để giải quyết bài toán khó chẩng hạn như ô C1=A1 + B1 + D1 + E1, ô D1 = C1 + A2, một trong những ô đó thay đổi giá trị thì phải tính lại giá trị của những ô khác. Chỉ có thể là MVC :jeje:

Mình đang tìm hiểu về VLTK programming. Chưa có kn gì cả. Nếu bạn nào muốn chia sẻ kn về vltk và java thì nt cho mình nha. gửi vào email hungdang1312@yahoo.com.vn nha.

Mong các bạn chỉ giáo

Tệp Đính Kèm

  • Attached File  mvc.rar (10.57K)
    Lượi tải: 397

Bài viết này được chỉnh sửa bởi PhươngĐiệp2410: 04 February 2008 - 11:55 PM
Nguyên nhân chỉnh sửa Cảm ơn bạn đã chia xẻ

0

#5 User is offline   R&D 

  • Nhóm: Advance Member
  • Bài Viết: 32
  • Gia Nhập: 16-December 07
  • Thành viên mới

Gửi vào 05 February 2008 - 05:51 AM

Có một tấm hình của Sun mô tả tổng quan về MVC nè.Attached File  mvc_structure_generic.gif (47.22K)
Lượi tải: 257
1

#6 User is offline   tulous 

  • Nhóm: VIP
  • Bài Viết: 1047
  • Gia Nhập: 28-January 06
  • Pé Mập
  • PipPipPipPipPip

Gửi vào 05 February 2008 - 11:08 PM

View PostHuỳnh Văn Thâm, on Nov 21 2007, 07:25 AM, said:

Bạn có thể viết một bài viết nhỏ hướng dẫn cụ thệ về các cấu hình của mô hình MVC không vậy?

MVC là một mô hình lập trình khá thông dụng. Những điểm cơ bản có lẽ là ở trên nói khá rõ rồi. Nếu đi từng ứng dụng cụ thể thực sự không thể bao quát hết được mvc vì tùy thuộc vào project lớn nhỏ nó thể hiện khác nhau nữa. Mình thấy bạn có thể dựa trên các ví dụ đơn giản về mvc để luyện tập rùi. Riêng java bạn có thể thử trực tiếp với spring MVC như thế sẽ vừa ranh mvc vua hoc them duoc 1 framework moi
Easy Sharing
Sơ lược về xử lý khi nhiễm virus
<a href="http://cuasotinhoc.vn/index.php?showtopic=108658" target="_blank">http://cuasotinhoc.vn/index.php?showtopic=108658</a>
<a href="http://cuasotinhoc.vn/index.php?showtopic=154380&hl=" target="_blank">http://cuasotinhoc.vn/index.php?showtopic=154380&hl=</a>
0

#7 User is offline   Quach Van Nhi 

  • Nhóm: Newbies
  • Bài Viết: 1
  • Gia Nhập: 20-July 08
  • Thành viên mới

Gửi vào 20 July 2008 - 01:13 PM

Mình có thể sử dung MVC trong lập trình web được không vậy? và làm như thế nào? Các bạn giúp mình với
Mình mới nghiên cứu MVC thôi
Cám ơn trước nha!!!!!!!!
0

#8 User is offline   tulous 

  • Nhóm: VIP
  • Bài Viết: 1047
  • Gia Nhập: 28-January 06
  • Pé Mập
  • PipPipPipPipPip

Gửi vào 21 July 2008 - 07:35 AM

Mình thầy các bài viết ở trên đều đã hướng dẫn cơ bản về mô hình MVC rồi mà(đều sử dụng trong lập trình web hết). Quan trọng là bạn thực hiện ra sao mà thôi. MVC là một mô hình lập trình còn việc thực thi nó(trong javaweb) thì bạn có thể lựa chọn: servlet làm controller, view dùng jsp, model dùng javabean ... hoặc sử dụng 1 MVC framework nào đó(cái này thì hiệu quả hơn): Struts (1.x or 2), JSF, Spring MVC...
Easy Sharing
Sơ lược về xử lý khi nhiễm virus
<a href="http://cuasotinhoc.vn/index.php?showtopic=108658" target="_blank">http://cuasotinhoc.vn/index.php?showtopic=108658</a>
<a href="http://cuasotinhoc.vn/index.php?showtopic=154380&hl=" target="_blank">http://cuasotinhoc.vn/index.php?showtopic=154380&hl=</a>
0

#9 User is offline   xuandanh 

  • Nhóm: Advance Member
  • Bài Viết: 693
  • Gia Nhập: 22-October 06
  • Cao đẳng CSTH
  • PipPipPipPip

Gửi vào 17 September 2008 - 03:51 PM

View Posthungdang1312, on Feb 4 2008, 01:52 PM, said:

Chào các bạn mình là thành viên mới tham gia vào forum này. Mình hiện tại đang viết web asp.net bằng c# nhưng ngôn ngữ chính của mình là Java. Mình có một ví dụ thật đơn giản cho những ai mới tiếp cận với java. Mô hình MVC gồm ba phần M= Model là phần dữ liệu, V=View phần hiển thị Model lên và cuối cùng là Controller để tác động đến Model.

Trong ví dụ của mình mình tạo ra 2 cái view, mỗi cái nằm ở một Frame và có thêm một cái Controller là một Frame khác. Khi bạn click và nut "Increase" hay "Decrease" thì sẽ tác động lên Model làm tăng hay giảm giá trị cua Model và khi Model thay đổi thì nó sẽ gọi sử thay đổi của tất cả các view.

Ứng dụng của MVC có thể giải quyết được nhiều bài toán khó về cấu trúc và GUI. Nếu bạn có ý định làm một phần mềm như là Spreadsheet Excel thì MVC là một lựa chọn tốt. Giá trị của một cell trong excel có thể được tổng hợp bởi nhiêu cell khác trong cùng một worksheet. Nếu không có MVC bạn sẽ làm thế nào để giải quyết bài toán khó chẩng hạn như ô C1=A1 + B1 + D1 + E1, ô D1 = C1 + A2, một trong những ô đó thay đổi giá trị thì phải tính lại giá trị của những ô khác. Chỉ có thể là MVC :((

Mình đang tìm hiểu về VLTK programming. Chưa có kn gì cả. Nếu bạn nào muốn chia sẻ kn về vltk và java thì nt cho mình nha. gửi vào email hungdang1312@yahoo.com.vn nha.

Mong các bạn chỉ giáo

Bạn cũng viết auto cho võ lâm bằng Java à , mình cũng đang nghiêm cứu đây , kỹ thuật HOOK trong C++ ko biếp áp dụng qua java như thế nào , bạn đã biết chưa ?
0

Chia sẻ chủ để


Trang 1 / 1
  • Bạn không thể gửi chủ đề mới
  • Bạn không thể gửi trả lời cho chủ đề này

1 người đang đọc chủ đề này
0 thành viên, 1 khách, 0 thành viên ẩn