Ứng dụng mẫu thiết kế vào kiến trúc của Strut

Một phần của tài liệu HỆ THỐNG QUẢN lý vé đặt THEO mùa PHỤC vụ các sự KIỆN THỂ THAO, văn HOÁ (Trang 68)

Dựa vào mẫu MVC (Model –View - Controller) được Strut sử dụng, chúng tôi nhận thấy rằng đây là một kiến trúc 3 lớp để xây dựng ứng dụng web ổn định. Mỗi tầng View, Controller hay Model đều chứa các lớp và đối tượng trừu tượng mà chúng tôi tạo ra phục vụ cho việc tạo lập những hệ thống bán vé cho các sự kiện. Tuy nhiên vấn đề đặt ra là làm thế nào để hoàn thiện sự phát triển của các hệ thống bán vé thông qua việc tái sử dụng code và thiết kế các thành tố này? Làm thế nào để việc bảo trì và phát triển ứng dụng tốn ít chi phí nhất? Hướng đối tượng là một phương án giải quyết nhưng chưa hẳn là một thuận lợi vì nó vẫn còn nhiều khó khăn trong việc xây dựng các đối tượng dùng lại, xác định đối tượng nào được sử dụng lại và những hướng dẫn để làm sao có thể sử dụng lại các đối tượng này.

Kỹ thuật thiết kế có sử dụng mẫu (design pattern) mở ra một hướng mới nhiều hứa hẹn đạt đến một mức độ cao của việc thiết kế và sử dụng lại code. Sử dụng mẫu nào để đáp ứng yêu cầu thiết kế một hệ thống bán vé khái quát phù hợp với kiến trúc của Strut, đó là:

- Tăng tính độc lập giữa các tầng Model, View, Controller nghĩa là cung cấp một giao diện đơn giản giữa front-end (View + Controller) và back- end (Model).

- Tăng tính mở rộng, bảo trì, tương thích của hệ thống: mọi thay đổi trên front-end (về giao diện,…) thì sẽ không ảnh hưởng đến back-end và ngược lại.

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa

Qua thời gian tìm hiểu, chúng tôi nhận thấy rằng mẫu Proxy và Façade là hai mẫu đáp ứng tốt các yêu cầu trên. Hai mẫu này thuộc về nhóm mẫu có cấu trúc (Strutural Pattern).

Đặc tính của nhóm mẫu có cấu trúc

Các mẫu cấu trúc mô tả cách tổ chức các lớp và đối tượng để kết hợp thành các cấu trúc lớn hơn, cùng phối hợp thực hiện một chức năng mới. Trong mẫu cấu trúc, tính linh động của các cấu trúc lớn này được thể hiện ở khả năng thay đổi các thành phần vào thời điểm thi hành phần mềm.

Mục đích và cách thức áp dụng Proxy

Mẫu Proxy điều khiển một cách gián tiếp việc truy xuất một đối tượng thông qua một đối tượng được ủy nhiệm. Một lý do điều khiển truy cập tới một đối tượng là trì hoãn toàn bộ hao phí của việc tạo và gán giá trị ban đầu cho tới khi thực sự cần dùng. Do đó, Proxy thích hợp mỗi khi cần một tham chiếu linh hoạt hơn hay phức tạp hơn một con trỏđơn giản

Hình 4-1 Mô hình đối tượng của một cấu trúc Proxy tồn tại ở thời điểm thực thi

Mẫu Proxy giới thiệu cách gián tiếp để truy cập đối tượng. Trong ứng dụng này, chúng tôi áp dụng mẫu Proxy cho tầng Controller.

Mục đích và cách thức áp dụng Façade

Mẫu Façade cung cấp một giao diện (interface) thuần nhất cho một tập hợp các giao diện trong một hệ thống con (subsystem) . Façade định nghĩa một giao diện ở

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa

mức cao để cho các hệ thống con dễ dàng sử dụng.

Hình 4-2 Lược đồ UML biểu diễn cho mẫu Façade

Giải thích mô hình:

- Façade: nhận biết các lớp của hệ thống con có trách nhiệm với một yêu cầu; gán các yêu cầu của client đến các đối tượng của hệ thống con.

- Subsystem classes: thực thi các chức năng của hệ thống con, điều khiển công việc được gán bởi đối tượng Façade. Chúng không biết tri thức của lớp Façade và không giữ một tham chiếu nào đến nó.

Mục đích chính của mẫu Façade là làm giảm khả năng truy xuất trực tiếp từ client đến hệ thống con. Trong ứng dụng này chúng tôi áp dụng Façade vào tầng Model.

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa

4.1.2 Kiến trúc h thng

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa

Mô hình trên đây là mô hình dùng để xây dựng hệ thống Season Ticket System được chia thành 3 lớp riêng biệt.

- Model: đây là tập hợp các lớp java có nhiệm vụ:

o Nhận các yêu cầu từ View thông qua Controller (lớp Service được áp dụng mẫu Façade)

o Thi hành các yêu cầu đó: xử lý nghiệp vụ bao gồm việc tính toán, kiểm tra kiểm tra dữ liệu nhập, các ràng buộc toàn vẹn (lớp Process)

o Kết nối với CSDL: đọc và ghi (lớp Manager)

o Trả về các giá trị tính toán cho View thông qua lớp Service

- View: Bao gồm các mã tương tự như JSP để hiển thị form nhập liệu, các kết quả trả về Model.

- Conttroller: đồng bộ hóa giữa View và Model.Tức là với một trang JSP này thì sẽ tương ứng với một hoặc nhiều lớp java để xử lý nó và ngược lại, kết quả sẽ trả về trang jsp xác định. Các lớp java này chính là ActionForm, Action và các lớp điều khiển bên trong tương ứng với mỗi trang JSP. Như vậy, chúng ta có thể tách biệt được các mã java ra khỏi mã HTML. Conttroller giao tiếp với Model thông qua một lớp gọi là Proxy (vì lớp này được chúng tôi sử dụng Proxy Pattern)

Hướng đến việc xây dựng một hệ thống bán vé đa ngôn ngữ, chúng tôi sử dụng lớp PropertyResourceBundle là lớp con của ResourceBundle để quản lý các tài nguyên (hình ảnh, văn bản...) của chương trình thông qua những chuỗi hằng chứa trong những tập tin .properties. Sau này khi đổi ứng dụng sang một ngôn ngữ khác, hệ thống sẽ được chỉ định sử dụng những nhóm tập tin

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa

4.2 Package Diagram

4.2.1 Phn chung

Hình 4-4 Sơđồ package cho hệ thống bán vé theo mùa tổng quát

Trong phần này, chúng tôi đã xây dựng những lớp trừu tượng để phục vụ cho mọi hệ thống bán vé theo mùa. Những lớp này được chứa trong 2 gói «sts.application» và «sts.business» nằm trong gói «sts» của ứng dụng.

Tên package Giải thích

recurrentevent Package của ứng dụng tổ chức sự kiện sts Package của ứng dụng bán vé theo mùa

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa

back-end

sts.business.common Package chứa các lớp cung cấp những chức năng dùng chung cho toàn hệ thống và tái sử dụng khi xây dựng một hệ thống mới.

sts.business.user Package chứa các lớp liên quan đến thông tin của người dùng và xử lý việc xác nhận quyền đối với hệ thống. Package này có liên hệ với package

«sts.business.common» .

sts.business.event Package chứa các lớp liên quan đến thông tin của sự kiện. Package này có liên hệ với package

«sts.business.common» và «recurrentevent».

sts.business.seasonticket Package chứa các lớp liên quan đến thông tin của 6 loại vé. Package này có liên hệ với package

«sts.business.common» và «sts.business.event». sts.business.order Package chứa các lớp liên quan đến vé theo mùa được

đặt.. Package này có liên hệ với package

«sts.business.common» và «sts.business.event» và «sts.business.seasonticket»

sts.application Package chứa các lớp và gói phục vụ cho việc xử lý phần front-end

sts.application.film Package chứa các lớp và gói có liên quan đến sự kiện chiếu phim ở rạp.

sts.application.championship Package chứa các lớp và gói có liên quan đến sự kiện bóng đá Championship.

sts.application.music Package chứa các lớp và gói có liên quan đến sự kiện ca nhạc.

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa

hội văn hóa dân gian.

Bảng 4-1 Mô tả các package cho hệ thống bán vé theo mùa tổng quát

Việc phân chia các gói như vậy giúp cho việc quản trị các phần tử trong ứng dụng trở nên dễ dàng hơn. Điều này cũng làm tăng tính mở rộng cho chương trình. Khi cần xây dựng một hệ thống bán vé cho một sự kiện mới ta chỉ cần sử dụng lại package «sts.business» và phát triển thêm một package ứng với sự kiện đó trong gói «sts.application».

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa

4.2.2 Phim

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa

Nhưđã giải thích ở phần chung, gói «sts.application.film» sẽ chứa các lớp liên quan đến thông tin của sự kiện chiếu phim ở rạp. Tương tự như cách tổ chức ở package «sts.business», «sts.application.film» cũng bao gồm 5 gói mang thông tin giống như Bảng 4-1 nhưng mỗi gói sẽ có những thông tin cụ thể hơn ứng với sự kiện chiếu phim tại rạp.

Tên package Giải thích

recurrentevent Package của ứng dụng tổ chức sự kiện

sts Package của ứng dụng

sts.application.film Package chứa các lớp và gói phục vụ cho việc xử lý phần front-end

sts.business.common Package chứa các lớp cung cấp những chức năng dùng chung cho hệ thống chiếu phim tại rạp.

sts.business.user Package chứa các lớp liên quan đến thông tin của người dùng và xử lý việc xác nhận quyền đối với hệ thống chiếu phim tại rạp. Package này có liên hệ với package

«sts.business.common» .

sts.business.event Package chứa các lớp liên quan đến thông tin của sự kiện chiếu phim tại rạp. Package này có liên hệ với package «sts.business.common».

sts.business.seasonticket Package chứa các lớp liên quan đến thông tin của 2 loại vé theo mùa được áp dụng cho sự kiện này: vé mùa vào nhiều lần và vé mùa giảm giá. Package này có liên hệ với package «sts.business.common» và «sts.business.event». sts.business.order Package chứa các lớp liên quan đến vé theo mùa được

đặt.. Package này có liên hệ với package

«sts.business.common» và «sts.business.event» và «sts.business.seasonticket»

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa

sts.business Package này chứa các gói và lớp đối tượng xử lý back- end, đồng thời có liên hệ với 2 gói «recurrentevent.film» và «recurrentevent.film» để lấy thông tin sự kiện

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa

4.2.3 Championship

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa

Nhưđã giải thích ở phần chung, gói «sts.application.championship» sẽ chứa các lớp liên quan đến thông tin của sự kiện chiếu phim ở rạp. Tương tự như cách tổ chức ở package «sts.business», «sts.application.championship» cũng bao gồm 5 gói mang thông tin giống như Bảng 4-1 nhưng mỗi gói sẽ có những thông tin cụ thể hơn ứng với sự kiện Championship.

Tên package Giải thích

recurrentevent Package của ứng dụng tổ chức sự kiện

sts Package của ứng dụng

sts.application.championship Package chứa các lớp và gói phục vụ cho việc xử lý phần front-end

sts.business.common Package chứa các lớp cung cấp những chức năng dùng chung cho hệ thống Championship.

sts.business.user Package chứa các lớp liên quan đến thông tin của người dùng và xử lý việc xác nhận quyền đối với hệ thống Championship. Package này có liên hệ với package «sts.business.common» .

sts.business.event Package chứa các lớp liên quan đến thông tin của sự kiện Championship. Package này có liên hệ với package «sts.business.common».

sts.business.seasonticket Package chứa các lớp liên quan đến thông tin của 2 loại vé theo mùa được áp dụng cho sự kiện này: vé mùa thành viên và vé mời. Package này có liên hệ với package «sts.business.common» và «sts.business.event». sts.business.order Package chứa các lớp liên quan đến vé theo mùa được

đặt.. Package này có liên hệ với package

«sts.business.common» và «sts.business.event» và «sts.business.seasonticket»

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa

sts.business Package này chứa các gói và lớp đối tượng xử lý back- end, đồng thời có liên hệ với 2 gói «recurrentevent.film» và «recurrentevent.film» để lấy thông tin sự kiện.

Bảng 4-3 Package Diagram của hệ thống vé theo mùa cho Championship 4.3 Mô hình đối tượng

Dưới đây chỉ là mô hình thiết kế đã được chúng tôi lược bỏ các thuộc tính trong từng đối tượng để mô hình nhìn đơn giản hơn. Mô hình đầy đủđược đặt trong phần C. Mô hình đối tượng của Phụ lục.

4.3.1 Phn chung

Như trên Chương 2 đã phân tích, 6 loại vé theo mùa có những thuộc tính chung và những thuộc tính riêng tương ứng với đặc điểm mỗi loại. Hình 4-7 là mô hình đối tượng được thiết kế cho hệ thống bán vé theo mùa tổng quát. Đây là những đối tượng chứa thông tin chuyển tiếp từ Model (Façade, Process và Manager) đến View (trang JSP) thông qua Controller (Action, Proxy) và ngược lại để các lớp này sử dụng. Chúng đều có chứa những thuộc tính đặc trưng.

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa

80

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa

81

Mô tả:

Chú ý: Các lớp được in nghiêng là các lớp trừu tượng.

STT Tên lớp Thuộc tính Phương thức của các service liên quan Lớp cơ sở 1 AbstractSeason-TicketDTO - name - description - createdDate - owner - validity - prices addSeasonTicket() updateSeasonTicket() getSeasonTicket() getTicketList() getSeasonTicketPerformances() 2 AbstractValidity - renewal - reservation - replacement

Các phương thức liên quan tới các đối tượng vé.

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa 82 3 AbstractPrice - value - currencyUnit addSeasonTicket() updateSeasonTicket() getSeasonTicket() getTicketList() getSeasonTicketPerformances() removeSeasonTickets() 4 UserDTO - username - password authenticate() changePassword() registerNewUser() insertDefaultUsers()

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa 83 5 CardDTO - cardID - orderDate - cancelDate - renewStartDate - renewEndDate - ticketPrice - ticketPriceCurrency - eventName - selectedSeat - selectedCategoryName - previewedTicketURL - customerFirstName - customerLastName - customerEmailAddress - status - ticket addSeasonTicketCard() getSeasonTicketCard() printCard() renewSeasonTicketCard() renewSeasonTicketCards() cancelSeasonTicketCards()

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa 84 6 TopicSeasonTicket - topic - hasAll-Performances - excluded-Performances addSeasonTicket() updateSeasonTicket() getSeasonTicket() getTicketList() getSeasonTicketPerformances() AbstractSeason-TicketDTO 7 MultiPerformance- SeasonTicketDTO addSeasonTicket() updateSeasonTicket() getSeasonTicket() getTicketList() getSeasonTicketPerformances() AbstractSeason-TicketDTO 8 MultiEntrySeasonTicketDTO - entryCount - daysOfWeek - isFixed addSeasonTicket() updateSeasonTicket() getSeasonTicket() getTicketList() getSeasonTicketPerformances() AbstractSeason-TicketDTO 9 VIPSponsor-SeasonTicketDTO getFirstVIPSpr- SeasonTicketName() AbstractSeason-TicketDTO

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa

85

10 ReductionSeasonTicketDTO - discountedRate addSeasonTicket() updateSeasonTicket() getSeasonTicket() getTicketList()

getSeasonTicketPerformances()

AbstractSeason-TicketDTO

11 MultiDaySeasonTicketDTO - daysOfWeek addSeasonTicket() updateSeasonTicket() getSeasonTicket() getTicketList()

getSeasonTicketPerformances()

AbstractSeason-TicketDTO

12 OrganizerAccountDTO - roles authenticate() changePassword() registerNewUser() insertDefaultUsers()

AbstractSeason-TicketDTO

13 ReductionCardDTO - startDate addSeasonTicketCard() getSeasonTicketCard() printCard() renewSeasonTicketCard() renewSeasonTicketCards() cancelSeasonTicket-Cards() CardDTO

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa

86 14 FixedValidityDTO - startDate

- endDate

Các phương thức liên quan tới các đối tượng vé.

AbstractValidity

15 OpenValidityDTO - validityNumber - validityType

Các phương thức liên quan tới các đối tượng vé.

AbstractValidity

Bảng 4-4 Mô tả các đối tượng DTO dùng chung

Sau đây là phần mô tả cho các lớp và đối tượng tổng hợp chứa thông tin do REAS cung cấp:

STT Tên lớp Thuộc tính 1 PerformanceDTO - date - time - venue - changeStatus - changeDate 2 AbstractEventDTO - name - description 3 AbstractCategoryDTO - name - description

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa

88

Hệ thống quản lý vé đặt theo mùa phục vụ các sự kiện thể thao, văn hóa

89 Mô tả:

Chú ý: Các đối tượng sử dụng riêng cho sự kiện phim đều kế thừa từ các lớp trong phần chung nên chúng thừa hưởng các

Một phần của tài liệu HỆ THỐNG QUẢN lý vé đặt THEO mùa PHỤC vụ các sự KIỆN THỂ THAO, văn HOÁ (Trang 68)