1. Trang chủ
  2. » Luận Văn - Báo Cáo

Một số công nghệ áp dụng kiến trúc MODEL - VIEW - CONTROLLER

123 755 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 123
Dung lượng 57,77 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 2

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 V iew (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 o m posite P atte rn 18

1.4.2 O bserver P a tte r n 20

1.4.3 Strategy P a t t e 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 r n 27

1.4.8 D eco rato r P a tte rn 28

1.4.9 So sánh các m ẫu thiết k ế 29

1.5 G iới thiệu m ột số công nghệ nền tả n g 31

1.5.1 H T T P, H T M L và các sự k iệ n 31

1.5.2 C hu trình req u est/resp o n se (hỏi/đáp) của H T T P 32

1.5.3 C ác phiên làm việc (S e ss io n ) 32

1.5 4 X M L 33

1.5.5 N gôn ng ừ Jav a và các ứng dụng F ra m 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 r v 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 Jav a S erv er P age, T aglib, Java S erv er F a c e 37

1.5.11 C ác m e ssa g e -re so u rc e !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

Trang 3

II 1 G iới t h i ệ u 39

11.2 Áp d ụ n g M V C tro n g ngôn ngữ lập trìn h S m a llT a lk 39

11.2.1 G iới t h i ệ u 39

11.2.2 T hành p h ận M o d e l 40

11.2.3 T hành p h ậ n V i e w 42

11.2.4 T hậ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 tro n g M V C 45

11.3 Áp d ụ n g M V C tro n g thiết kế các thành p h ần Jav a S w in g 46

11.3.1 G iới t h i ệ u 46

11.3.3 Jav a S w in g và th iế t kế M V C 48

11.3.3.1 T hà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 T R O N G CÁ C Ứ N G D Ụ N G W E B 57

III 1 L ựa chọn k iế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 ự n g th àn h phần C o n tr o 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ăn g xử lý 60

111.2.1.3 L ự a c h ọ n tra n g 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 ự n g th àn h 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ệ J2E E củ a S u n 73

111.3.1 G iới th iệu v ề cô n g nghệ J 2 E E 73

111.3.2 T hà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 T hành p h ầ n C o n tr o 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 G iới th iệu về S truts 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 tr o 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 tro n g ngôn ngữ lập trình P H P 85

in 5 1 G iới th iệ u v ề P H P 85

111.5.2 X ây d ự n g th àn h phần M o d e l 86

M ột số công nghệ áp (lụng kiến trúc M odel - View - Controller

Trang 4

111.5.3 X ây dựng th àn h phận V ie w 89

111.5.4 X âỵ dự ng th àn h phần C o n tr o lle r 91

111.5.5 P hối hợp c ác thành ph ần M V C 92

C H Ư Ơ N G IV X Â Y D ự N G H Ệ T H Ố N G ISP B IL L IN G SY ST E M 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ăn g hệ th ố n g 95

IV 3 T hiết kế C S D L 97

IV 4 G iao diện ch ư ơ n g t r i n 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 L IỆ U T H A M K H Ả O 106

P H Ụ LỤ C 107

Một sổ công nghệ áp dụng kiến trúc Model - View - Controller

Trang 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 M odel, View, Controller trong thanh cuộnHình 1.3.4 Sự tương tác giữa các thành phần của M VC

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 h u trình hỏi/đáp (req u est/resp o n se) cùa H T T P

Hình II.3.1 Kiến trúc Java Foundation C lasses

Hình II.3.2 Kiến trúc tách M odel trong Java Swing

Hình II.3.4 G iao 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 J2EEHỉ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 SystemHình IV.2 Sơ đồ quan hệ thực thể của chức năng Sercurity

Hình IV.4.a G iao diện Đăng nhập hệ thống

Hình IV 4.b G iao diện thêm mới một Admin

Hình IV.4.C G iao 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

Trang 6

MỞ ĐÀUPhâ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ĩ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 - V iew - Controller (M V C) 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

Trang 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 V C đà đượ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 - C ontroller” 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 M odel - View - Controller bao gồm các kiến thức về lịch sử phát triền của M VC, về thiết kế theo mô hình mầu, các thành phần trong M V C, 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 M VC

C h ư ơ n g I I : Á 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 V C trong việc xây dựng các ứng dụng đồ họa bao gồm việc áp dụng M V C trong ngôn ngữ lập trình SmallTalk và việc áp dụng M VC 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 t r 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

Trang 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

C hươ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 ew ork , PHP

Trang 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 R esearch) đã 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 ModelView — Controller

Trang 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 V C

M ột vài năm sau đó, tại Califonia, Reenskaug đã được tiếp cận với chiếc máy tính A LTO , đâ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 C enter (PARC)

M ô tả m ột fram ew ork để 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, R eenskaug 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)

M odel: “ 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 - VietvController

Trang 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 M VC đượ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 A lthoff 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ế M VC 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ư: NeX TSTEP, O PEN STEP, C ocoa, M icrosoft Foundtion C lass (M FC) hay trong thư viện đồ hoạ của Java Swing Gần đây, bat đầu từ 1998, M V C đã đượ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

Trang 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 Fram ework nồi tiếng hiện nay là: JavaServer Face (JSF), Apache Struts, W ebw ork2, 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 V C 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

Trang 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 o f chia các mẫu thành 3 nhóm chính sau đây:

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, D ecorator 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 o f Resp Pattern, Command

Một sổ công nghệ áp dụng kiến trúc Model - Vieyv - Controller

Trang 14

Pattern, Interpreter Pattern, Iterator Pattern, M ediator Pattern, Memento Pattern, O bserver Pattern, State Pattern, Strategy Pattern, Template M ethod, 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), C ontroller (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 V C 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à M odel 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 - ViewController

Trang 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 M odel 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à M odel 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 đó, M odel 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 )

C ontroler 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ừ M odel

Hình dưới chỉ ra M odel, V iew , C o n tro ller 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

Trang 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 C ontroller 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.

và Controller có thể truy cập vào các chức năng của M odel 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 M odel Đ ồ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

Trang 17

'ế 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 D o đó, 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à C ontroller là hai khái niệm riêng rẽ trong kiến trúc

M VC 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

Trang 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 C ontroller các sự kiện người dùng và cập nhật nhũng thay đổi của M odel

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à M odel sừ dụng mẫu

O bserverPattem ; C ontroller 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 V C 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 M odel, 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, C om 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

Trang 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 Com posite 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 Tem plate 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 tem plate 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ìvController

Trang 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 V iew đượ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 w indow , 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 t r o l l e 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

Trang 21

Gọi đối tượng mang dữ liệu là các Subject (M odel) và đối tượng hiền thị là các O bserver (View ) Mỗi một O bserver đăng ký theo dõi một Subject bầng cách gọi một hàm công khai (public) của Subject Khi đó, mỗi Observer cần một giao diện để Subject gọi khi dữ liệu thay đổi

abstract interface Observer{

//Gửi thông báo cho các Observer biết đã có sự thay đối

public void sendNotify(String s);

>

abstract interface Subject{

//Đăng ký theo dõi với Subject

public void registerInterest(Observer obj);

}

Để có thể theo dõi đối tượng Subject, mỗi O bserver cần đăng ký với Subject bằng cách gọi hàm registerlnterest của Subject Khi có các sự kiện làm thay đổi dữ liệu, Subject sẽ gọi phương thức sendNotify của O bserver và

O bserver sẽ tự động thay đồi các hiền thị của mình

Trong kiến trúc M V C, việc giao tiếp giữa M odel và View sử dụng mẫu thiết kế O bserver Pattem M odel đóng vai trò là đối tượng mang dữ liệu (Subject) và V iew đóng vai trò là đối tượng hiền thị (Observer) Model chịu trách nhiệm thông báo cho View biết khi có sự thay đổi và cung cấp khả năng cho phép View có thể lấy các thông tin về trạng thái cùa hệ thống View lấy

dừ liệu từ M odel và chịu trách nhiệm hiển thị các nội dung đó Nó tự cập nhật việc hiển thị khi có sự thay đổi trong mô hình [1 ] [2] [3] [4]

1.4 3 S t r a t e g y P a t t e r n

Strategy Pattern bao gồm một tập các thuật toán được bao gói trong một lớp điều khiển được gọi là Context Chương trình client có thề lựa chọn một trong những thuật toán đó, đôi khi Context tự lựa chọn thuật toán tốt nhất cho client M ục đích của Strategy Pattern là chuyển đổi các thuật toán một cách dễ dàng m à không cần sử dụng các câu lệnh điều khiển Tại một thời

Một số công nghệ áp dụng kiến trúc Model - VieìV - Controller

Trang 22

điểm chỉ có một thuật toán được lựa chọn C ác thuật toán trong Strategy Pattern nhiều hay ít đều cùng giải quyết một vấn đề.

Có thề có nhiều thuật toán để xử lý m ột chức năng cùa một chương trình Chương trình có thể lựa chọn m ột trong số các thuật toán này dựa vào tính hiệu quả của chúng hoặc do người dùng lựa chọn C ác thuật toán này có thể được thêm vào, bớt đi hay thay đổi tại bất kỳ thời điểm nào Strategy Pattern cho phép lựa chọn động một trong các thuật toán đó

Một sổ trường hợp có thể có các lựa chọn làm cùng một việc bầng nhiều cách thức khác nhau như:

- Lưu file trong các định dạng khác nhau

- N én file sử dụng các thuật toán khác nhau

- Thu video bàng các định dạng khác nhau

- Sử dụng các chiến lược ngắt dòng khác nhau đế hiển thị văn bản.

- Biểu diễn cùng một dữ liệu bằng nhiều định dạng khác nhau như: biểu đồ đường thẳng, biểu đ ồ hình tròn

Trong mồi trường hợp, chương trình sẽ yêu cầu C ontext lựa chọn một trong các thuật toán để thực hiện

Ỷ tường đằng sau Strategy Pattern là bao gói nhiều chiến lược khác nhau và cung cấp m ột giao diện đơn giàn cho phép chọn lựa một trong những chiến lược đó C ác chiến lược có cùng một giao diện chương trình, tuy nhiên mỗi thành phần của nó không cần có cùng cấu trúc

Già sừ cần xây dựng một chương trình sắp xếp các số tự nhiên bằng các thuật toán khác nhau như: Q uicksort, Shell Sort, M ergeSort, các thuật toán này có thể được lựa chọn một cách ngầu nhiên Khi đó, sử dụng Strategy Pattern bằng cách xây dựng các đối tượng sau đây:

Một số công nghệ áp dụng kiến trúc Model - View - Controller

Trang 23

- SortStrategy (Strategy): Mô tà một giao diện chung cho tất cả các thuật toán Đối tượng SortList (Context) sê sử dụng giao diện này để gọi một thuật toán xác định được định nghĩa trong các đối tượng thực thi.

- Q uickSort, ShellSort, M ergeSort (C oncrete Strategy): Là các đối tượng cụ thể thực thi giao diện SortStrategy

- SortList (Context): Tham chiếu đến SortStrategy và gọi một trong các đối tượng cụ thể thực thi các thuật toán Q uickSort, ShellSort, MergeSort SortList chứa một thể hiện biến của SortStrategy SortList cũng có thể định nghĩa một giao diện cho phép SortStrategy có thể truy cập vào dừ liệu cùa mình

Khi thực thi chương trình, SortList sẽ khởi tạo biến thể hiện của SortStrategy trong nó bằng một trong các đối tượng cụ thể như QuickSort, ShellSort, M ergeShort Và sau đó gọi các phương thức thực thi của các đối tượng cụ thể đó N hư vậy, một trong các thuật toán (QuickSort, ShellSort,

M ergeSort) có thể được thực hiện trong lúc chương trình đang chạy, tùy thuộc vào lựa chọn cùa người dùng hay việc tính toán hiệu quả cùa hệ thống [1]

Có hai cách đề làm việc này là kế thừa và liên kết Cách thứ nhất, tạo

ra một đối tượng mới kế thừa đối tượng cần chuyển giao diện, sau đó thêm các phương thức cần thiết để có thể chuyển nó sang giao diện mong muốn Cách thứ hai, tạo ra m ột đối tượng mới chứa một biến thể hiện cùa đối tượng

Một số công nghệ áp dụng kiến trúc Model - View - Controlỉer

Trang 24

cần chuyển giao diện, sau đó xây dựng các phương thức đề chuyển các lời gọi đến đối tượng cũ thông qua giao diện của đối tượng mới.

A dapter Pattern tập trung vào giải quyết sự tương thích giữa hai giao diện đang tồn tại, giàm công sức viết lại m ã lệnh xuống một mức tối thiểu có thể được A dapter Pattern hướng tới việc tái sử dụng các giao diện có sẵn và chỉ thực sự cần thiết khi mọi thứ đã được xây dựng từ trước A dapter Pattern được ứng dụng trong các trường hợp sau:

- Cần tích họp một vài mô đun vào chương trình

- Không thể sát nhập trực tiếp mô đun vào chương trình

- Mô đun đang tồn tại không có giao diện như mong muốn: cần nhiều các phương thức hơn cho mô đun đó hoặc một số phương thức cần phải viết lại (chồng phương thức) [1] [2] [3] [4]

Trong kiến trúc M VC, View thường sừ dụng Adapter Pattern để chuyển Model sang m ột giao diện chuần mà View có thể sử dụng được

1 4.5 C o m m a n d P a t t e r n

Khi xây dựng một ứng dụng cần cung cấp một danh sách các menu lựa chọn các chức năng như m ở file, thoát hay thay đổi màu nền M ỗi khi người dùng lựa chọn một chức năng, chương trình sẽ gọi một hàm xử lý tương ứng bằng m ột cấu trúc điều khiển như sau:

public void action Performed(ActionEvent e) {

Object obj = e.getSourceO;

if(obj == mnuOpen) fi!eOpen();//mở file

if(obj == mnuExit) exitClicked();//thoát chương trình

if (obj == btnRed) redClicked();//chuyển màn màu đỏ

Trang 25

nên cồng kềnh Hơn nữa, các ngôn ngữ lập trình hướng đối tượng thường cố gang tránh sử dụng một dãy các câu lệnh điều khiển để quyết định đổi tượng nào được lựa chọn.

Command Pattern tập trung vào giải quyết vấn đề đó bằng cách chẳn chắn rằng các đối tượng sẽ luôn nhận trực tiếp các lệnh Command Pattern thực hiện việc bao gói một chức năng cùa ứng dụng trong một đối tượng Đối tượng này thực thi m ột giao diện cho phép giao tiếp với các chương trình client, ứ n g dụng sẽ thực hiện các chức năng thông qua lời gọi hàm trên giao diện đó Các client không biết gì về hoạt động bên trong đối tượng và các thay đổi bên trong đối tượng cũng không ảnh hưởng tới các chương trình phía client

Để chắc chắn mỗi đối tượng sẽ nhận đúng lệnh ứng dụng yêu cầu, chúng ta sử dụng m ột đối tượng tên là Com mand, đổi tượng này luôn chứa phương thức Execute như sau:

public interface Command{

public void ExecuteO;

>

Bây giờ, phương thức actionPerform ed trở thành:

public void actionPerformed(ActionEvent e) {

Command cmd = (Command) e.getSourceO;

cmd.ExecuteO;

>

Sau đó, xây dựng phương thức Execute cho mỗi đối tượng xử lý các chức năng mong đợi Khi đó, chỉ cần quan tâm đến chức năng của đối tượng chửa chức năng đó m à bỏ qua thành phần chương trình thực hiện việc lựa chọn quyết định

M ột mục đích quan trọng nữa của Com m and Pattern là phân tách chương trình khỏi giao diện sử dụng Nói cách khác, các đối tượng chương

Một sổ công nghệ áp dụng kiến trúc Model - ViewController

Trang 26

trình này sẽ hoàn toàn không biết gì về các đối tượng khác Giao diện người dùng nhận lệnh và yêu cầu đối tượng Command xử lý Giao diện người dùng không biết cũng như không cần biết chức năng nào trong Command sẽ được thực thi.

Command Pattern cũng được sử dụng để báo cho chương trình biết thời điềm thích hợp để thực hiện lệnh mà không phải là ngay lập tức Trong trường hợp này, có thể đưa các lệnh vào trong hàng đợi đề chương trình sê thực hiện lần lượt Cuối cùng, đối tượng Com mand có thể nhớ các thao tác đã thực hiện và có thể thực hiện hủy bỏ kết quà m ột thao tác đã được thực hiện (undo) [1] [2] [3] [4]

Trong kiến trúc M VC, Controller Iihận các yêu cầu từ người dùng, lựa chọn chức năng xử lỷ yêu cầu của Model và chuyền kết quả xử lý từ M odel cho khâu hiển thị tiếp theo Mỗi một chức năng xử lý yêu cầu trong M odel cần phải đăng ký xử lý một yêu cầu nhất định với Controller Khi nhận được yêu cầu từ người dùng, Controller sẽ tìm kiếm chức năng đã đăng ký xử lý yêu cầu đó Nếu thấy, nó sẽ chuyển yêu cầu cho chức năng đó xử lý và nhận

về kết quả Nếu không thấy, Controller sẽ gọi m ột chức năng mặc định để xử

lý nó hoặc hiền thị m ột thông báo lỗi

Áp dụng Com mand Pattern vào thành phần Controller cùa kiến trúc

M V C giúp cho Controller mềm dèo trong việc đăng ký các chức năng xừ lý yêu cầu, loại bỏ các câu lệnh điều khiển (if-then-else, sw itch-case) khó hiểu

và khó bảo trì, đồng thời giảm được số lượng các dòng mã lệnh đặc biệt hữu ích với các ứng dụng có qui mô lớn và phức tạp

Trang 27

“nhà xưởng” có nhiệm VỌI khởi tạo các đối tượng khi chạy và trà về một thể hiện trong một nhóm các đối tượng liên quan tùy thuộc giá trị các tham số nhận được Factory Pattern được sử dụng trong các trường hợp sau:

- Một đối tượng không biết trước loại đối tượng nào nó sẽ tạo ra khi thực thi

- M ột đối tượng sử dụng các đổi tượng con của nó đề mô tả đổi tượng

sẽ được tạo ra

Có nhiều dấu hiệu để nhận biết một FactoryPattem là:

- Đổi tượng cha là trừu tượng và đối tượng trà về là đối tượng cụ thể

- Đối tượng cha chứa các phương thức cơ sờ và các đối tượng con được tạo ra khi các phương thức này chưa đáp ứng được chức năng của chương trình

- Các đối số truyền cho đối tượng Factory cho biết loại đối tượng nào cần được trà về Trong trường hợp này, các đổi tượng có thể có cùng tên phương thức nhimg chúng có thể thực hiện các công việc hoàn toàn khác nhau [1] [2] [3] [4]

1 4 7 M e d i a t o r P a t t e r n

Thông thường, m ột chương trình được tạo nên từ nhiều đối tượng, các chức năng và tính toán được phân chia cho các đối tượng này s ố lượng các đối tượng độc lập dần lớn lên, việc giao tiếp giữa các đối tượng này cũng trờ nên rất phức tạp làm cho chương trình trở nên khó đọc và khó bảo trì Điều này cũng làm cho việc thay đổi chương trình trở nên khó khăn hơn khi m à bất

cứ thay đổi nào trên một đối tượng cũng kéo theo những thay đổi dây chuyền trên những đối tượng khác M ediator Pattern tập trung giải quyết vấn đề này bằng cách tạo ra m ột đối tượng trung gian điều khiển việc giao tiếp giữa các

Một số công nghệ áp dụng kiến trúc Model - View - Controller

Trang 28

đối tượng độc lập Khi xuất hiện thay đổi trên một đối tượng độc lập, nó sẽ gửi thông tin cho đối tượng trung gian, đối tượng trung gian sẽ chuyển những thông tin đó cho các đối tượng liên quan khác.

M ediator Pattem tạo ra một mối liên kết không trực tiếp giữa các đối tượng độc lập, đồng thời nó cũng nắm giữ các hành vi của hệ thống mà lẽ ra

sè được phân bô cho các đối tượng liên quan Do đó, M ediator Pattem giúp chúng ta có dễ dàng thay đổi hành vi của hệ thống bằng các thay đổi trên đối tượng trung gian M ediator Pattem cũng giúp chúng ta có thêm các đối tượng vào hệ thống mà không ảnh hưởng đến các thành phần khác của hệ thống Đồng thời, M ediator Pattem giải quyết được vấn đề các đối tượng độc lập cần phải biết quá nhiều thông tin về các đối tượng liên quan khác

Tuy nhiên, đối tượng trung gian có thể trở nên quá phức tạp và khó thay đổi hay bảo trì D o vậy, đối tượng trung gian chỉ nên giữ vai trò quản lý việc giao tiếp giữa các đối tượng chứ không nên can thiệp và các tác vụ của các đối tượng

Mồi đối tượng trung gian cần phải biết tất cả các phương thức của đổi tượng liên quan Do đó, khả năng tái sử dụng đối tượng trung gian này trên các dự án khác là rất khó Tuy nhiên, việc xây dựng một đối tượng trung gian lại đơn giàn hơn nhiều so với việc quàn lý các giao tiếp giữa các đối tượng độc lập [1] [ 2 ] [3] [4]

Trong kiến trúc M V C, Model có thể sử dụng M ediator Pattem để quản

lý được các đối tượng trong hệ thống

1 4 8 D e c o r a t o r P a t t e r n

Tương tự A dapter Pattem , D ecorator Pattem mở rộng một đổi tượng

cơ sở bằng hai cách là kế thừa và liên kết C ách thứ nhất, tạo ra một đối tượng mới kế thừa đối tượng ban đầu, sau đó thêm các phương thức cần thiết cho

Một số công nghệ áp dụng kiến trúc Modeỉ - View - Controỉìer

Trang 29

ứng dụng Cách thứ hai, tạo ra một đối tượng mới chứa một biến thể hiện của đối tượng ban đầu, sau đó xây dựng thêm các phương thức cần thiết cho ứng dụng.

Trong lập trình đồ họa, giả sử cần xây dựng m ột đối tượng cửa sổ hồ trợ khả năng cuộn m àn hình Đầu tiên, chúng ta sẽ xây dựng lớp W indow chứa các chức năng hiển thị cần thiết Tiếp đến có ba lựa chọn: M ột là, bổ sung thêm chức năng scrolling trực tiếp vào lớp W indow (Tuy nhiên, cách này có thể làm cho W indow phải lưu trữ quá nhiều thành phần mà trong nhiều trường hợp nó không sử dụng đến); Hai là, xây dựng một lớp mới tên là

W indow W ithScrolling chứa tất cả các thành phần của lớp W indow và bồ sung chức năng scrolling vào lớp này Ba là, xây dựng một lớp mới tên là ScrollingW indow bằng cách kế thừa hoặc liên kết lớp W indow (D ecorator Pattern)

Tiếp đến, chúng ta lại mong muốn tạo thêm các đường viền (border) cho tất cả các đối tượng cửa sổ Với cách thứ hai, cần phải tạo ra các lớp con khác là W indow W ithB order và ScrollingW indowW ithBorder Điều này thật tồi tệ mỗi khi một chức năng mới cần được thêm vào Tuy nhiên, với cách thứ

ba (áp dụng D ecorator Pattern) chỉ cần xây dựng một lớp con mới là

B orderedW indow D ecorator và tùy theo trạng thái của hệ thống có thể trang trí của sổ là có scrolling hay có các đường viền hay không [1] [2] [3] [4]

1.4.9 S o s á n h c á c m ẫ u t h i ế t k ế

Chain o f R esp Pattern (không trình bày ở đây), Command Pattern,

M ediator Pattern, O bserver Pattern đều tập trung giải quyết vấn đề giao tiếp giữa các đối tượng Chain o f Resp Pattern chuyển yêu cầu từ người gửi đến người nhận theo một dây chuyền Command Pattern thường đặc tà việc kết nối giữa đối tượng gửi và nhận bằng một lớp con M ediator Pattern liên kết

M ột số công nghệ áp (lụng kiến trúc M odel — View - Controller

Trang 30

các đối tượng gửi và nhận một cách gián tiếp O bserver Pattern định nghĩa một giao diện riêng biệt cho phép nhiều đối tượng có thể nhận thông tin từ đối tượng gửi trong lúc chương trình đang chạy []

M ediator Pattern và Observer Pattern là các mẫu thiết kế tương tranh

Sự khác nhau giữa chúng là Observer Pattern thực hiện liên kết các đối tượng bằng cách đưa ra đối tượng theo dõi O bserver và đối tượng nội dung Subject, trong khi M ediator Pattern nắm giữ các liên kết giữa các đối tượng khác Do

đó, O bserver Pattern thường được tái sử dụng còn M ediator Pattern thì không

M ediator Pattern là tương tự với Façade Pattern (không trình bày ở đây) ở chỗ nó tách các chức năng từ các đối tượng đang tồn tại M ediator Pattern tập trung các chức năng giao tiếp giữa các đối tượng, nó thường bổ sung thêm các chức năng và các đối tượng giữ m ột tham chiếu đến nó Ngược lại, Façade Pattern định nghĩa một giao diện đơn giản cho một hệ thống con,

nó không bổ sung thêm các chức năng và các hệ thống con cũng không hề biết đến nó

A dapter Pattern cung cấp một giao diện khác cho một đối tượng hiện

có Proxy Pattern (không trình bày ở đây) cung cấp một giao diện giống với giao diện của đối tượng hiện có Decorator Pattern cung cấp một giao diện mở rộng cho đối tượng hiện có

A dapter Pattern thay đổi giao diện của một đối tượng Decorator Pattern mở rộng khả năng đáp ứng của một đối tượng Kết quả, Decorator Pattern hỗ trợ đệ qui trong khi A dapter Pattern là không thể

C om posite Pattern và D ecorator Pattern có lược đồ cấu trúc tương tự, phàn ánh một thực tế là cả hai đều dựa trên việc đệ qui để sắp xếp một số lượng không hạn chế các đối tượng D ecorator Pattern có thể được xem như một C om posite Pattern suy thoái với chỉ m ột thành phần Tuy nhiên,

M ộ t số c ô n g n g h ệ áp d ụ n g k iế n trú c M o d e l - V iew - C ontroller

Trang 31

D ecorator Pattern thêm khả năng đáp ứng cho đối tượng, khác với mục đích tập hợp các đối tượng của Composite Pattern D ecorator Pattern được thiết kế

để thêm các đáp ứng cho đối tượng mà không cần tạo thêm các lớp con Composite Pattern không tập trung vào việc trang trí mà nó tập trung vào việc trình diễn Hai mầu thiết kế này không riêng rẽ mà bổ sung cho nhau Do đó, Com positePattem và D ecoratorPattem thường được phối hợp với nhau

Com posite Pattern thường sử dụng Chain o f Resp Pattern để giúp các thành phần có thể truy cập vào các thuộc tính toàn cục thông qua đổi tượng cha Nó cũng có thể sử dụng D ecorator Pattern để thay đổi các thuộc tính của các đổi tượng cấu thành

D ecorator Pattern và Proxy Pattern khác nhau về mục đích nhưng lại giống nhau về cấu trúc Cả hai đều cung cấp khả năng truy cập gián tiếp đến một đối tượng khác và chuyển các yêu cầu đến đối tượng đó

D ecorator Pattern giúp thay đồi skin (dáng vẻ bên ngoài) cùa đối tượng, trong khi Strategy Pattern giúp thay đổi lõi bên trong của đối tượng

Dưới đây là m ột số công nghệ nền tảng được đề cập đến trong luậnvăn

1.5 G iớ i thiệu một số công nghệ nền tảng

1.5.1 HTTP, HTML và các s ự kiện

W orld W ide W eb được xây dựng trên giao thức Hypertext Transfer Protocol (HTTP) và Hypertext M arkup Language (HTML) M ột sự kiện người dùng (U ser Agent) là một tác động cùa người dùng vào hệ thống Ờ đây

là việc người dùng sử dụng trình duyệt web yêu cầu một tài liệu HTML bằng giao thức HTTP Trình duyệt sẽ định dạng và hiển thị tài liệu của người dùng HTTP được xây dựng để có thể truyền đi nhiều hơn HTM L, tuy nhiên HTM L

là không thể thiếu với các ứng dụng web. _

M ộ t s ố c ô n g n g h ệ áp d ụ n g k iế n trú c M o d e l - View - C ontroller

Trang 32

1.5.2 Chu trình requesưresponse (hỏi/đáp) của HTTP

M ột ứng dụng web thường được xây dựng dựa trên giao thức HTTP (Hyper Text T ransfer Protocol) Ờ mức cao nhất chu trình request/response gồm 4 phần cơ bản theo thứ tự là: Đặc tà và thông dịch yêu cầu người dùng, chuyền yêu cầu cho chức năng xử lý tương ứng, lựa chọn màn hình hiển thị thích hợp, trình bày các nội dung cần hiển thị

từ

đ ẽ n

Hình 1.5.2 Chu trình hỏi/đáp (request/response) của HTTP

1.5.3 Các phiên làm việc (Session)

Lập trình w eb thường có nhu cầu theo dõi các giá trị của biến giữa các phiên làm việc và lưu giữ trạng thái giữa các lần triệu gọi trang Tuy nhiên, tính chất then chốt của HTTP là stateless (không lưu trạng thái) Do đó, trình chủ W eb serv er đưa ra đối tượng session để lưu dữ các thông tin người dùng cũng như trạng thái của hệ thống trong m ột khoảng thời gian xác định

Nhầm tránh việc các session chiếm giữ các tài nguyên lâu khi một người dùng không hoàn thành một giao dịch, các session được cấu hình bằng một tham số thời gian hết hạn của session N ếu thời gian giữa hai lần yêu cầu lớn hơn thời gian này thì session sẽ bị chết (tức là tất cả các thuộc tính của session sẽ bị xóa bỏ) C ác session này sẽ chiếm bộ nhớ trên Server và vì thế nếu số lượng người dùng lớn, chúng ta cần quan tâm đến việc giảm độ lớn của từng session

M ộ t s ố c ô n g n g h ệ áp d ụ n g k iế n trú c M o d e l - ViewC o n tro ller

Trang 33

1.5.4 XML

XM L (Extension M arkup Language) - là một ngôn ngừ định dạng mở

rộng dùng để thể hiện dữ liệu Trong quá khứ, các chương trình thường được

dùng nhiều khuôn dạng (format) khác nhau để lưu trừ dữ liệu Ví dụ như dữ

liệu được lưu trong file text phân cách nhau bằng dấu tab, hoặc trong file nhị

phân với các cấu trúc qui định các trường khác nhau, chẳng hạn file word

doc, RTF (Rich Text Form at) Do các khuôn dạng dữ liệu này khác biệt

nhau nên để đọc và nhận dạng chúng cần phải có các chương trình gốc

(những chương trình đã tạo ra file) hoặc các tác già của chương trình phải

công bố định dạng file cho các chương trình khác có thể đọc và hiểu nó

M ột vấn đề khác là dữ liệu chương trình được lưu hay biểu diễn dưới

dạng bàng Điều này đã tồn tại từ rất lâu trong các hệ cơ sở dữ liệu, ở đó cấu

trúc bảng (table) là thành phần chủ yếu để lưu trừ và truy vấn M ặc dù dữ liệu

dạng bảng tỏ ra rất hiệu quả nhưng trong một số trường hợp, chúng không thể

dùng để biểu diễn các cấu trúc dữ liệu phức tạp Chẳng hạn cấu trúc cây hay

các đối tượng lồng nhau

XM L ra đời giải quyết vấn đề này khá trọn vẹn XM L giúp thể hiện và

trình bày dừ liệu ờ mọi khuôn dạng XM L là một chuẩn cho nên được hầu hết

các chương trình chấp nhận và phân tích đúng nội dung dừ liệu Ngôn ngữ

XM L trong sáng, đơn giản, dễ đọc (vì chúng được biểu diễn dưới khuôn dạng

thuần văn bản) và nhất là dễ sử dụng với người dùng cũng như đối với

chương trình Cú pháp XM L rất giống với H TM L (và thực sự thì XML tổng

quát hơn HTM L) Tuy nhiên có một số điều mà XM L không thay thế được đó

là:

nghĩa cấu trúc dừ liệu XM L không định nghĩa cách thức hiển thị dừ liệu

M ộ t s ố c ô n g n g h ệ áp d ụ n g k iế n trú c M o d e l - View - C o n tro ller

Trang 34

trong trình duyệt như HTML.

- XM L không định thay thế và tồng quát hóa mọi khuôn dạng dữ liệu XML phát triền thành những nhánh nhỏ qui định cách thể hiện dữ liệu riêng cho tìmg lĩnh vực

- XM L không phải là ngôn ngữ lập trình XM L cho phép mô tả dừ liệu nhưng không cho biết làm thế nào để xử lý dữ liệu Điều này tùy thuộc vào từng chương trình cụ thể sử dụng dừ liệu chứa trong file XML

1.5.5 Ngôn ngữ Java và các ứng dụng Framework

Java do Jam es Gosling, Patrick m aughton, Christ W arth, Ed và M ike Sheridan phát triển vào năm 1991 tại Sun M icrosystem , Inc Java là một ngôn ngữ lập trình hướng đối tượng được phát triển từ c++ Java có nhiều các đặc điểm nồi bật như: tỉnh đơn giản, an toàn, tương thích, hướng đối tượng, trong sáng, đa trình, trung lập, thông dịch, tốc độ cao, phân tán, linh động N gày nay, Java là m ột lựa chọn hàng đầu cho việc phát triển các ứng dụng đòi hỏi tính bảo mật cũng như không phụ thuộc vào thiết bị

Hiện nay, có rất nhiều các ứng dụng Fram ew ork được nhiều hãng phát triển Các Fram ew ork hướng đến việc tái sừ dụng các thành phần giống nhau của nhiều dự án C ác Fram ework giúp cho các nhà phát triển đỡ vất vả và nhanh chóng xây dựng được các ứng dụng m à vẫn đảm bảo tính an toàn cũng như tính bền vững của ứng dụng Chọn lựa một Fram ework tốt giúp giảm thiểu được thời gian phát triển và nâng cao chất lượng của ứng dụng Nó giúp người lập trình chú tâm vào việc phát triển các chức năng của ứng dụng thay

vì phải làm việc với từng dòng lệnh nhàm chán cùng những sai xót cá nhân cùa người lập trình

1.5.6 Java Beans

JavaB eans là một kiến trúc thành phần trong J2EE (Java 2 Platform,

M ộ t s ố c ô n g n g h ệ áp d ụ n g k iế n trú c M o d e l - Vietv - C ontroller

Trang 35

Standard Edition) JavaB eans là các chương trình phần mềm có thề tái sử dụng để có thể phát triển và tồng hợp thành các ứng dụng phức tạp hơn Với tính chất (phản chiếu) và (đặc tả nội tại), JavaB eans cho phép các đối tượng khác có thể biết các thành phần và các phương thức bên trong của nó như: tên lóp, các biến, các phương thức và các giới hạn truy cập cùa các đối tượng khác vào các thành phần bên trong nó Không có sự hạn chế về khả năng của JavaBean N ó có thể chứa các hàm đơn giản, như là kiểm tra chính tả của một văn bàn, hoặc một hàm phức hợp, như dự đoán vốn đầu tư cổ phần

1.5.7 Java Servlet

JavaServlet thay thế các ứng dụng CGI truyền thống và là trung tâm cùa các ứng dụng w eb trên Java Java là một ngôn ngữ lập trình hướng đối tượng, do đó JavaServlet cố gắng chuyển H TTP vào trong một mẫu hướng đối tượng Điều này giúp cho người phát triển tập trung vào các chức năng chính của ừng dụng hơn là các cơ chế phức tạp của HTTP

HTTP cung cấp một cơ chế chuẩn cho việc mở rộng các dịch vụ gọi là CGI (Com mon G a te w a y Interface - Giao diện cổng giao tiếp chung) HTTP

có thể chuyển các yêu cầu của người dùng đến các chương trình CGI và các chương trình CGI trả về kết quà cho HTTP Do vậy, các yêu cầu người dùng

có thể được chuyển đến một Server quản lý các JavaServlet (trình quản lý này thường được gọi là các Java W eb Server) Server quyết định có thể xử lý yêu cầu này không bằng cách kiềm tra danh sách các Servlet của nó Nếu cỏ một Servlet đăng ký xử lý yêu cầu, Server chuyển yêu cầu cho Servlet đó và nhận kết quả trả về Cuối cùng, Server trả về kết quả cho HTTP hoặc trả về lỗi nếu không tìm thấy Servlet nào đăng ký xử lý

javax.servlet.http.H ttpServlet Nó có 4 phương thức cơ bản nhầm giúp Server

M ộ t s ố c ô n g n g h ệ ảp d ụ n g k iế n trú c M o d e lView - C ontroller

Trang 36

1.5.8 Bộ lọc thông tin

Trong phiên bản JavaServlet 2.3 đưa ra một thành phần mới gọi là bộ lọc thông tin (Filter) Filter chặn các thông tin từ yêu cầu và kết quả trả về, sau đó chuyển đổi hoặc sử dụng các thông tin đó cho các mục đích như: xác thực quyền, ghi log chương trình, nén dừ liệu, định dạng dữ liệu dựa theo vùng địa lý Ngoài ra, Filter còn được sử dụng đề mã hóa dữ liệu, đánh dấu

dữ liệu, khởi động tài nguyên truy cập sự kiện, thay đổi kiểu M INE,

C aching

1.5.9 Di chuyển càc yêu cầu

Đặc tả JavaServlet mở rộng chu trình hòi/đáp của HTTP để cho phép các yêu cầu được gừi đi hay di chuyển giữa các thành phần Kiến trúc M V C

M ộ t s ố c ô n g n g h ệ áp (lụng k iế n trú c M o d e l - View - C ontroller

Trang 37

trong các W eb Fram ework sử dụng tính chất này để chuyển yêu cầu từ client đến các thành phần xử lý yêu cầu tương ứng M ột yêu cầu được di chuyển qua đối tượng Controller, chuyển đến đối tượng xừ lý trong M odel và cuối cùng chuyền đến View.

1.5.10 Java Server Page, Taglib, Java Server Face

Khi JavaServlet lần đầu tiên xuất hiện, nhiều nhà phát triển đã tin tường vào nó bởi năng lực mạnh mẽ, khả chuyển và khả năng mở rộng vượt

xa chuẩn CGI truyền thống

Tuy nhiên, việc viết các đoạn mã hiển thị H TM L bằng phương thức print của Servlet là một điều chán nản và trở thành một bài toán đặt ra Câu trả lời là Java Server Page (JSP) Với JSP, lập trình viên có thề dễ dàng trộn lẫn các thè HTM L với các đoạn mã Java mà vẫn có đầy đủ các tính chất của Servlet

Để bẳt đầu với một trang JSP, lập trình viên có thể bắt đầu viết một trang HTM L và sau đó thêm các tính chất động bàng cách đưa vào các mã lệnh Java hoặc dùng các thư viện thẻ có sằn cùa JSP Tuy nhiên, người phát triển có thể tự xây dựng các thẻ để sử dụng cùng với JSP, các thẻ này được

gọi là C ustom er Taglib Bên cạnh đó có rất nhiều các thư viện như vậy cũng được nhiều hãng phát triển, chúng được gọi là các thư viện thè JSP chuẩn gọi tắt là JSTL (Java Server Page Standard Tag Lib).

M ột thư viện nữa xuất hiện là Java Server Face Kỳ thuật Java Server Face (JSF) làin đơn giản hóa việc xây dựng giao diện cho các ứng dụng web

và cả ứng dụng desktop Tuy nhiên, JSF còn đang trong quá trình phát triển

và hiện tại đã có một thư viện thẻ JSF dùng cho Struts là Struts-Faces

1.5.11 Các message-resource

Các tiêu đề, thông báo, thông báo lỗi được lưu chung vào trong các

M ộ t số c ô n g n g h ệ áp d ụ n g k iế n trú c M o d e l - View - C ontroller

Trang 38

file được gọi là các file tài nguyên thông điệp (message-resource) Các

m essage-resource giúp việc thay đổi ngôn ngừ trình bày trên các giao diện cùa ứng dụng một cách dễ dàng Ví dụ, để định nghĩa một thông báo “ Xin chào” bằng tiếng Việt Nam thì trong file m essage-resource ta thêm vào dòng

“prom t.hello = Xin chào”, đề chuyển thông báo này sang tiếng Anh thì ta thay dòng đó bang “ prom t.hello = Hello” M ặt khác, chúng ta có thê hỗ trợ đồng thời nhiều ngôn ngữ khác nhau trong một ứng dụng bằng cách tạo tương ứng một file m essage-resource cho mồi ngôn ngừ hồ trợ và tùy vào vị trí địa lý hiện tại của người sử dụng mà chương trình sẽ tự động hiển thị ngôn ngữ phù hợp hoặc người dùng tự thay đồi

M ộ t s ố c ô n g n g h ệ áp d ụ n g k iế n trú c M o d e l - View - C ontroller

Trang 39

Trong chương này, chúng ta sẽ tìm hiểu đôi nét về việc áp dụng M V C

để xây dựng các thành phần giao diện trong ngôn ngữ lập trình SmallTalk và trong thư viện Java Swing

11.2 Áp dụng MVC trong ngôn ngữ lập trình Sm allTalk

11.2.1 Giới thiêu

M ột trong những đóng góp của Xerox PA R C cho thế giới lập trình là giao diện tương tác đa cừa sổ trong ngôn ngữ lập trình SmallTalk-80 Trong các giao diện này, đầu vào chủ yếu là các sự kiện chuột, bàn phím và đầu ra chủ yếu là các văn bản và các hình ảnh tương ứng Khái niệm trung tâm phía sau giao diện người dùng của SmallTalk-80 là kiến trúc M odel - View - Controller [15]

Khi chạy một ứng dụng đồ họa, ví dụ chương trình Paint, người dùng

sẽ muốn các hình được vẽ ra sẽ nằm trong một cửa sổ của chương trình và trong một không gian nhất định nào đó thay vì các hình vẽ sẽ nằm trực tiếp trên màn hình và chồng chéo lên các thành phần giao diện khác Vậy thì sự khác nhau cơ bản của hai trường hợp này là gi ? Câu trà lời đỏ là: Có áp dụng

M ộ t s ố c ô n g n g h ệ áp d ụ n g k iế n trú c M o d e l - View - C ontroller

Trang 40

hay không áp dụng mầu thiết kế M VC trong việc xây dựng các thành phần giao diện đồ họa C ác chương trình áp dụng M V C sẽ có hành vi thân thiện và được mong đợi hơn trong khi các ứng dụng không áp dụng M VC sẽ có các hành vi mà đa số người sử dụng không mong muốn.

Ngôn ngữ lập trình SmallTalk-80 là dự án tiên phong trong việc áp dụng M VC để xây dựng các thành phần giao diện đồ họa Trong đó, một chương trình được chia thành các thành phần M odel, View, Controller và việc liên kết giữa các thành phần đó sẽ tạo nên một ứng dụng hoàn chinh

11.2.2 Thành phần Model

Thông thường, thành phần Model nắm giữ dừ liệu của chương trình,

xử lý các yêu cầu của người dùng và trà về kết quả và thông báo cho phần hiển thị Tuy vậy, trong một số trường hợp đặc biệt, M odel có thể bị bò qua Tức là M odel không thể hiện rõ vai trò là nắm giữ các thay đổi của dữ liệu và thông báo cho View khi có các thay đổi xảy ra Các trường hợp như vậy được gọi là “khuyết M odel” (passive model)

M ột ví dụ dễ thấy là trình soạn thào W Y SIW Y G (W hat You See Is

W hat You Get - nhìn thấy nó thế nào thì nó là thế ấy) Thành phần M odel ở đây là chuỗi văn bản (String), View chịu trách nhiệm hiển thị nội dung của String lên màn hình, Controller nhận các sự kiện từ bàn phím Thông thường, khi có tác động của người dùng lên bàn phím, C ontroller sẽ nhận các sự kiện

đó và chuyển đến cho M odel xử lý chúng, tiếp đến M odel sẽ thông báo các thay đổi của hệ thống cho View biết để cập nhật những thay đổi Tuy nhiên, trong ví dụ này, mỗi khi người dùng nhập vào một chừ cái thì sẽ tương ứng với một thay đổi trong M odel và View cần phải cập nhật lại phần hiển thị Bởi vậy, View không cần chờ thông báo của M odel mà sẽ thực hiện việc cập nhật lại màn hình hiển thị ngay sau khi Controller nhận một sự kiện người dùng

M ộ t s ố c ô n g n g h ệ áp d ụ n g k iế n trú c M o d e l - View - C o n tro ller

Ngày đăng: 27/03/2015, 13:07

HÌNH ẢNH LIÊN QUAN

Hình  1.3.3.  C ác  thành phần  M odel,  View,  C ontroller trong thanh  cuộn - Một số công nghệ áp dụng kiến trúc MODEL - VIEW - CONTROLLER
nh 1.3.3. C ác thành phần M odel, View, C ontroller trong thanh cuộn (Trang 16)
Hình  1.3.4.  Sự tương tác giừa các  thành  phần  của M VC - Một số công nghệ áp dụng kiến trúc MODEL - VIEW - CONTROLLER
nh 1.3.4. Sự tương tác giừa các thành phần của M VC (Trang 17)
Hình  1.4.2.  C ác  cách  hiển thị  khác  nhau  của cùng một dữ liệu - Một số công nghệ áp dụng kiến trúc MODEL - VIEW - CONTROLLER
nh 1.4.2. C ác cách hiển thị khác nhau của cùng một dữ liệu (Trang 20)
Hình  II.3.1.  Kiến  trúc  Java  Foundation  C la sses - Một số công nghệ áp dụng kiến trúc MODEL - VIEW - CONTROLLER
nh II.3.1. Kiến trúc Java Foundation C la sses (Trang 46)
Hình  II.3 .2 .  K iến  trúc  tách  M odel  trong  Java  S w in g - Một số công nghệ áp dụng kiến trúc MODEL - VIEW - CONTROLLER
nh II.3 .2 . K iến trúc tách M odel trong Java S w in g (Trang 52)
Hình  II.3.4.  Giao  diện  chương trình Toolbar Example - Một số công nghệ áp dụng kiến trúc MODEL - VIEW - CONTROLLER
nh II.3.4. Giao diện chương trình Toolbar Example (Trang 56)
Hình  III.2 .1 .3 .  a.  L ược  đồ  lựa  chọn  m àn  hình  hiển  thị  tiếp  theo - Một số công nghệ áp dụng kiến trúc MODEL - VIEW - CONTROLLER
nh III.2 .1 .3 . a. L ược đồ lựa chọn m àn hình hiển thị tiếp theo (Trang 63)
Hình  III.2 .1 ,3.b.  Lược  đồ  lựa  chọn  màn  hình  hiển  thị  đăng xuất - Một số công nghệ áp dụng kiến trúc MODEL - VIEW - CONTROLLER
nh III.2 .1 ,3.b. Lược đồ lựa chọn màn hình hiển thị đăng xuất (Trang 65)
Hình  hiển  thị  là  JSP,  Servlet,  H TM L  hoặc  X M L .  Tuy  nhiên,  m ột  ứng  dụng - Một số công nghệ áp dụng kiến trúc MODEL - VIEW - CONTROLLER
nh hiển thị là JSP, Servlet, H TM L hoặc X M L . Tuy nhiên, m ột ứng dụng (Trang 66)
Hình  III.2 .1 .4 .b.  Sơ  đồ  Đ a  điều  khiển - Một số công nghệ áp dụng kiến trúc MODEL - VIEW - CONTROLLER
nh III.2 .1 .4 .b. Sơ đồ Đ a điều khiển (Trang 67)
Hình  III.2 .2 .1 .  B ố   cục  m ẫu  của  m ột  trang  w eb - Một số công nghệ áp dụng kiến trúc MODEL - VIEW - CONTROLLER
nh III.2 .2 .1 . B ố cục m ẫu của m ột trang w eb (Trang 69)
Hình  III.3 .5 .  L ư ợ c  đồ  cấu  trúc  m ột  ứng  dụng w eb   trên  kiến  trúc  J2EE - Một số công nghệ áp dụng kiến trúc MODEL - VIEW - CONTROLLER
nh III.3 .5 . L ư ợ c đồ cấu trúc m ột ứng dụng w eb trên kiến trúc J2EE (Trang 79)
Hình  I I I . 5.4.  M ô  hình  U M L - Một số công nghệ áp dụng kiến trúc MODEL - VIEW - CONTROLLER
nh I I I . 5.4. M ô hình U M L (Trang 92)
Hình  IV . 1.  M ô  hình  hoạt động của “ ISP B illin g   System” - Một số công nghệ áp dụng kiến trúc MODEL - VIEW - CONTROLLER
nh IV . 1. M ô hình hoạt động của “ ISP B illin g System” (Trang 95)
Hình  IV.4.a Giao diện đăng nhập hệ thống - Một số công nghệ áp dụng kiến trúc MODEL - VIEW - CONTROLLER
nh IV.4.a Giao diện đăng nhập hệ thống (Trang 98)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w