phân tích thiết kế và công nghệ nền tảng
Trang 1MỞ ĐẦU
Trong thời đại công nghệ phát triển như ngày nay, nhu cầu tìm việc trực tuyến là một yêu cầu thiết yếu trong cuộc sống Yêu cầu công việc và nguồn nhân lực là rất lớn Do đó xây một hệ thống xử lý trực tuyến nhanh, ổn định và dễ dàng cho người dùng là một yêu cầu gây khó khăn trong kỹ thuật phân tích và xử lý của website Qua cách nhìn nhận đó, nhóm đã tìm hiểu, phân tích và quyết định xây dựng một trang web (nền tảng phát triển cổng thông tin điện tử) dựa trên kỹ thuật mới để vừa đáp ứng được nhu cầu việc làm lại vừa đáp ứng được xu hướng thời đại công nghệ
Khóa luận này được chia làm 4 phần:
- Phần 1: Khảo sát thực tế, tìm hiểu nhu cầu người dùng về việc tìm việc hiện nay
- Phần 2: Phương pháp phân tích thiết kế và công nghệ nền tảng
- Phần 3: Phân tích thiết kế hệ thống và hiện thực hệ thống
- Phần 4: Hướng phát triển và kết luận
Trang 2LỜI CẢM ƠN
Trước tiên chúng em xin gửi lời cảm ơn chân thành tới TS.Nguyễn Đình Thuân
đã dành thời gian để hướng dẫn chúng em hoàn thành khóa luận tốt nghiệp này Ngoài ra chúng em cũng gửi lời cảm ơn tới các thầy cô khoa hệ thống thông tin thuộc trường đại học công nghệ thông tin - đại học quốc gia TP.Hồ Chí Minh đã rất tận tâm hướng dẫn việc học tập của chúng em và các bạn sinh viên khác trong suốt những năm tháng học tập tại trường Đồng thời lời cảm ơn này cũng xin dành cho anh Nguyễn Quan Thái đã góp ý và nhiệt tình cung cấp dữ liệu cho nhóm chúng em Cuối cùng chúng em xin cảm ơn cha mẹ là những người sinh ra và dưỡng dục chúng em tới ngày hôm nay Chúng em xin dành thành quả của khóa luận này để tặng những người mà chúng em tri ân
Do kiến thức và thời gian có hạn nên khóa luận này chắc chắn không tránh khỏi thiếu sót, mong các thầy cô chân thành góp ý
Sinh viên
Nguyễn Hữu HữuNguyễn Tiến Long
Trang 3NHẬN XÉT (Của giảng viên hướng dẫn)
NHẬN XÉT
Trang 4(Của giảng viên phản biện)
MỤC LỤC
Trang 6DANH MỤC SƠ ĐỒ, HÌNH
Trang 8CHƯƠNG 1 : GIỚI THIỆU KHÓA LUẬN
1.1 TỔNG QUAN VỀ KHÓA LUẬN
Hệ thống hiện thực trong khóa luận được phát triển theo qui trình ICONIX cùng với
sự phân tích tổng thể nhu cầu về tìm kiếm việc làm hiện nay
Hệ thống phục vụ cho đối tượng chính yếu là sinh viên và các doanh nghiệp, là cầu nối giữa sinh viên và các doanh nghiệp
Ngoài ra hệ thống còn cho phép các trung tâm đào tạo đăng các tin tức đào tạo, các khóa huấn luyện, qua đó người tìm việc có thể tìm được các khóa đào tạo để rèn luyện và nâng cao các kỹ năng mà từ đó có thể tìm được công việc phù hợp hơn với nhu cầu thực tế
1.2 Ý NGHĨA KHÓA LUẬN
Trước thực tế nhu cầu tìm kiếm việc làm cùng với sự phát triển của công nghệ thông tin mạnh mẽ của Việt Nam, việc xây dựng một hệ thống tìm việc trực tuyến hiệu quả là một công cụ hết sức cần thiết Mặc dù có rất nhiều trang web đăng tuyển dụng và tìm việc nhanh nhưng vẫn còn nhiều vấn đề về việc người tìm việc tạo hồ sơ như:
- Những nội dung nhập liệu quá nhiều
- Nội dung nhập liệu quá rời rạc chưa hướng tới người dùng như là người dùng đang ở tình trạng nào? Yêu cầu công việc gì? Và cần thiết nhập nội dung gì cho
hồ sơ của họ?
Vì vậy, việc phân tích nội dung tạo hồ sơ cho người tìm việc là hết sức quan trọng Cùng với vấn đề đó, việc phân tích trạng thái người dùng, các dạng hồ sơ, nhóm thông tin cần điền vừa hướng đến tiêu chí người tìm việc dễ dàng trong việc tạo hồ sơ, cũng như các nhà tuyển dụng vừa ý khi nhận những hồ sơ theo các chuẩn mà họ yêu cầu trực tuyến qua chức năng do hệ thống hỗ trợ
Cùng với sự tích hợp công nghệ mới, nhóm tìm hiểu và phân tích nhu cầu người dùng dựa trên tiêu chí tốc độ xử lý nhanh, thao tác đơn giản giúp người dùng dễ dàng trong việc tìm công việc phù hợp tạo và gửi hồ sơ ứng tuyển vừa ý nhà tuyển dụng
Khóa luận hướng tới việc phân tích nhu cầu của người dùng, xây dựng cổng thông tin điện tử để cung cấp cho người tìm việc nói chung và các bạn sinh viên nói riêng công cụ
Trang 9cạnh đó nhà tuyển dụng và trung tâm đào tạo cũng có thể dễ dàng đăng tin tuyển dụng hoặc tin đào tạo lên website để tìm kiếm nhân viên cho công ty mình.
Trong quá trình thực hiện khóa luận này nhóm đã áp dụng được những điều được học trong nhà trường vào thực tế và cũng đã biết được thêm các công nghệ mã nguồn mở
trên nền ngôn ngữ JAVA như Java Server Faces framework, Spring framework, Hibernate
framework Ngoài ra, nhóm còn tìm hiểu qui trình phát triển phần mềm ICONIX áp dụng
vào việc hiện thực khóa luận
1.3 KHẢO SÁT THỰC TẾ
Hiện nay, nhu cầu tìm kiếm việc làm theo khả năng và nhu cầu tìm kiếm nguồn nhân lực gặp nhiều khó khăn khiến các nhà tuyển dụng khó tìm được nhân viên phù hợp cũng như nhân viên không tìm được vị trí công việc phù hợp
Thực tế hiện nay có rất nhiều website tìm việc và tuyển dụng rất hiệu quả như là VietNamWork.com, Timviecnhanh.com, … giúp người tìm việc tìm thấy những công việc rất dễ dàng nhưng ở khâu tạo hồ sơ vẫn chưa thỏa mãn được nhu cầu của người dùng như là
ở bước nhập liệu bị ràng buộc quá nhiều thông tin, nội dung thông tin chưa được gom thành các nhóm thông tin có liên quan với nhau …
Hệ thống hiện thực trong khóa luận này nhằm đáp ứng nhu cầu trên như:
- Giúp người tìm việc tạo hồ sơ dễ dàng và thuận lợi trong việc gửi hồ sơ đến các nhà tuyển dụng Bên cạnh đó còn giúp họ tìm được những thông tin đào tạo mới của các trung tâm đào tạo
- Giúp nhà tuyển dụng đăng tuyển dễ dàng và theo những nhóm thông tin mà nhà tuyển dụng mong muốn
- Giúp trung tâm đào tạo đăng khóa học, quản lý các khóa học đã đăng, gửi thông tin khóa học đến các thành viên đã đăng kí nhận tin khi có khóa học mới
1.4 GIỚI HẠN KHÓA LUẬN
Khóa luận có hướng tìm hiểu sâu về framework vào việc xây dựng hệ thống Song song với nội dung đó, nhóm cũng đã phân tích về các đặc điểm về nhu cầu việc làm hiện nay để xây dựng chức năng chính cho hệ thống
Trang 10Nội dung Trong khóa luận này tập trung vào hiện thực các chức năng của hệ thống như sau:
- Đối với người tìm việc:
o Tìm việc dễ dàng.
o Giúp người tìm việc tạo được hồ sơ đầy đủ nhất.
o Nội dung trong hồ sơ được gom nhóm một cách súc tích.
- Đối với nhà tuyển dụng:
o Dễ dàng đăng tin tuyển dụng tìm nhân viên cho công ty.
o Vừa ý trong việc nhận hồ sơ trực tuyến.
- Đối với trung tâm đào tạo
o Đăng tin đào tạo chiêu gọi học viên.
o Quản lý danh sách ứng viên trực tuyến
Trang 11CHƯƠNG 2: PHƯƠNG PHÁP PHÂN TÍCH THIẾT KẾ VÀ CÔNG NGHỆ
NỀN TẢNG
2.1 PHƯƠNG PHÁP PHÂN TÍCH THIẾT KẾ
2.1.1 Giới thiệu qui trình phát triển phần mềm ICONIX:
Theo lý thuyết, việc tuân thủ từng khía cạnh của phương pháp UML (phương pháp
mô hình hóa hướng đối tượng) rất có ích cho các giai đoạn trong qui trình phát triển phần
mềm Nhưng trong thực tế, để hoàn thiện đầy đủ các mô hình theo phương pháp UML đưa
ra mất rất nhiều thời gian cho việc modeling (mô hình hóa), analysis (phân tích ), và thiết
kế Trong các dự án thực tế luôn có áp lực làm sao để nhanh chóng bước vào giai đoạn
coding (giai đoạn hiện thực chương trình) một cách nhanh nhất và tiến độ các dự án phần
mềm có xu hướng được đánh giá bằng số lượng mã nguồn chương trình Qui trình ICONIX
là một cách tiếp cận hợp lý tập trung vào giữa giai đoạn đặc tả các usecase (trường hợp sử
dụng) và giai đoạn coding (hiện thực chương trình), nó nhấn mạnh những việc cần và nên
làm vào trong thời điểm bắt đẩu của một khâu trong qui trình phát triển phần mềm
2.1.2 Qui trình ICONIX
Mô hình qui trình (Hình 2.1.) với các bước qui trình ICONIX được thực hiện như sau:
- Phân tích yêu cầu:
o Yêu cầu chức năng: Định nghĩa ra các chức năng hệ thống sẽ làm
o Domain modeling (mô hình hóa phạm vi): Hiểu được không gian vấn đề
và các thuật ngữ nhập nhằng trong khâu phân tích giữa khách hàng và người phân tích yêu cầu, xác định các đối tượng sẽ tham gia vào hệ thống
ở mức quan niệm
Trang 12Hình 2.1. Mô hình qui trình ICONIX
o Xác định hành vi của yêu cầu: Định ra hệ thống và người dùng sẽ tương
tác thế nào dựa vào các bản GUI prototype (phác thảo giao diện) và xác
định tất cả các trường hợp sẽ hiện thực Ở bước này, không yêu cầu phải
xác định đầy đủ hết tất cả các usecase (trường hợp sử dụng) Trong các
bước sau sẽ giúp xác định thêm các trường hợp sử dụng mà chưa xác định được ở bước này
o Milestone 1 (cột mốc thứ nhất): Xem xét lại các usecase (trường hợp sử
dụng) và domain model (mô hình lĩnh vực) có nhất quán với nhau so với
các yêu cầu chức năng của khách hàng hay chưa
- Phân tích và thiết kế sơ bộ:
o Viết đặc tả usecase bao gồm: luồng đi cơ bản mô tả bối cảnh chính và các
luồng đi khác thể hiện các tình huống ít khi xảy ra (các tình huống xảy ra lỗi, các trường hợp ngoại lệ … )
o Robustness analysis (phân tích sự bền vững và hiệu năng của hệ thống ):
Trang 13của hệ thống - bức tranh về các đối tượng trong usecase), vẽ lại luồng đi
như trong đặc tả usecase
o Cập nhật domain model (mô hình phạm vi hay mô hình miền): bước này
tìm các lớp còn thiếu , loại bỏ sự nhập nhằng trong việc đặt tên lớp, thêm thuộc tính và các phương thức cho cho các lớp
o Đặt tên tất cả chức năng logic phần mềm cần thiết để usecase hoạt động.
o Viết lại bản nháp đặc tả usecase trước đó.
- Milestone 2 (cột mốc 2): Đánh giá lại khâu phân tích và thiết kế sơ bộ.
- Thiết kế chi tiết:
o Mô hình sequence (tuần tự): Dựa trên bản nháp đặc tả usecase đầu tiên vẽ
ra các sơ đồ trình tự Mục tiêu của bước này là xác định ra các hành vi của các lớp, các thông tin trao đổi giữa các đối tượng với nhau
o Cập nhật lại các mô hình domain (mô hình miền) trong khi đang vẽ sơ đồ
trình tự Ở bước này mô hình domain gần như tiến sát đến class diagram
(mô hình lớp) vì chúng ta xác định được thêm các thuộc tính và các
phương thức ở bước này
o Tinh chỉnh lại các static model (mô hình tĩnh), các mô hình này thể hiện
kiến trúc của hệ thống ví dụ như mô hình miền, mô hình lớp
- Milestone 3 (cột mốc 3): đánh giá lại khâu phân tích một cách kỹ lưỡng và chi tiết
trước khi đi vào hiện thực chương trình
- Hiện thực chương trình:
o Lập trình và kiểm thử từng đơn vị nhỏ: Dựa vào các bản thiết kế ở các
bước trên, tiến hành việc lập trình và kiểm thử từng đơn vị nhỏ (các hàm trong các class)
o Tích hợp các chức năng lại với nhau và kiểm thử theo kịch bản và tình
huống như đặc tả usecase
o Xem lại sự tương đương giữa các đoạn mã và cập nhật lại các mô hình để
chuẩn bị cho khâu tiếp theo của việc phát triển hệ thống
Trang 142.1.3 Điểm khác biệt giữa qui trình ICONIX và các qui trình khác:
Qui trình ICONIX đưa ra cách để làm sao từ bước đặc tả usecase đến bước hiện thực chương trình một cách nhanh và hiệu quả nhất, giảm tải một số khâu chiếm quá nhiều thời
gian trong các qui trình lớn khác, ví dụ như qui trình RUP thường xảy ra tình trạng analysis
paralysis (tình trạng quá tải trong việc phân tích hay suy nghĩ khiến cho tiến trình phát triển phần mềm bị ngưng trệ dẫn đến không đưa ra được một quyết định hay bất kì hành động nào)
Việc đưa thêm lược đồ robustness (robustness diagram) giúp cho việc vẽ các sequence diagram (lược đồ tuần tự) và các class diagram dễ dàng hơn Lược đồ robustness
là cầu nối giữa các bản đặc tả usecase và việc vẽ các lược đồ tuần tự, giúp cho người thiết
kế tách bạch rõ ràng các hành vi của hệ thống, hạn chế sự nhập nhằng và thiếu sót khi vẽ lược đồ tuần tự, bởi vì khi vẽ các robustness diagram chúng ta sẽ khám phá ra các chức năng, hành vi ẩn không nhìn thấy được lúc viết đặc tả usecase Nhờ đó mà lược đồ tuần tự khi vẽ sẽ sát với yêu cầu thực tế của khách hàng hơn
Đưa ra domain modeling: đây là mô hình tiền thân của class diagram Mô hình này
được đưa ra trước tiên nhằm đưa ra một từ điển thuật ngữ sử dụng trong dự án Mục đích là làm cho mọi người hiểu rõ hơn về không gian của dự án bằng các thuật ngữ rõ ràng Mô hình này giúp xác định phạm vi và các hình thức – nền tảng của việc xây dựng các trường hợp sử dụng Mô hình này cũng giúp cho việc trao đổi giữa các thành viên trong dự án được thuận tiện và dễ hiểu hơn dựa vào bảng các thuật ngữ được đưa ra
Bản đặc tả usecase được cập nhật dần theo từng cột mốc của qui trình phát triển, các qui trình khác (như RUP) thường yêu cầu bản đặc tả usecase chi tiết và bao quát được hết
các luồng đi khác của usecase tại một khâu trong qui trình
2.1.4 Giải thích lý do chọn qui trình ICONIX
Việc chọn qui trình ICONIX có các lý do sau:
- Chỉ cần sử dụng một tập con các lược đồ lõi của UML: dùng 4 trong 14 lược đồ của UML
- Qui trình này dễ dàng được theo dõi ngay từ bước đầu tiên của việc phát triển dự án
Trang 15- Các đặc tả uscase bao quát được hết toàn bộ các bối cảnh của usecase, và được cập nhật lại sau bước vẽ robustness diagram và sequence diagram.
- Hướng đến việc thiết kế dự án theo hướng đối tượng từ các usecase
- Là qui trình thực tế đã được kiểm chứng qua nhiều dự án lớn
2.1.5 Áp dụng qui trình ICONIX vào khóa luận:
Qui trình ICONIX là một qui trình rất hay trong việc phát triển phần mềm, để áp dụng được qui trình ICONIX một cách hiệu quả đòi hỏi nhiều kinh nghiệm làm việc thực tế
Trong quá trình làm khóa luận này nhóm đã tìm hiểu và vận dụng được những kiến thức sau:
- Khâu phân tích yêu cầu
- Khâu phân tích thiết kế sơ bộ
- Thiết kế chi tiết
2.2.1.1 Các thành phần chính của Spring:
Spring Framework bao gồm nhiều chức năng được tổ chức thành các module nhỏ Những module này lại được gom thành các nhóm sau: Spring Core Container, Spring Context/Application Context, Spring AOP, Spring DAO, Spring ORM, Spring Web, Spring
MVC Framework Các nhóm đó được tổ chức và sắp xếp như Hình 2.2 dưới đây.
Trang 16Hình 2.2. Các thành phần của Spring
Spring Core Container: Core container là chức năng cơ bản của Spring Thành
phần chính của nó là Bean Factory, một cài đặt của Factory pattern (Factory pattern là mẫu
thiết kế dùng một lớp trung gian được để tạo ra các đối tượng khi có yêu cầu từ một lớp, thay vì lớp cần đối tượng phải tự tạo mới đối tượng bằng toán tử new) Nhiệm vụ của
BeanFactory là tạo và phân phát các đối tượng, BeanFactory biết về nhiều đối tượng trong ứng dụng, nó có thể tạo ra mối kết hợp giữa các đối tượng khi chúng được khởi tạo BeanFactory áp dụng IoC pattern để tách bạch và giảm sự phụ thuộc giữa các thành phần của ứng dụng
Spring Context/Application Context: Spring context là một tập tin cấu hình để
cung cấp thông tin ngữ cảnh của Spring Spring context cung cấp các dịch vụ cấp cao như truy cập JNDI, tích hợp EJB, e-mail, internalization, validation, và scheduling functionality
Spring AOP (Aspect-Oriented):
Lập trình hướng khía cạnh (aspect oriented programing) là một sự bổ sung thêm
cho lập trình hướng đối tượng, giúp cho các lập trình viên tập trung vào phần xử
lý nghiệp vụ hơn thay vì phải lặp đi lặp lại các đoạn mã cùng thực hiện một chức
năng nào đó nhiều lần, ví dụ như: ghi nhật ký (logging), thực thi các giao tác (transaction).
Trang 17 Spring AOP module tích hợp chức năng lập trình hướng khía cạnh vào Spring
framework thông qua cấu hình của nó Spring AOP module cung cấp các dịch vụ quản lý giao tác cho các đối tượng trong bất kỳ ứng dụng nào sử dụng Spring
Với Spring AOP chúng ta có thể tích hợp declarative transaction management
vào trong ứng dụng mà không cần dựa vào EJB component Spring AOP module cũng đưa lập trình metadata vào trong Spring Sử dụng cái này, chúng ta có thể thêm ký pháp (annotation) vào mã trình (source code) để hướng dẫn Spring, nơi
và làm thế nào để liên hệ với các khía cạnh (aspects).
Spring DAO: Tầng JDBC và DAO đưa ra một cây phân cấp các ngoại lệ (exception)
để quản lý kết nối đến cơ sở dữ liệu, kiểm soát ngoại lệ và thông báo lỗi được ném ra bởi
các nhà cung cấp cơ sở dữ liệu Tầng ngoại lệ (exception) đơn giản là kiểm soát lỗi và giảm
khối lượng mã nguồn mà chúng ta cần viết như mở và đóng kết nối Module này cũng cung
cấp các dịch vụ quản lý giao dịch cho các đối tượng trong ứng dụng Spring.
Spring ORM: Spring có thể tích hợp với một vài ORM framework để cung cấp các
công cụ ánh xạ mối quan hệ giữa các bảng trong cơ sở dữ liệu thành các đối tượng có quan
hệ với nhau bao gồm: JDO, Hibernate, OJB và iBatis SQL Maps
Spring Web module: Nằm trên application context module, cung cấp các ngữ cảnh
cho các ứng dụng web, hỗ trợ tích hợp với các bộ khung làm việc nổi tiếng khác như Struts,
JSF và Webwork… Web module cũng làm giảm bớt các công việc điều khiển nhiều request
và gắn các tham số của request vào các đối tượng domain.
Spring MVC Framework: MVC Framework được cài đặt đầy đủ đặc tính của
MVC pattern để xây dựng các ứng dụng Web MVC framework được cấu hình thông qua
giao diện và chứa được một số kỹ thuật view bao gồm: JSP, Velocity, Tiles và generation of
PDF và Excel file
Trang 182.2.1.2 Cơ chế đảo ngược kiểm soát và thêm sự phụ thuộc
(Inversion of Control and Dependence Injection)
Cơ chế Inversion of Control (Hình 2.4.) dịch ra là cơ chế đảo ngược sự kiểm soát, nhằm giảm tải mức độ phụ thuộc giữa các đối tượng Với sự hỗ trợ của cơ chế đảo ngược sự kiểm soát này các lập trình viên không cần phải tạo đối tượng ngay trong mã nguồn mà mô
tả chúng sẽ được tạo ra thế nào, hơn thế nữa, không cần phải kết nối các thành phần
(components) và các dịch vụ (services) một cách trực tiếp mà chỉ cần mô tả thành phần nào
cần dịch vụ nào trong một tập tin cấu hình Dưới đây là hình mô tả về cơ chế IOC
Hình 2.4. Spring IOC
Ví dụ dưới đây trình bày rõ hơn vấn đề được nêu ra ở trên
Ví dụ này là một lớp là Speaker Lớp này có một phương thức là sayHello() được trình bày theo Hình 2.5
Trang 19import java.io.FileInputStream;
import java.io.InputStream;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
public class Speaker{
public void sayHello(){
System.out.println("Hello Spring");
} }
Hình 2.5. Lớp speaker
Cài đặt một hàm main ngay trong lớp để gọi lớp speaker (Hình 2.6.)
public static void main( String args[]) throws Exception{
InputStream is = new FileInputStream("beans.xml");
BeanFactory factory = new XmlBeanFactory(is);
Speaker speaker = (Speaker)factory.getBean("Speaker");
speaker.sayHello();
}
Hình 2.6. Hàm main
Trong hàm main bên trên truy cập đến một tập tin tên là beans.xml Tập tin này rất
quan trọng đối với các ứng dụng chạy trên Spring Nó chứa các thông tin cấu hình của các
bean được dùng trong ứng dụng Với ví dụ này thì ta có nội dung tập tin beans.xml (Hình
2.7.)
Bây giờ chạy hàm main bên trên thì dòng chữ Hello Spring sẽ được in ra.
Ví dụ đơn giản trên trình bày cách đơn giản để sử dụng spring Như đã thấy trong
hàm main, việc khởi tạo đối tượng Speaker từ lớp Speaker không làm theo cách truyền
thống nghĩa là: Speaker speaker = new Speaker() Nhưng thay vào đó, speaker được tạo thành với đoạn mã: Speaker speaker = (Speaker)factory.getBean(“Speaker”);
Trang 20Trong đó, factory là một đối tượng của lớp BeanFactory (Spring có hơn một ngàn
class và interface như vậy) có tác dụng như một nhà máy tạo ra các đối tượng khi người
dùng đưa các yêu cầu vào Ở trường hợp này, người dùng đã yêu cầu factory tạo ra 1 đối tượng từ mẫu có tên là Speaker.
Ví dụ trên chỉ ra rằng thay vì phải tạo đối tượng trong hàm main thì lại tạo bằng cách
của Spring, tuy nhiên vẫn chưa thấy rõ lắm sự khác biệt Để hiểu rõ hơn xét ví dụ mở rộng thêm như sau:
Bây giờ, giả sử các cái loa trước khi sayHello thì cần phải đi qua một bộ phiên dịch Translator Ta sẽ viết lớp Translator có một phương thức traslate in ra dòng chữ Hello Để lớp này có thể in ra được nhiều thứ tiếng ta sẽ viết dưới dạng 1 interface với đoạn mã như sau: public interface Translator { public void translate(); }
Sau đó viết lớp EnglishTranslator để hiện thực interface này (Hình 2.8.).
Kế tiếp thêm vào lớp Speaker thêm một thuộc tính gọi là translator (Hình 2.9.).
Tiếp đến viết hàm main để chạy thử Trong hàm main này không dùng Spring để tạo
đối tượng nữa mà dùng theo cách truyền thống (Hình 2.10.) để so sánh sự khác biệt
Chạy thử sẽ in ra câu chào bằng tiếng Anh Nếu không thích tiếng Anh có thể in ra
câu chào bằng tiếng Việt bằng cách viết tiếp một class VietnameseTranslator (Hình 2.11.).
Trang 21public class EnglishTranslator implements Translator{
public void translate(){
public class Speaker{
private Translator translator;
public Speaker(Translator translator) {
public static void main( String args[]) throws Exception{
Translator translator = new EnglishTranslator();
Speaker speaker = new Speaker (translator);
speaker.sayHello();
}
Hình 2.10. Hàm main
public class VietnameseTranslator implements Translator{
public void translate(){
System.out.println("Xin chao Spring"); } }
Trang 22Hình 2.11. Class VietnameseTranslator
Trang 23Để in ra đuợc tiếng Việt ta phải chỉnh lại hàm main một chút Thay vì viết:
Translator translator = new VietnameseTranslator();
Viết lại như sau:
Translator translator = new EnglishTranslator();
Như vậy rõ ràng sự bất tiện xuất hiện mỗi khi thay đổi qua lại giữa tiếng Anh và
tiếng Việt Sự phụ thuộc giữa đối tượng thuộc lớp Speaker và Translator được giải quyết trong chương trình nghĩa là khi nào muốn tiếng Việt thì chỉnh lại đoạn code một ít Sự điều
khiển (control) và phụ thuộc (dependency) giữa các đối tượng do chương trình đảm trách
Nó là cách thông thường ta vẫn làm gọi là sự điều khiển bình thường
Bây giờ hàm main được sửa lại như Hình 2.12 để sử dụng Spring
public static void main( String args[]) throws Exception{
InputStream is = new FileInputStream("beans.xml");
BeanFactory factory = new XmlBeanFactory(is);
Speaker speaker = (Speaker)factory.getBean("Speaker");
speaker.sayHello(); }
Hình 2.12. Hàm main
Theo hình Hình 2.12 hàm main bây giờ không dính dáng gì đến Vietnamese và
English nữa Tiếp theo Sửa lại tập tin beans.xml (Hình 2.13.).
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<a
href="http://www.springframework.org/dtd/spring-beans.dtd>"
target="_blank">http://www.springframework.org/dtd/spring-beans.dtd"></a>
<beans> <bean name = "Translator" class = "EnglishTranslator" singleton = "true"></bean>
<bean name = "Speaker" class = "Speaker" singleton = "true">
<constructor-arg><ref bean = "Translator"></constructor-arg>
</bean></beans>
Hình 2.13. Beans.xml
Trang 24Tập tin beans.xml bây giờ đảm nhận việc lắp ráp EnglishTranslator hoặc là VietnameseTranslator Sự điều khiển (control) đã được đảo ngược (inversion) sang cho BeanFactory đảm trách Hay nói cách khác Spring đã tiêm đối tượng EnglishTranslator (hoặc là VietnameseTransslator) vào trong đối tượng Speaker (Injection Dependency) Đó là nguyên lý chính yếu nhất, nổi tiếng nhất của Spring
2.2.2 JSF
2.2.2.1 Tổng quan về JSF
Khi phát triển ứng dụng web trên nền tảng công nghệ J2EE, việc lặp đi lặp lại các đoạn mã trình giống nhau cùng thực hiện một chức năng hay chỉ để hiển thị một thành phần nào đó của giao diện là công việc tốn nhiều thời gian và dễ gây nhàm chán JSF cung cấp một bộ khung làm việc trực quan giúp cho việc phát triển các ứng dụng web một cách dễ dàng và tránh lặp đi lặp lại các thao tác giống nhau
JSF được phát triển dựa trên mẫu thiết kế (design pattern) MVC (một trong những mẫu thiết kế nổi tiếng thường dùng cho các hệ thống lớn) JSF là bộ khung làm việc hướng đến việc xử lý tương tác giữa các thành phần giao diện và các sự kiện phát ra từ các thành phần giao diện đó JSF bao gồm các thành phần giao diện phía server và các API Các thành phần này dùng để trình bày các gói giao diện người dùng, quản lý trạng thái của các gói đó,
xử lý các sự kiện phát ra từ các gói giao diện khi người dùng thao tác lên các gói giao diện
đó, xác thực dữ liệu, chuyển đổi dữ liệu, phân luồng điều hướng giữa các trang, hỗ trợ đa ngôn ngữ và cung cấp các mở rộng cho các gói giao diện người dùng này
JSF tách bạch rõ ràng giữa phần giao diện người dùng và các hành vi tương ứng của các thành phần Lấy một ví dụ đơn giản: khi người dùng nhấp chuột vào một nút trên giao
diện trang web (UI component) thì sẽ phát ra một sự kiện để gửi đến backing bean (sẽ được
trình bày phần sau) đang chờ lắng nghe và xử lý sự kiện được phát ra từ nút đó.
Trang 252.2.2.2 Các thành phần quan trọng của JSF:
UI Component (còn gọi là một control hay đơn giản là component): một đối tượng
phía server, cung cấp các chức năng cụ thể để tương tác với một người dùng cuối UI
component là những JavaBean với các thuộc tính, phương thức, sự kiện Chúng được tổ
chức thành một cây bao gồm các component và thường hiển thị như một trang.
Renderer: Hiển thị một UI component và trao đổi một dữ liệu nhập của người dùng
vào giá trị của component Renderer có thể được thiết kế để làm việc với một hoặc nhiều
UI component, và một UI component có thể tập hợp với nhiều renderer khác nhau.
Validator: Trả lời cho việc chắc chắn rằng giá trị nhập vào bởi người dùng được
chấp nhận Một hoặc nhiều validator có thể được tập hợp với một UI component
Backing beans: Các Java Bean xác định tập hợp các giá trị từ các UI component và
bổ sung các phương thức event listener (bộ lắng nghe sự kiện) Chúng cũng có thể nắm giữ các tham chiếu đến các UI component
Converter: chuyển đổi một giá trị của component thành một chuỗi để hiển thị Một
UI component có thể được tập hợp với một converter duy nhất.
Event/listener: JSF sử dụng mô hình event/listener JavaBeans (cũng được sử dụng
cho Swing) UI component (và những đối tượng khác) tạo ra các event, và các listener có thể đăng ký để xử lý các sự kiện Các backing bean sẽ hiện thực các phương án để xử lý các sự kiện phát ra từ các UI component.
Messages: Hiển thị thông tin cho người dùng Chỉ bất kỳ thành phần ứng dụng
trong (backing beans, validators, converter …) mới có thể tạo ra thông tin hoặc thông điệp
lỗi nhằm hiển thị cho người dùng
Navigation: Định vị và điều phối từ trang này đến trang khác JSF có một hệ thống
định vị mạnh mẽ tích hợp với những event listeners.
2.2.2.3 Vòng đời của việc xử lý request:
Vòng đời của 1 request (Hình 2.14.) chia làm 6 bước được mô tả như sau:
Restore View: hiển thị thay thế tất cả các component tạo nên một trang
giao diện cụ thể
Trang 26Hình 2.14. Vòng đời của request
Apply Request Values: Mọi dữ liệu được gửi lên từ mỗi phần của request
được gắn vào các đối tượng giao diện tương ứng, trạng thái của các đối tượng giao diện ở phía server được cập nhật cùng với dữ liệu mới được gắn vào Dữ liệu được gửi lên có thể bắt nguồn từ các thẻ input của form hoặc là từ các cookies Ở bước này các sự kiện được phát ra từ các thành phần giao diện cũng được đưa vào hàng
đợi để xử lý ở bước Invoke Application
Process Validation: Trong bước này, JSF thiết lập cây bao gồm các
component và hỏi mỗi component có chắc chắn rằng giá trị được gửi lên có thể chấp
nhận không Bởi vì giá trị được gửi lên của mỗi component nhập vào được cập nhật
ở bước 2 (apply request values), component bây giờ có hầu hết dữ liệu hiện thời của người dùng gửi lên Trước khi tiến trình validation xảy ra, giá trị gửi lên được chuyển đổi bằng mỗi converter đã đăng ký cho component hoặc converter mặc định
Update Model Values: đến bước này các giá trị của các component đã
được cập nhật, chính xác và đúng kiểu Các giá trị này được lưu vào đối tượng
backing-beans tương ứng với từng component giao diện.
Invoke Application: Khi toàn bộ các giá trị của các component đã được
thiết lập vào các backing-beans, các sự kiện trong hàng đợi sẽ được xử lý tương ứng với các phương thức trong backing-beans.
Render Response: Tại thời điểm này, tất cả xử lý bởi framework và ứng
Trang 27chính của bước này Mục tiêu thứ hai là lưu lại trạng thái hiển thị để nó có thể được
phục hồi trong bước Restore View nếu người dùng yêu cầu lại Trạng thái hiển thị
được lưu lại trong bước này bởi vì thường thì hiển thị được lưu trên phía máy khách (phía người dùng), cho nên nó là một phần của phản hồi gửi đến người dùng Trong
trường hợp này, JSF đang lưu trạng thái trên server, vì thế trạng thái hiển thị hầu hết
được lưu trữ trong session của người dùng
2.2.3 Hibernate
2.2.3.1 Tổng quan về hibernate
Hiện nay các hệ quản trị CSDL dựa trên mô hình quan hệ, hệ quản trị CSDL hướng đối tượng cũng đã được một số hãng CSDL như Oracle phát triển nhưng cũng chưa phổ biến Trong khi đó xu hướng lập trình hiện tại lại chủ yếu theo phương pháp hướng đối tượng Theo cách truyền thống, các lập trình viên thao tác trực tiếp đến dữ liệu bằng những câu truy vấn Việc này lặp đi lặp lại khiến họ cảm thấy nhàm chán và việc truy cập không được linh hoạt Hơn nữa, không mấy ai giỏi cả về lập trình lẫn quản trị cơ sở dữ liệu Vì thế Hibernate framework ra đời nhằm giúp gắn kết việc lập trình hướng đối tượng và cơ sở dữ liệu quan hệ Đối với người lập trình thì mọi câu truy vấn đều có thể thực hiện trên đối tượng và họ gần như không cần biết tới cách thức thao tác với cơ sở dữ liệu như thế nào Còn với người quản trị CSDL thì họ cũng chỉ cần quan tâm đến việc tối ưu hóa cơ sở dữ liệu của mình
Hibernate là một bộ khung (framework) mã nguồn mở ánh xạ giữa đối tượng và các mối quan hệ của các đối tượng dựa trên mối quan hệ các bảng của hệ cơ sở dữ liệu quan hệ
Hibernate giúp cho các lập trình viên hạn chế việc phụ thuộc quá nhiều vào các JDBC API
Hibernate hỗ trợ tất cả các hệ cơ sở dữ liệu lớn Đặc biệt HQL (Hibernate Query Language) được thiết kế như là một mở rộng cho SQL, cung cấp một cầu nối giữa đối tượng và các mối quan hệ giữa các đối tượng lại với nhau Hibernate cung cấp các cơ chế truy vấn, cập nhật dữ liệu, quản lý giao tác, khai báo các câu lệnh truy vấn và định nghĩa các mối quan hệ giữa các thực thể
Trang 282.2.3.2 Vòng đời của đối tượng trong Hibernate:
Hình 2.15. Vòng đời của đối tượng trong Hibernate
Dựa vào hình trên ta có thể thấy được trạng thái của các đối tượng có thể được
chuyển đổi từ trạng thái transient sang trạng thái persistent và từ trạng thái persistent sang
trạng thái detached Dưới đây là các chú giải về các trạng thái của đối tượng trong hibernate
và các phương thức tương ứng
Trong Hibernate một đối tượng có thể có 3 trạng thái:
- Transient: khi một đối tượng được khởi tạo thì nó không được lưu trữ ngay lập
tức vào cơ sở dữ liệu mà nó được lưu tạm trên bộ nhớ Đối tượng này không có quan hệ với session hiện tại của Hibernate, ta có thể hiểu nôm na là đối tượng này chưa liên quan đến dòng nào trong cơ sở dữ liệu và có thể bị thu gom bởi
garbage collector khi không còn được tham chiếu bởi bất kì đối tượng nào.
- Persistent: đối tượng có quan hệ với session hiện tại của Hibernate và trạng thái
của nó được đồng bộ với một dòng dữ liệu hợp lệ trong cơ sở dữ liệu Đối tượng
ở trạng thái này được khởi tạo khi thực thi hàm save() Khi một đối tượng
Trang 29dữ liệu khi giao tác này được hoàn tất Đôi khi đối tượng persistent được đồng bộ
hóa với cơ sở dữ liệu trước khi giao tác được hoàn tất để chắc chắn rằng giao tác này biết được những thay đổi của giao tác thực thi trước đó
Khi giao tác này kết thúc, các đối tượng persistent sẽ chưa cập nhật vào cơ sở dữ
liệu, hibernate sẽ kiểm tra những đối tượng nào bị thay đổi và chỉ cập nhật chúng vào cơ sở
dữ liệu Tiến trình này được gọi là dirty checking Dirty objects là các đối tượng đã được
thay đổi nhưng chưa được đồng bộ hóa vào cơ sở dữ liệu Tiến trình này làm tăng hiệu suất của một số hệ cơ sở dữ liệu nhưng cũng làm giảm hiệu suất đối với một số hệ cơ sở dữ liệu khác Do đó Hibernate cho phép Người dùng có thể thiết lập cơ chế này bằng cách thêm
thuộc tính dynamic-update = “true” trong lớp ánh xạ (mapping class), với cách này
hibernate sẽ tự động sinh ra các đoạn mã SQL để chỉ cập nhật trường nào bị thay đổi
- Detached: Đối tượng đã từng có trạng thái persistent nhưng hiện tại đã không còn
giữ quan hệ hoặc liên quan với session Ở đây chúng ta nói một đối tượng có quan hệ với Session nghĩa là session có tham chiếu đến đối tượng đó, hay một cách khác là chịu sự quản lý của session Các đối tượng có trạng thái detached sẽ được giải phóng bởi garbage collector của JVM
2.2.3.3 Giải thích về các phương thức được dùng trong vòng đời của các đối tượng trong hibernate:
save(): Dùng để lưu một đối tượng với trạng thái transient thành đối tượng
persistent, trả về mã đối tượng (id), persist() giống save() nhưng không trả về gì cả.
saveOrUpdate(): Nếu là đối tượng mới thì lưu xuống cơ sở dữ liệu, nếu không thì
cập nhật xuống cơ sở dữ liệu, cái này sẽ chọn ra để kiểm tra trước khi save hoặc update.
merge(): Kiểm tra xem có đối tượng nào với mã số (id) như thế tồn tại trong session
không, nếu có thì cập nhật vào đối tượng đã tồn tại đó, nếu không thì tạo mới một đối tượng
và lưu xuống
load(): Dùng để tải một đối tượng từ database lên, nó sẽ có trạng thái persistent, ném
ra ngoại lệ (throw exception) nếu mã đối tượng (id) không tồn tại
get(): Giống load(), trả về null nếu không tồn tại.
refresh(): Làm tươi mới (refresh) một đối tượng đang ở trạng thái persistent.
Trang 30delete(): Load đối tượng lên và xoá nó đi, nếu không muốn load lên thì dùng
session.createQuery(“delete from table_name where”).executeUpdate().
evict(): tách một đối tượng ra khỏi session, biến nó từ trạng thái persistent thành
transient.
isDirty(): Các dirty objects là những đối tượng bị thay đổi nhưng chưa được đồng bộ
hóa với cơ sở dữ liệu Hibernate cho phép người dùng có thể thiết lập cơ chế này bằng cách
thêm thuộc tính dynamic-update = “true” trong lớp ánh xạ (mapping class), với cách này hibernate sẽ tự động sinh ra các đoạn mã SQL để chỉ cập nhật trường nào bị thay đổi Hàm
isDirty() kiểm tra xem session có đồng bộ hóa với cơ sở dữ liệu hay không.
Trang 31CHƯƠNG 3: PHÂN TÍCH THIẾT KẾ HỆ THỐNG VÀ HIỆN THỰC HỆ
THỐNG
3.1 PHÂN TÍCH THIẾT KẾ HỆ THỐNG
3.1.1 Mô tả về cách phân tích – Khái niệm cơ bản
Hướng phân tích thiết kế sử dụng kỹ thuật ICONIX để đặc tả hệ thống Các đặc tả này phân tích dựa trên nhu cầu người người dùng như: Người dùng cần gì? Chức năng xử lý thế nào? Có những trường hợp ngoại lệ không? Và cuối cùng là mô tả luồng xử lý của hệ thống Vì vậy, việc mô tả các trường hợp sử dụng (usecase) của hệ thống được chia làm các phần như sau:
- Chức năng: Mô tả về chức năng xử lý
- Luồng căn bản: Các luồng xử lý thông tin cơ bản cần có của chức năng này
Vì hệ thống được xây dựng là một cổng thông tin việc làm, do đó các đối tượng chính sử dụng là người tìm việc, nhà tuyển dụng, trung tâm đào tạo Hướng đến các đối tượng sử dụng, hệ thống được chia thành từng nhóm người dùng như sau:
- Ứng viên: Là những người tìm việc với nhu cầu sử dụng chính là tìm được công việc tốt nhất Sau đây là một số chức năng chính mà các ứng viên thường dùng theo qui trình sau:
o Cập nhật hồ sơ (phần 22 mục 3.1.2.2): Sau khi đã đăng kí tài khoản là
thành viên của trang web, ứng viên sẽ được yêu cầu cập nhật hồ sơ Nội
Trang 32dung của chức năng này giúp ứng viên hoàn thiện những nhóm thông tin
của mình để tiện cho việc tạo hồ sơ sau này.
o Tạo hồ sơ (phần 21 mục 3.1.2.2): Từ thông tin hồ sơ đã cập nhật, ứng viên
có thể trích những nhóm thông tin của mình để tạo một hồ sơ mới Hồ sơ
sẽ bao gồm những nhóm thông tin mà ứng viên đã chọn, nội dung những nhóm thông tin này sẽ được trích từ hồ sơ cập nhật Từ hồ sơ đã được tạo, ứng viên có thể gửi hồ sơ trực tuyến trên trang web đến các nhà tuyển dụng hoặc trích ra tập tin lưu giữ lại
o Tìm việc: Khi đã là thành viên của trang web, ứng viên có thể tìm kiếm
công việc phù hợp của mình Website đáp ứng tìm kiếm nội dung theo nhiều nhóm thông tin càng tốt nhưng bố cục và cách thức tìm sao cho dễ nhìn để tránh làm rối ứng viên Ở đây, hướng phân tích của khóa luận sẽ
chia thành 2 phần khi tìm kiếm đó là tìm việc cơ bản (phần 11 mục 3.1.2.2) và tìm kiếm nâng cao (phần 12 mục 3.1.2.2)
o Gửi hồ sơ (phần 24 mục 3.1.2.2): Sau khi tìm kiếm được thông tin phù
hợp, ứng viên có thể tùy chọn chức năng giới thiệu bạn bè (phần 14 mục
3.1.2.2) đến các thành viên trong (bằng tài khoản đăng nhập của trang
web) và ngoài trang web (bằng openid) bằng cách gửi đường dẫn của
thông tin mà chức năng trang web đã tích hợp Ngoài ra, ứng viên có thể
nộp trực tiếp đến nhà tuyển dụng bằng cách trích hồ sơ hồ sơ trên web
dưới dạng tập tin (pdf, excel, …) để có thể nộp trực tiếp đến nhà tuyển dụng
o Đăng kí khóa học: Khi tìm kiếm các thông tin các khóa học, ứng viên có
thể đăng kí các khóa học khi nhà đào tạo đăng tin trên trang web Để xem thông tin việc đăng kí khóa học thành công bạn có thể vào xem các thông tin khóa học đã đăng kí được xét duyệt hay chưa Việc xác nhận đã đăng
kí khóa học thành công sẽ được trung tâm đào tạo xét duyệt cập nhật trực tiếp trên trang web
- Nhà Tuyển Dụng (NTD): Là những công ty với nhu cầu là tìm được những nhân viên phù hợp với yêu cầu của công ty mình
o Đăng tin tuyển dụng (phần Hình 3.12 mục 3.1.2.2): Yêu cầu đầu tiên của
Trang 33thì càng giúp cho cho NTD tìm được nhân viên vừa ý Ngoài ra NTD có thể yêu cầu bằng cấp cho vị trí tuyển dụng thông qua các chứng chỉ được chỉ định theo các chứng chỉ do trung tâm đào tạo cấp.
o Tìm ứng viên: NTD có thể tìm ứng viên theo theo nhiều nội dung tùy
chọn Khi đã tìm thấy thông tin vừa ý, NTD có thể gửi thư đến ứng viên trực tiếp trên trang web kèm với nội dung yêu cầu
o Nhận hồ sơ: Khi ứng viên gửi thư để ứng tuyển vị trí tuyển dụng mà NTD
đã đăng NTD có thể tùy chọn các hồ sơ ứng tuyển đã được gửi đến mà có những hình thức gửi hồi đáp cho các ứng viên
o Đăng kí khóa học cho công ty: NTD có thể đăng kí khóa học cho các nhân
viên trong công ty mình để bổ sung kỹ năng Hoặc nếu các NTD có nhu cầu mở lớp học để bổ sung kỹ năng cho nhân viên công ty mình, NTD có thể gửi yêu cầu này đến các trung tâm đào tạo để được đáp ứng mở các khóa học mới
- Trung Tâm Đào Tạo (TTĐT): Chiêu sinh các khóa học của mình Giới thiệu về nội dung khóa học, những bằng cấp được cấp Từ đó người dùng khác sẽ thấy được lợi ích của khóa học để bổ sung thêm những kỹ năng cần thiết
o Đăng khóa học (phần 30 mục 3.1.2.2): TTĐT sẽ đăng khóa học với các
nội dung chính như: nội dung mô tả, số lượng học viên, thời hạn và địa điểm học Người dùng sẽ dựa trên thông tin này để đăng kí khóa học Việc xác nhận đã được đăng kí là học viên sẽ được TTĐT toàn quyền xét duyệt
o Quản lý khóa học (phần 31 mục 3.1.2.2) quản lý số học viên là thành viên
của trang web, cập nhật điểm số trực tiếp cho các học viên này và gửi thông báo nếu có thông báo mới
- Khách: Nhóm người dùng chưa là thành viên của trang web hoặc chưa đăng nhập vào trang web Đối với nhóm người dùng này thông thường chỉ tìm những thông tin trên trang và không thể tạo và nộp hồ sơ trực tiếp qua web Hướng đến nhóm người dùng này, ta sẽ có những hình thức về mặt bố cục nội dung hiển thị cho họ thấy được lợi ích khi là thành viên, kích thích họ đăng kí là thành viên của trang web:
o Có đề mục nói về lợi ích của việc tạo hồ sơ.
o Bố cục web thân thiện và dễ nhìn.
Trang 34o Mục Tạo tài khoản, Tạo hồ sơ phải nổi bật nhưng lại không làm cho người
dùng khó chịu khi tìm kiếm thông tin
o Mỗi thông tin tuyển dụng đều có nút chức năng gửi hồ sơ ngay bên dưới
Để kích thích được người dùng gửi hồ sơ thì cấu trúc hiển thị nội dung phải có bố cục dễ nhìn, nội dung rõ ràng Và cuối cùng khi người dùng
nhấn vào nút gửi hồ sơ này thì trang web sẽ chuyển đến trang yêu cầu tạo
tài khoản
Điểm trọng yếu: Như đã nói ở trên, vấn đề quan trọng về việc phân tích trong khóa
luận là tạo cầu nối cho người dùng ở các nhóm khác nhau như:
- NTD đăng tin giúp ứng viên có thêm cơ hội tìm được công việc tốt Bên cạnh đó,
có thể liên hệ đến TTĐT yêu cầu mở khóa học để bổ sung kỹ năng của nhân viên trong công ty
- Người tìm việc sử dụng hệ thống vừa tìm kiếm việc làm vừa tìm kiếm thông tin các khóa học để đăng kí, giúp rèn luyện thêm những kỹ năng của mình Tiếp theo
đó, ứng viên thường xuyên được nhận những thông báo chuyên ngành quan tâm
từ TTĐT để đăng kí học viên, rèn luyện thêm kỹ năng còn thiếu Ngoài ra ứng viên còn có thể gửi yêu cầu mở khóa học đến TTĐT
- Đối với TTĐT, trang web là nơi để đăng tin đạo tạo, là nơi để nhận những yêu cầu mở lớp của các thành viên khác Vừa là nơi để quản lý thông báo tin tức đến các học viên trên trang web
Tóm lại, nội dung chức năng được phân tích theo chiều sâu của sự liên hệ các nhóm người dùng để đưa lên các chức năng Với sự liên hệ này, tăng sự gắn kết, vừa đáp ứng đủ các chức năng và loại bỏ những chức năng không cần thiết khác
3.1.2.2 Đặc Tả Các Usecase
Khái niệm cơ bản: Use case là một kỹ thuật được dùng trong kỹ thuật phần mềm và
hệ thống để nắm bắt yêu cầu chức năng của hệ thống Use case mô tả sự tương tác đặc trưng giữa tác nhân (actor) và hệ thống Nó mô tả các yêu cầu đối với hệ thống, có nghĩa là những
gì hệ thống phải làm Tập hợp tất cả use case của hệ thống sẽ mô tả tất cả các trường hợp
mà hệ thống có thể được sử dụng
Trang 35Các use case được trình phân tích ở khóa luận này được phân chia thành những gói
khác nhau Cấu trúc các gói được phân chia dựa trên sự tương tác của các actor đối với hệ thống như sau:
* Các usecase trong gói general:
1. Đăng Nhập
- Chức năng: Cho người dùng đăng nhập vào hệ thống
- Luồng cơ bản: Người dùng nhập thông tin vào các ô nhập liệu tên đăng nhập và mật khẩu của mục đăng nhập trên trang web, sau đó nhấn nút đăng nhập Hệ thống kiểm tra xem username và mật khẩu trong hệ thống, nếu đúng người dùng đăng nhập thành công, sau đó hệ thống sẽ chuyển sang trang web phù hợp với vai trò của người dùng
- Các luồng khác:
o Người dùng gõ sai username: Hệ thống sẽ yêu cầu người dùng nhập lại
username, nếu nhập quá 3 lần hệ thống sẽ hiển thị CAPTCHA để ngăn chặn người dùng tấn công hệ thống bằng DDOS
o Người dùng gõ sai mật khẩu:Hệ thống sẽ yêu cầu người dùng nhập lại mật
khẩu, nếu nhập quá 3 lần hệ thống sẽ hiển thị CAPTCHA để ngăn chặn người dùng tấn công hệ thống bằng DDOS
- Sơ đồ luồng đi Hình 3.1
Trang 36Hình 3.1. Luồng xử lý đăng nhập
2. Đăng xuất:
- Chức năng: Thoát khỏi tài khoản đang dùng
- Luồng cơ bản: Người dùng nhấp chuột vào nút đăng xuất, hệ thống sẽ tự động chuyển đến trang chủ và cập nhật trạng thái truy cập của người dùng là đã thoát
ra ngoài
- Sơ đồ luồng đi Hình 3.2
Hình 3.2. Luồng xử lý đăng xuất
Trang 373. Xử lý quên mật khẩu
- Chức năng: Giúp người dùng nhớ lại mật khẩu đã quên
- Luồng cơ bản: Hệ thống yêu cầu nhập tên đăng nhập, sau đó nhập chuỗi CAPTCHA để tiếp tục tác vụ, cuối cùng bạn phải lựa chọn một trong các cách thức sau để khôi phục mật khẩu:
o Gửi mail phục hồi đến hộp thư của bạn
o Trả lời câu hỏi bảo mật
- Các luồng khác:Trường hợp trả lời sai câu hỏi bảo mật quá 3 lần bạn phải nhập lại chuỗi CAPTCHA ở bước 2 thì mới có thể tiếp tục tác vụ
- Sơ đồ luồng đi Hình 3.3
Hình 3.3. Luồng xử lý quên mật khẩu
4. Cập nhật thông tin tài khoản
- Chức năng: chỉnh sửa lại thông tin tài khoản người dùng
- Luồng cơ bản:
o Người dùng nhấp chuột vào nút sửa thông tin tài khoản, sau đó hệ thống sẽ
đưa ra các thông tin liên quan đến tài khoản của người dùng như mật khẩu,
họ tên, ngày sinh, email liên hệ, hình đại diện để cho người dùng thay đổi
o Sau khi đã cập nhật các thông tin cần thay đổi người dùng nhấn nút lưu
thông tin, hệ thống hỏi người dùng có muốn lưu thay đổi không, người dùng nhấn nút đồng ý hệ thống sẽ cập nhật những thay đổi vào cơ sở dữ liệu
- Các luồng khác:
Trang 38o Người dùng nhập thông tin không hợp lê: hệ thống sẽ đưa ra các thông báo
đến người dùng và yêu cầu nhập lại thông tin đã nhập sai
o Người dùng không đồng ý lưu thay đổi thông tin đã điền: hệ thống sẽ
không cập nhật thông tin đã điền vào cơ sở dữ liệu
- Sơ đồ luồng đi Hình 3.4
Hình 3.4. Luồng xử lý cập nhật thông tin tài khoản
* Các usecase trong gói khách (guess):
Thể hiện sự tương tác giữa actor (tác nhân) khách với các chức năng của hệ thống mà actor khách được sử dụng đến (Hình 3.5.)
Trang 39Hình 3.5. Các chức năng trong gói khách
5. Đăng kí tài khoản
- Chức năng: người dùng tạo tài khoản sử dụng
- Luồng cơ bản:Người dùng nhấp vào liên kết đến trang đăng kí tài khoản, chọn loại tài khoản mà họ muốn đăng kí (người tìm việc, trung tâm đào tạo, nhà tuyển dụng), Với mỗi loại tài khoản mà họ muốn đăng kí sẽ hiện ra các field bắt buộc phải điền thông tin vào như:
o Tên đăng nhập: có kèm chức năng kiểm tra tồn tại hay chưa bên cạnh.
o Mật khẩu : có kèm chức năng kiểm tra độ dài hợp lệ.
o Email: bắt buộc phải có để gửi email xác nhận.
o Captcha: để chống ddos.
- Sau khi đã điền đầy đủ các thông tin trên người dùng nhấn vào nút đăng kí, hệ thống sẽ kiểm tra tính đúng đắn của dữ liệu nhập vào bằng javascript, sau đó hệ thống sẽ kiểm tra sự tồn tại của username trong hệ thống Nếu chưa có, hệ thống
sẽ thêm username vào hệ thống và thông báo đăng kí tài khoản thành công, sau
đó chuyển đến trang quản lý thông tin người dùng dựa vào loại tài khoản mà người đó chọn
- Các luồng khác:
Trang 40o Mật khẩu đã tồn tại trong hệ thống: hệ thống sẽ hiển thị thông báo cho
người dùng, yêu cầu người dùng chọn tên khác
o Mật khẩu người dùng nhập vào không trùng nhau: hệ thống sẽ hiển thị
thông báo yêu cầu người dùng nhập lại 2 mật khẩu
o Thông tin nhập vào không hợp lệ: điều kiện khi nhập thông tin là mật khẩu
phải có độ dài hơn 4 kí tự, email phải đúng định dạng, nếu không đúng các điều kiện đó thì người dùng phải nhập lại thông tin
o Người dùng nhập sai captcha quá n lần (số lần này sẽ được cấu hình
động): hệ thống sẽ không cho phép người dùng thực hiện chức năng đăng
kí trong vòng 5 phút (captcha sẽ được thiết kế dễ đọc hoặc là một phép toán để không làm phiền người sử dụng)
o Phương án sử dụng Open ID: với phương thức này chỉ yêu cầu người dùng
nhập mật khẩu để kiểm tra, nếu hợp lệ hệ thống sẽ lưu lại trong thông tin tài khoản
- Sơ đồ luồng đi Hình 3.6
Hình 3.6. Luồng xử lý đăng kí tài khoản