Đ Ạ I H Ọ C Q U Ố C G IA H À N Ộ I
TR Ư Ờ N G ĐẠI HỌC CÔ N G N G H Ệ
CÁN XUÂN HOÀN
M Ộ T SỐ CÔ N G N G H Ệ Á P DỤNG
K IÉ N T R Ủ C M O D E L - V IE W - C O N T R O L L E R
N gành: C ô n g n g h ệ th ô n g tin
C huyên nghành: C ô n g nghệ th ô n g tin
M ã số: 1.01.10
L U Ậ N V Ă N T H Ạ C SỸ
NGƯỜI HƯ ỞNG DÃN KHOA HỌC
P G S .T S V Ũ Đ Ứ C T H I
H à N ội - 2005
M
Ụ
C
L
Ụ
C
M Ụ C L Ụ C .................................................................................................................................1
LỜ I C Ả M Ơ N ........................ .............................................................................................. 4
D A N H M Ụ C C Á C H ÌN H VẼ T R O N G LU Ậ N V Ă N ...............................................5
MỜ Đ Ằ Ư .................................................................................................................. 6
C H Ư Ơ N G I TỒ N G Q U A N VỀ M V C ........................................................................... 9
1.1. Lịch sử phát triển của M V C ...................................................................................9
1.2. Thiết kế theo m ô hình m ẫu (design p a tte rn )................................................... 12
1.2.1. Đ ịnh n g h ĩa .........................................................................................................12
1.2.2. Lợi ích của thiết kế theo mô hình m ẫ u .................................................... 12
1.2.3. Phân loại các m ầu thiết k ế ........................................................................... 13
1.3. K iến trúc M V C .........................................................................................................14
1.3.1. M odel (M ô hình dừ liệu )...............................................................................14
1.3.2. View (H iền thị hay giao diện người d ù n g ) .............................................15
1.3.3. C ontroller (Đ iều khiển hay Q uán lý chức n ă n g )...................................15
1.3.4. Sự tương tác giữa các thành phần cùa M V C ......................................... 16
1.3.5. M ột số đặc điểm cơ bản của M V C ............................................................17
1.4. M ột số các m ẫu thiết kế trong M V C ................................................................. 18
1.4.1. C om posite P attern ...........................................................................................18
1.4.2. O bserver P a tte rn .............................................................................................20
1.4.3. Strategy P a tte r n ...............................................................................................21
1.4.4. A dapter P a tte rn ............................................................................................... 23
1.4.5. C om m and P a tte rn .......................................................................................... 24
1.4.6. Factory P a tte rn .................................................................................................26
1.4.7. M ediator P a tte rn ............................................................................................. 27
1.4.8. D ecorator P a tte rn ............................................................................................28
1.4.9. So sánh các m ẫu thiết k ế .............................................................................. 29
1.5. Giới thiệu m ột số công nghệ nền tả n g ...............................................................31
1.5.1. H TTP, H T M L và các sự k iệ n ...................................................................... 31
1.5.2. Chu trình request/response (hỏi/đáp) của H T T P ................................. 32
1.5.3. C ác phiên làm việc (S e ssio n )..................................................................... 32
1.5 4 X M L .......... .........................................................................................................33
1.5.5. N gôn ngừ Java và các ứng dụng F ram e w o rk .........................................34
1.5.6. J a v a B e a n s ......................................................................................................... 34
1.5.7. J a v a S e rv le t....................................................................................................... 35
1.5.8. B ộ lọc th ô n g t i n .............................................................................................. 36
1.5.9. Di chuyển các yêu c ầ u ..................................................................................36
1.5.10. Java S erver Page, Taglib, Java S erver F a c e .........................................37
1.5.11. C ác m essag e -reso u rce............................................................................... !37
C H Ư Ơ N G II Á P D Ự N G M V C T R O N G T H IẾ T KÉ G IA O D IỆN Đ Ô H Ọ A 39
Một số công nghệ áp dụng kiến trúc Model - View - Controller
2
II. 1. G iới th iệ u ..................................................................................................................39
11.2. Áp dụn g M V C tro n g ngôn ngữ lập trình S m a llT a lk ................................. 39
11.2.1. G iới t h i ệ u .........................................................................................................39
11.2.2. Thành p h ận M o d e l........................................................................................ 40
11.2.3. Thành p h ận V ie w ......................................................................................... 42
11.2.4. Thậnh p h ần C o n tro lle r.................................................................................44
11.2.4. Phối hợp các th àn h phần trong M V C ..................................................... 45
11.3. Áp dụn g M V C tro n g thiết kế các thành phần Java S w in g ....................... 46
11.3.1. G iới t h i ệ u .........................................................................................................46
11.3.3. Jav a S w ing và th iết kế M V C .................................................................... 48
11.3.3.1. Thành phận M o d e l............................................................................... 49
11.3.3.2. T hành phần giao d iện ........................................................................... 51
11.3.4. M ột ví dụ v ề S w in g ......................................................................................53
C H Ư Ơ N G III Á P D Ự N G M V C TR O N G CÁ C Ứ N G D Ụ N G W E B ...................57
III. 1. Lựa chọn kiến trú c tổng thể cho m ột ứng d ụ n g .........................................57
111.2. Áp dụng M V C tro n g m ột ứng dụng w eb tổng q u á t ................................. 59
111.2.1. X ây dự ng th àn h phần C o n tro lle r............................................................59
111.2.1.1. X ác địn h phirơng thức xử lý yêu c ầ u ........................................... 59
111.2.1.2. C h u y ền yêu cầu người dùng ch o chức năng xử lý .................. 60
111.2.1.3. Lựa ch ọ n trang màn hình hiển thị tiếp th e o ................................62
111.2.1.4. Đ a điều k h iể n .......................................................................................66
111.2.2. X ây d ự ng thành phần V ie w ......................................................................68
III.2.2.1. T hiết kế m ẫu cho m àn hình hiển th ị.............................................. 68
Ịn .2 .2 .2 Á nh x ạ U R L tới m ột trang m àn hình hiển t h ị ............................ 70
111.2.3. X ây d ự n g th àn h phần M o d e l....................................................................71
111.3. Áp dụng M V C tro n g công nghệ J2EE của S u n .......................................... 73
111.3.1. Giới thiệu về công nghệ J 2 E E .................................................................73
111.3.2. Thành p h ần V ie w ........................................................................................ 73
111.3.3. T hành p h ần M o d e l......................................................................................74
111.3.4. Thành p h ần C o n tro lle r.............................................................................. 76
111.3.5. Tirơng tác giữa các thành phần M V C ...................................................78
111.4. Áp dụng M V C tro n g Struts F ra m e w o rk .......................................................80
111.4.1. Giới thiệu về Struts F ra m e w o rk .............................................................80
in .4 .2 . T hành p h ần M o d e l...................................................................................... 81
111.4.3. T hành p h ần V ie w ........................................................................................ 82
111.4.4. T hành p h ần C o n tro lle r.............................................................................. 82
111.4.5. Phối hợp các thành phần M V C ............................................................... 82
111.5. Á p dụng M V C trong ngôn ngữ lập trình P H P ........................................... 85
in .5 .1 . Giới th iệu về P H P .......................................................................................85
111.5.2. Xây d ự ng thành phần M o d e l................................................................... 86
M ột số công nghệ áp (lụng kiến trúc Model - View - Controller
3
111.5.3. X ây dựng thành phận V ie w ......................................................................89
111.5.4. X âỵ dựng thành phần C o n tro lle r............................................................91
111.5.5. Phối hợp các thành phần M V C ............................................................... 92
C H Ư Ơ N G IV X Â Y D ự N G HỆ TH Ố N G ISP B ILLIN G SY STEM TRÊN
STR U TS F R A M E W O R K ... . ..................................................................................... 94
IV. 1. Đ ặt bài t o á n ...........................................................................................................94
IV .2. Sơ đồ chức năng hệ th ố n g .................................................................................95
IV 3. T hiết kế C S D L ......................................................................................................97
IV .4. G iao diện chư ơng tr in h ..................................................................................... 98
IV .5. X ây dựng các thành phần ứng d ụ n g ............................................................100
IV.5.1. X ây dựng thành phận M o d e l.................................................................100
IV .5.2. Xây dựng thành phận V ie w ....................................................................101
IV .5.3. X ây dựng thành phần C o n tro lle r......................................................... 103
IV .6. Đ ánh giá kết quà và hướng phát triể n ......................................................... 104
KÉT L U Ậ N .........................................................................................................................105
TÀJ LIỆU TH A M K H Ả O ............................................................................................. 106
PH Ụ LỤ C
... ............... ......... ........................................................................................107
Một sổ công nghệ áp dụng kiến trúc Model - View - Controller
5
DANH MỤC CÁC HỈNH VẼ TRONG LUẬN VĂN
Hình 1.3.3. C ác thành phần Model, View, Controller trong thanh cuộn
Hình 1.3.4. Sự tương tác giữa các thành phần của MVC
Hình 1.4.2. Các cách hiển thị khác nhau của cùng một dữ liệu
Hình 1.5.2. C hu trình hỏi/đáp (request/response) cùa H T TP
Hình II.3.1. Kiến trúc Java Foundation Classes
Hình II.3.2. Kiến trúc tách Model trong Java Swing
Hình II.3.4. Giao diện chương trình Toolbar Example
Hình III.2.1.3. a. Lược đồ lựa chọn màn hình hiển thị tiếp theo
Hình III.2.1.3. b. Lược đồ lựa chọn màn hình hiển thị đăng xuất
Hình III.2.1.4. Sơ đồ Đơn điều khiển
Hình III.2.1.4.b. Sơ đồ Đa điều khiển
Hình III.2.1 4.C. Sơ đồ Đa điều khiển kết hợp Router
Hình III.2.2.1. Bố cục mẫu của một trang web
Hình II 1.3.5. Lược đồ cấu trúc một ứng dụng w eb trên kiến trúc J2EE
Hỉnh III.5.4. M ô hình UML
Hình IV. 1. Mô hình hoạt động của hệ thổng ISP Billing System
Hình IV.3. Sơ đồ phân rã chức năng hệ thống ISP Billing System
Hình IV.2. Sơ đồ quan hệ thực thể của chức năng Sercurity
Hình IV.4.a. Giao diện Đăng nhập hệ thống
Hình IV.4.b. Giao diện thêm mới một Admin
Hình IV.4.C. Giao diện Danh sách các Admin
Hình IV.4.d. Giao diện Cập nhật thông tin Admin
Một số công nghệ áp dụng kiến trúc Model - View - Controller
6
MỞ ĐÀU
Phân tích và thiết kế là khâu đầu tiên và có ý nghĩa quyết định cho sự
:hành công của hệ thống phần mềm được xây dựng. Các yêu cầu chủ yếu đổi
với một phần mềm tốt như: tính có thể bào trì được, độ tin cậy cao, tính mềm
đèo, có giao diện sứ dụng thích hợp... được quyết định trước hết ở giai đoạn
phân tích và thiết kế. Một thống kê trước đây cho thấy: một lỗi trong phân
tích hệ thống bị bò qua, khi thiết kế xong mới phát hiện thì chi phí sừa chữa
lăng lên 10 lần; và nếu bị bỏ qua cho đến khi cài đặt mới phát hiện ra thì chi
phí tăng lên 40 lần; nếu đến khi vận hành mới phát hiện ra thì chi phí sửa
chữa lên tới 90 lần. M ặt khác, chi phí cho khâu phân tích và thiết kế phần
mềm ờ các nước phát triển (như Mỹ, Anh, Ấn Đ ộ ...) có thể lên đến trên 30%
tồng chi phí phát triển phần mềm. Trong khi đó, chi phí cho khâu lập trình có
dự án đã giảm xuống dưới 10%. Điều này cho thấy vai trò cùa phân tích và
thiết kế phần mềm ngày càng trở nên quan trọng, nhất là trong điều kiện các
hệ thống phần mềm ngày càng có quy mô lớn và độ phức tạp ngày càng cao,
các công cụ lập trình ngày càng phong phú và tiện lợi.
Trong những năm gần đây, thiết kế theo mô hình mẫu nổi lên như một
lĩnh vực mới mẻ được các nhà khoa học quan tâm nghiên cứu bời tính ứng
dụng cao trong lĩnh vực thiết kế phần mềm. Với hàng loạt các nghiên cứu, đề
xuất được thử nghiệm và ứng dụng thành công vào các sàn phẩm công nghệ
cao đã chứng minh thiết kế theo mô hình mẫu là lĩnh vực nghiên cứu có nền
tàng lý thuyết vững chắc. Thiết kế theo mô hình mẫu được ứng dụng trong rất
nhiều khâu của quá trình thiết kế một ứng dụng. Từ việc lựa chọn kiến trúc
tồng thể của ứng dụng cho tới thiết kế tương tác bên trong mỗi thành phần
con của hệ thống.
M odel - View - Controller (M VC) là một mẫu thiết kế phần mềm
Một số công nghệ áp dụng kiến trúc Model - View - Controller
7
cược đánh giá là một trong những phương pháp thiết kế hướng đối tượng
tìành công nhất hiện nay. M VC đà được nhiều nhà khoa học tìm hiểu, nghiên
cứu và đã thu được nhiều thành công lớn.
Với một lĩnh vực khoa học công nghệ mới còn nhiều triển vọng trong
tirơng lai, em đã chọn hướng nghiên cứu về “ M ột số công nghệ áp dụng kiến
trúc Model - View - Controller” cho luận văn của mình. Luận văn này được
xày dựng và tổng hợp các nội dung dựa trên nền một số nghiên cứu về thiết
kế theo mô hình mầu mà trọng tâm là kiến trúc M V C của các nhà nghiên cứu
tiong những năm gần đây và rất nhiều các bài báo được công bố trên các tạp
chí chuyên nghành cũng như trên Internet.
Nội dung của luận văn gồm các chương mục sau:
C h ư ơ n g I: T ổ n g q u a n về M V C
Chương này trình bày những nét khái quát nhất về kiến trúc Model View - Controller bao gồm các kiến thức về lịch sử phát triền của MVC, về
thiết kế theo mô hình mầu, các thành phần trong M VC, sự tương tác giữa các
thành phần M odel, View, Controller và một số các mẫu thiết kế cơ bản để tạo
thành kiến trúc MVC.
C h ư ơ n g II : Á p d ụ n g M V C tr o n g cá c ứ n g d ụ n g đ ỗ h ọ a
Trong chương này trình bày về việc áp dụng M VC trong việc xây
dựng các ứng dụng đồ họa bao gồm việc áp dụng M VC trong ngôn ngữ lập
trình SmallTalk và việc áp dụng MVC trong các thành phần của Java Swing.
C h ư ơ n g I I I : Á p d ụ n g k iế n tr ú c M V C tr o n g c á c ứ n g d ụ n g w eb
Chương này trình bày về cách thức áp dụng kiến trúc M VC trong các
ưng dụng web nói chung bao gồm các kiến thức về việc lựa chọn mô hình
tổng thể cho một dự án web, cách thức phân tách các thành phần của một ứng
Một số công nghệ áp dụng kiến trúc Model - View - Controller
8
dụng thành các thành phần M odel, View, C ontroller cũng như cách thức phối
hợp các thành phần đó lại để tạo thành m ột ứng dụng w eb hoàn chinh.
Chương này cùng trình bày về một số công nghệ áp dụng kiến trúc M VC như:
Công nghệ J2EE, Struts Fram ework , PHP.
C h ư ơ ĩig I V : X â y d ự n g ứ n g d ụ n g w e b I S P B i llin g S y s te m b ằ n g
A p a c h e S tr u ts F r a m e w o r k
Chương này trình bày về cách thức xây dụng m ột ứng dụng w eb cụ
thể trên Apache Struts Framework: Hệ thống ISP Billing System.
Một sổ công nghệ áp dụng kiến trúc Model —View - Controller
9
CHƯƠNG I
TỎNG QUAN VÉ MVC
1.1. Lịch s ử phát triển cùa MVC
Tháng 8 năm 1973, tại thành phố Oslo của Na Uy, Tiến sỹ Trygve
Reenskaug lúc đó đang làm việc cho Viện Nghiên cứu Công nghiệp Trung
ương (Central Institute for Industrial Research) đã viết bài báo “Quản lý điều
hành trong xưởng đóng tàu” (Administrative Control in the Shipyard) và đã
công bố lần đầu tiên tại hội thào quốc tế về các ứng dụng máy tính trong
ngành đóng tàu vào mùa thu năm đó. Trong bài báo của mình, Reenskaug đã
phân tích xưởng đóng tàu hiện đại như một hệ thống thông tin và đưa ra nhiều
kliía cạnh kỳ thuật cũng như các khía cạnh xã hội phức tạp vốn có của một
xường đóng tàu. Với mục tiêu làm giảm độ phức tạp cho một ứng dụng máy
tính, ông đă đề xuất hàng loạt các công nghệ nên được sử dụng trong việc mô
tá một hệ thống. Ý tưởng trung tâm trong chiến lược của ông là “phân rã một
hệ thống lớn hay một hệ thống phức tạp thành các m ô đun thành phần” .
Tiếp đến, Reenskaug mô tả các yêu cầu tổng quát mà một framework
cần có để có thể xây dựng các hệ thống mới trên nền một hệ thống đã có, phù
hợp với cái đã có và hệ thống mới có đủ tính mềm dẻo để có thể thích ứng với
các thay đồi trong tồ chức, ô n g đưa ra các tính chất mà một framework cần
có là:
1. Có thể can thiệp thủ công vào hệ thống một cách dễ dàng.
2. Các nhóm trong xưởng tàu phải có trách nhiệm, quyền hạn và năng
lực phù hợp. Hệ thống xử lý dữ liệu tổng hợp phải được chia thành các hệ
thống con gẳn với từng vùng trách nhiệm. Các hệ thống con sẽ được điều
khiển và phát triển dựa trên từng nhóm cụ thể.
3. M ột hệ thống con phải có trách nhiệm rõ ràng để những người trong
Một số công nghệ áp dụng kiến trúc Model —View —Controller
10
hệ thống đó có thể hiểu về các hoạt động của nó một cách đầy đủ.
4. Tất cả các hệ thống con phải có tính mở để có thề gắn kết với các
hệ thống con khác cùng nhóm hoặc khác nhóm trách nhiệm.
5. Hệ thống tổng thể phải có khả năng phát triển tiếp; có thể thêm vào
các hệ thống con mới hay thay đổi các hệ thống con cũ mà không cần xây
dựng lại toàn bộ hệ thống. Nó có thể nhúng một hệ thống lạ vào mà không
cần thiết lập lại hệ thống. Việc chuyển đổi thế hệ của một hệ thống là đơn
giàn.
M ặc dù, nền tàng về một framework cùa Reenskaug rất vững chẳc,
nhưng lại thiếu m ột ngôn ngữ lập trình hướng đối tượng để có thể trờ thành
cái được gọi là M VC.
M ột vài năm sau đó, tại Califonia, Reenskaug đã được tiếp cận với
chiếc máy tính ALTO , đây là “chiếc máy vi tính đầu tiên trên thế giới có khả
năng điều khiển thông qua các giao diện” . N hờ đó, nó đã giúp ông và các
đồng nghiệp của mình phát hiện thấy “M VC là một giải pháp cho việc điều
khiển các tập dữ liệu lớn và phức tạp” - khi đó là vào năm 1978, tại Xerox
Palo Alto R esearch Center (PARC).
M ô tả m ột fram ework để làm công việc này là một vấn đề không dễ
dàng. Công việc khó nhất là tìm tên cho các thành phần kiến trúc khác nhau
của hệ thống, Reenskaug viết “M odel - View - Editor là tập thứ nhất” . Trong
bài báo “ Thing - M odel - View - Editor” ông đã định nghĩa các khái niệm
sau:
Thing: “N hững cái mà người sử dụng quan tâm ” (khái niệm về thế
giới thực).
Model: “ M ột trình diễn tích cực cùa việc trừu tượng hóa trong một
Một sổ công nghệ áp dụng kiến trúc Model - Vietv —Controller
11
định dạng dừ liệu trong một hệ thống máy tính). (Trừu tượng hóa của Thing).
View: “ M ột hoặc nhiều trình diễn hình tượng của M odel” .
Editor: “ Một giao diện giữa một người dùng và một hoặc nhiều
View” (Sau này gọi là “Controller” và “Tool”).
Từ các thiết kế ban đầu này, kiến trúc M V C được ra đời và xuất hiện
lần đầu tiên trong ngôn ngữ lập trình SmallTalk-80. Trong đó, Model là sự
trừu tượng hóa của thế giới thực, View là trình diễn trực quan và Controller là
các nút bấm, các thanh trượt cho phép người dùng tương tác với hệ thống.
Các thành phần trong MVC được kết nối với nhau và mồi thành phần có thề
liên kết với hai thành phần còn lại, vi thế không còn phức tạp trong việc phân
tầng và trừu tượng hóa. Khi đó, Reenskaug thích sử dụng khái niệm Tool hơn
là Controller.
Không lâu sau đó, Tiến sỹ Reenkaug rời phòng thí nghiệm PARC và
cộng tác làm việc với Jim Althoff và Dan Ingalls. Vì tính hiệu quả của M VC
trong ngôn ngừ lập trìng SmallTalK-80 mà M V C được tiếp tục phát triển đến
ngày nay, nó là một mẫu thiết kế hiệu quả và phù hợp cho thiết kế các thành
phần giao diện người dùng.
Tiến sỹ Reenskaug đã không ngừng nghiên cứu về M VC và trong
những năm gần đây ông bắt đầu xuất bản tài liệu về ngôn ngừ mẫu thiết kế
MVC. Tuy nhiên, ông chưa bao giờ nói đến việc mẫu thiết kế MVC có thể
được sử dụng để giãi quyết bài toán cho các ứng dụng trên các kiến trúc nhiều
tầng. [4]
Sau này, M V C được áp dụng nhiều trong các GUI Framework như:
NeXTSTEP, OPENSTEP, Cocoa, M icrosoft Foundtion Class (MFC) hay
trong thư viện đồ hoạ của Java Swing. Gần đây, bat đầu từ 1998, M VC đã
được áp dụng cho các ứng dụng web, giúp những nhà phát triền phần mềm có
Một số công nghệ áp dụng kiến trúc Model - View - Controller
12
thể xây dựng được các ứng dụng web có độ phức tạp cao, qui mô lớn mà với
cách tiếp cận truyền thống khó có thể đáp ứng được. Các W eb Framework nồi
tiếng hiện nay là: JavaServer Face (JSF), Apache Struts, W ebwork2,
FuseBox, M ach-II, M aypole, Catalyst, ZNF, A pache Cocoon, Ruby on Rails
và nhiều các ứng dụng khác như: W ebObject, Tapestry.
Nghiên cứu về M VC là một công việc khó. Do vậy, để có thể hiểu rõ
về M VC được dễ dàng hơn, trước hết chúng ta cần có kiến thức vể thiết kế
theo mô hình mẫu (design pattern).
1.2. Thiết kế theo mô hình mẫu (design pattern)
1 .2.1. Đ ị n h n g h ĩ a
Trong kỹ nghệ phần mềm, mẫu thiết kế là một giải pháp chung cho
inột vấn đề thường gặp trong thiết kế. v ấ n đề này thường được “lặp đi lặp
lại” trong nhiều dự án. Nói cách khác, mẫu thiết kế được xem như là một
“ khuôn mẫu” có sằn áp dụng được với nhiều tình huống khác nhau để giải
quyết một vấn đề trong một hoàn cảnh cụ thể. [7]
Thiết kế theo mô hình mẫu là quá trình áp dụng các mẫu có sẵn vào
một ứng dụng cụ thể nào đó. v ấ n đề then chốt của thiết kế theo mô hình mẫu
là hiểu rõ về từng mẫu bao gồm các ưu điểm, nhược điềm và khả năng thành
công cũng như cách thức áp dụng các mầu đó vào từng hoàn cảnh cụ thể.
1 .2.2. L ợ i í c h c ủ a t h i ế t k é t h e o m ô h ì n h m ẫ u
Thông thường, mọi người thường chỉ hiểu cách thức áp dụng m ột kỳ
thuật thiết kế phần mềm cho một vấn đề cụ thể nào đó. Do vậy, chúng khó có
thể được áp dụng cho các vấn đề ờ một phạm vi lớn hơn. Thiết kế theo mô
hình mầu cung cấp một giải pháp chung để giải quyết nhiều vấn đề khác
nhau.[7][l]. Thiết kế theo mô hình mẫu có rất nhiều các lợi ích có thể kể ra
sau đây:
Một số công nghệ áp dụng kiến trúc Model - View - Controller
13
- Giúp các nhà phát triển nhanh chóng tìm ra các giải pháp.
- Giúp những nhà nghiên cứu này sinh nhiều ý tưởng mới và độc đáo.
- Giúp các nhà thiết kế trao đổi với nhau một cách dễ dàng.
- Có thể đưa ra các lời giải cho một vấn đề cụ thề.
- Tận dụng được các kinh nghiệm của những người đi trước.
- Biết được hiệu quả của mồi giải pháp trong từng hoàn cành cụ thể.
- Có thề tìm đư ợc lời giái tốt nhất cho một vấn đề.
Tóm lại: "thiết kế theo mô hình mẫu giúp người thiết kế học được sự
thành công từ người khác và tránh đi các thất bại cho bản thân".
1 .2 .3 . P h â n l o ạ i c á c m ẫ u t h i ế t k é
Ngày nay, có rất nhiều các mẫu thiết kế khác nhau được sử dụng vào
quá trình thiết kế phần mềm. Tuy nhiên, các mẫu thiết kế này đều được xây
dựng dựa trên 23 mẫu thiết kế cơ bàn của G o f (Gang o f Four - có nghĩa là
“nhóm 4 người bạn” - quốc tịch Trung Quốc). G of chia các mẫu thành 3
nhóm chính sau đây:
- Nhóm cấu thành: bao gồm các mẫu thiết kế về khởi tạo các đối
tượng là: Factory Pattern, Abstract Factory, Singleton Pattern, Prototype
Pattern, Builder Pattern.
- N h ó m c ấ u t r ú c : bao gồm các mẫu thiết kế về cách thức liên kết các
đối tượng thành các cấu trúc lớn hơn: A dapter Pattern, Brigde Pattern,
Com posite Pattern, Decorator Pattern, Façade Pattern, Flyweight Pattern,
Proxy Pattern.
- N h ó m tư ơ n g tác đ ộ n g bao gồm các mẫu thiết kế về cách thức để
các đối tượng có thề liên lạc được VỚI nhau: Chain of Resp Pattern, Command
Một sổ công nghệ áp dụng kiến trúc Model - Vieyv - Controller
14
Pattern, Interpreter Pattern, Iterator Pattern, M ediator Pattern, Memento
Pattern, Observer Pattern, State Pattern, Strategy Pattern, Template Method,
Visitor Pattern.
Ngoài các mẫu thiết kế cơ bản cùa Gof, rất nhiều các mẫu thiết kế
tổng hợp khác đã được xây dựng lên và cũng đã rất thành công.
1.3. Kiến trúc MVC
M VC là một kiến trúc phần mềm chia M odel (mô hình dừ liệu), View
(phần hiển thị hay giao diện người dùng), Controller (phần điều khiển hay
điều khiển chức năng) của một thành phần hay một ứng dụng thành ba phần
tách biệt, vì thế khi thay đồi trên một trong ba thành phần đó sẽ ảnh hưởng ít
nhất đến các thành phần còn lại.
M VC thường được hiểu là một mẫu thiết kế phần mềm. Tuy nhiên,
MVC mang nhiều ý nghĩa về kiến trúc phần mềm hơn một mầu thiết kế thông
thường. Vi thế, M VC thường được gọi là một kiến trúc phần mềm
(Bruschmann đưa ra năm 1996), mầu thiết kế phần mềm tổng hợp hay mẫu
của mẫu thiết kế. M V C được tổng họp từ nhiều các mẫu thiết kế nhỏ hơn:
View áp dụng mẫu Com posite Pattern, giao tiếp giữa View và Model sừ dụng
mẫu O bserver Pattern;
Controller sử dụng mẫu
Strategy
Pattern
hay
Command Pattern; và một số mẫu khác như: M ediator Pattern, Decorator
Pattern, A daptor Pattern, Factory Pattern... [7]
1 .3.1. M o d e l ( M ô h ì n h d ữ l i ệ u )
M odel nắm giữ các dừ liệu, thực hiện các chức năng liên quan đến
việc truy cập dừ liệu hay thay đồi các dữ liệu của chương trình. Model thường
được chia thành hai hệ thống con đó là: các trạng thái nội tại của hệ thống và
các hành động làm thay đồi các trạng thái cùa hệ thống, v ề mặt ngữ pháp học,
có thể hiểu các trạng thái nội tại của hệ thống như các danh từ và các hành
M ột số công nghệ áp (lụng kiến trúc M odel - View —Controller
15
động làm thay đổi các trạng thái của hệ thống là các động từ.
Mỗi một ứng dụng (hoặc thành phần) có một Model khác nhau. Ví dụ,
Model của một thanh cuộn (scrollbar) có thể chứa các thông tin hiện tại của
nó, giá trị lớn nhất, nhỏ nhất hay độ rộng của thumb. M odel có thể chịu trách
nhiệm giao tiếp một cách gián tiếp với View và Controller. Gián tiếp có nghĩa
là Model không hề biết các View và Controller của nó - nó không duy trì các
tham chiếu đến chúng. Thay vào đó, Model gửi đi các thông báo đến View và
Controller khi có sự thay đổi trạng thái của hệ thống.
1 .3 .2 . V i e w ( H i ể n t h ị h a y g i a o d i ệ n n g ư ờ i d ù n g )
View liên quan đến việc bạn nhìn thấy các thành phần trên màn hình
như thế nào. Một ví dụ dễ thấy về sự khác nhau giữa các hiển thị, hãy nhìn
vào một ứng dụng cừa sồ (window) trên hai hệ điều hành khác nhau. Hầu hết
các cửa sồ có một thanh tiêu đề nằm ở phía trên. Tuy nhiên, thanh tiêu đề có
thể có một nút close (dấu X) phía bên trái trong hệ điều hành MAC, hoặc có
một nút close (dấu X) phía bên phải trong hệ điều hành W indows.
View xác định việc hiển thị trực quan dữ liệu của Model. View chịu
trách nhiệm cập nhật những thay đồi của nó trên màn hình. View có thể nhận
những thông báo gián tiếp từ Model hoặc các thông điệp từ Controller.
1 .3.3. C o n t r o l l e r ( Đ i ê u k h i ể n h a y Q u ả n l ý c h ứ c n ă n g )
Controler là hành vi của ứng dụng. Nó tập trung việc nhận các yêu cầu
cùa người dùng, chuyển các yêu cầu của người dùng đến chức năng xử lý yêu
cầu của M odel và chuyền kết quả trả về cho View hiển thị.
Controller có thể nhận thông điệp từ View và những thông điệp gián
tiếp từ Model.
Hình dưới chỉ ra M odel, View, C ontroller làm việc với nhau như thế
M ột số công nghệ áp (lụng kiến trúc M odel - View - Controller
16
nào để tạo ra một thanh cuộn (scrollbar). M odel nắm giữ thông tin về giá trị
nhò nhất (min), lớn nhất (max). View xác định chính xác vẽ scrollbar như thế
nào và vẽ ở vị trí nào. Cuối cùng Controller chịu trách nhiệm xử lý các sự
kiện chuột. Kết quả scrollbar mang đầy đủ chức năng của MVC.
View'.
yểàmsi**}
&ãiúwa~ịl&
I
ị
Acte#
íMsứimd
tmtnm
ỂÍ3ÍÌírt t5vj:rè
:
ị
<
1
1
*
Hình 1.3.3. Các thành phần M odel, View, Controller trong thanh cuộn
1.3 .4 . S ự t ư ơ n g t á c g i ữ a c á c t h à n h p h ầ n c ủ a M V C
Trong kiến trúc M V C, M odel chịu trách nhiệm thông báo cho View
biết khi có sự thay đổi và cho phép View có thể lấy các thông tin về trạng thái
và Controller có thể truy cập vào các chức năng của Model. View lấy dừ liệu
từ Model và chịu trách nhiệm hiền thị chúng. Nó tự động cập nhật việc hiển
thị khi có sự thay đổi trong Model. Đồng thời, View cũng làm nhiệm vụ là
chuyển các yêu cầu của người dùng đến Controller. Controller lựa chọn chức
năng xử lý yêu cầu của người dùng và lựa chọn thành phần hiển thị tiếp theo.
Trong các ứng dụng đồ họa, các yêu cầu có thể là các sự kiện bàn phím, chuột
hoặc từ việc lựa chọn các menu. Trong các ứng dụng web, chúng còn là các
yêu cầu HTTP PO ST, G E T ... Controller lựa chọn thành phần hiển thị tiếp
theo dựa vào tương tác của người dùng hoặc dựa vào kết quả xử lý trả về từ
Model.
Một số công nghệ áp dụng kiến trúc Model - Vieyv - Controller
17
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRUNG TAM THONvc» TINTHU VIEN
V “ LO / 6 4 3
'
í
'ế mm ip Evw»s
Hình 1.3.4. Sự tương tác giừa các thành phần của M VC
M ột ứng dụng thông thường sử dụng một bộ điều khiển cho một nhóm
các chức năng liên quan nào đó. M ột số ứng dụng khác có thể sử dụng nhiều
bộ điều khiển độc lập cho mỗi loại người dùng vì có thể có nhiều View khác
nhau úng với mỗi loại người dùng khác nhau.
1 .3.5. M ộ t s ó đ ặ c đ i ể m c ơ b ả n c ù a M V C
Một điều dễ nhận ra là các View thường xuyên được thay đổi theo
thời gian cho phù hợp với từng loại người dùng, trong khi M odel thì lại rất ít
khi thay đổi. Do đó, việc phân tách giữa M odel và View giữ cho Model không
bị thay đồi khi viết lại giao diện. Hơn nữa, hoạt động cùa mỗi chức năng trong
hệ thống thường là phức tạp và khó hiểu cho tới khâu thực thi cuối cùng. Vì
thế, trong một số dự án, các View có thể được thiết kế ngay trong các khâu
đầu tiên của quá trình thiết kế còn M odel sẽ được hoàn thiện dần trong suốt
quá trình phát triển.
Mặc dù M odel và Controller là hai khái niệm riêng rẽ trong kiến trúc
MVC nhưng thực tế chúng lại có mối quan hệ rất chặt chẽ. Mồi thay đổi liên
Một số công nghệ áp dụng kiến trúc Model - View - Controller
18
quan đến Model sẽ tạo ra một thay đổi tương ứng đến Controller.
Kiến trúc M V C cho phép một ứng dựng có thể được xây dựng trên
nhiều ngôn ngữ lập trình khác nhau. Do M odel và Controller là độc lập với
View nên View chỉ cần thông báo cho Controller các sự kiện người dùng và
cập nhật nhũng thay đổi của Model.
1.4. Một số các mẫu thiết kế trong MVC
M VC là một mầu thiết kế tổng hợp được cấu thành từ nhiều mẫu thiết
kế cơ bản: View áp dụng mẫu C om positePattem kết hợp với D ecoratorPattem
để xây dựng thành phần hiển thị, giao tiếp giữa View và Model sừ dụng mẫu
O bserverPattem ; Controller sử dụng mẫu StrategyPattem đề phân phối các
yêu cầu của người dùng cho các chức năng của Model; M odel sử dụng
M ediatorPattem để quản lý các đối tượng trong hệ thống; View sử dụng
A dapterPattem để chuyển giao diện của M odel sang một giao diện chuẩn mà
View có thể hiểu được; Ngoài ra M VC còn sử dụng rất nhiều các mẫu thiết kế
khác để hỗ trợ quá trình xây dựng cũng như liên kết các thành phần Model,
View, C ontroller...
1 .4 .1 . C o m p o s i t e P a t t e r n
Trong một hệ thống, mỗi thành phần có thể là một đối tượng độc lập
hoặc một tập các đối tượng. Com posite Pattern thường được sử dụng để xây
dựng các cấu trúc dữ liệu hình cây. Tóm tại, Com posite Pattern là một tập hợp
các đối tượng mà bất kỳ một đối tượng con nào của nó lại có thể là một
C om positePattem hoặc là một đối tượng cơ sở. Với khái niệm cây, một số đối
tượng được gọi là các "điểm nút" (node) và một số khác được gọi là "lá"
(leaf).
Vấn đề ở đây là xác định được một giao diện duy nhất để có thể dề
dàng truy cập vào các đối tượng trong cây đồng thời đảm bảo việc phân biệt
Một số công nghệ áp dụng kiến trúc Model - View - Controller
19
được các điểm nút và lá. Điểm nút là đối tượng chứa các đối tượng con (các
nút khác hoặc lá) và các con có thể được xóa bỏ hoặc thêm vào nút hiện thời.
Lá là các đối tượng không chứa các đối tượng con.
Một số tác giả đưa ra giải pháp phân tách giữa nút và lá bằng cách xây
dựng các phương thức khác nhau cho các đối tượng nút và lá. Trong đó, các
đối tượng lá có thể có các phương thức như:
public String getNameO; //Lây tên đối tượng
public String getValueO; //Lấy giá trị đối tượng
và các đối tượng nút có thêm các phương thức như:
public Enumeration elemer»ts(); //Lấy danh sách các con cúa nút
public Node getChild(String nodeName); //Lấy một con nào đó
public void add(Object obj); //Bố sung một con
public void remove(Object obj); //Loại bỏ một con
Tuy nhiên, m ột cách tiếp cận khác được khuyên dùng là coi tất cả các
đối tượng trong cây đều là các Composite Pattern. Khi đó sẽ có một giao diện
duy nhất cho tất cà các đối tượng. Bằng việc sử dụng phương thức elements(),
có thể dễ dàng xác định được đổi tượng nào là nút (nếu trà về một danh sách
các đối tượng con) và đối tượng nào là lá (trả về một danh sách rỗng).
Một ứng dụng thông thường đòi hỏi các trang màn hình hiển thị phải
có một bố cục thống nhất được gọi là template. Template là một thành phần
hiển thị được tồng hợp từ nhiều thành phần hiển thị nhỏ hơn theo một cách bố
trí nhất định. M ồi thành phần hiển thị nhỏ hơn như phần tiêu đề trang, các
menu, phần nội dung hay phần cuối của một trang là các thành phần độc lập.
Chúng có thể là một thành phần đơn lẻ hoặc bao gồm các thành phần hiền thị
nhổ hơn.
Việc sử dụng các template trong thiết kế ứng dụng làm cho việc bào
trì trở nên dề dàng hơn. Việc thay đổi bố cục của tem plate sẽ làm thay đổi bố
cục của tất cả các trang màn hình áp dụng tem plate đó. Hơn thế, các thành
Một số công nghệ áp dụng kiến trúc Model - Vieìv —Controller
20
phần hiển thị được chia nhỏ thành các thành phần hiền thị nhỏ hơn, mồi thành
phần hiển thị nhò hơn này được gọi đến bàng cách tham chiếu. Vì thế, việc
thay đổi một thành phần hiển thị đồng nghĩa với việc thay đổi tên tham chiếu
(tên file nguồn, hay đường dẫn) của nó trong thành phần hiển thị lớn hơn. [1]
Trong kiến trúc M V C, thành phần View được xây dựng trên mẫu thiết
kế Composite Pattern kết hợp với mẫu D ecorator Pattern.
1.4.2. O b s e r v e r P a t t e r n
Trong the giới phức tạp của các ứng dụng window, chúng ta thường
mong muốn tại một thời điềm xác định có thể có nhiều kiểu hiển thị khác
nhau cho cùng một nội dung dữ liệu và tất cả các thể hiện đó đều có thề phản
ánh được những thay đổi bên trong nội dung cùa dừ liệu đó. Ví dụ, khi mô tả
các thay đổi về giá cả hàng hóa bán ra bầng cả hình ảnh lẫn bảng báo cáo.
Mỗi lần giá cả thay đổi, chúng ta mong muốn cả hai trình diễn đều cùng tự
động thể hiện thay sự thay đổi đó.
cmnvrẬ
ếmmtằ \
C o n tro lle r
Hình 1.4.2. C ác cách hiển thị khác nhau của cùng một dữ liệu
O bserverPattem già sử đối tượng chứa dữ liệu là độc lập với đối tượng
hiển thị và đối tượng hiển thị sẽ theo dối các thay đồi của đối tượng chứa dừ
liệu.
Một số công nghệ áp dụng kiến trúc Model - View —Controller
- Xem thêm -