Bối cảnh và vấn đề nghiên cứu

Khóa luận tốt nghiệp đại học ngành Công nghệ thông tin của tác giả Lê Quốc Thọ (sinh viên khóa 2013 – 2017, Khoa Công nghệ thông tin, Trường Đại học Quảng Nam, dưới sự hướng dẫn của ThS. Hồ Tuấn Anh) tập trung giải quyết bài toán kiến trúc phần mềm trong bối cảnh phát triển ứng dụng quy mô doanh nghiệp.

Tác giả mở đầu bằng việc dẫn chứng một thực trạng trong ngành công nghệ phần mềm: tỷ lệ các dự án phần mềm thất bại hoặc không đáp ứng được các yêu cầu ban đầu là rất cao, vượt mức 83,8%. Đi kèm với đó, chi phí bảo trì và mở rộng hệ thống luôn lớn hơn nhiều lần so với các giai đoạn khác trong quy trình phát triển. Nguyên nhân cốt lõi dẫn đến tình trạng này được xác định là do các thành phần trong hệ thống phụ thuộc quá chặt chẽ lẫn nhau, cấu trúc chồng chéo và thiếu khả năng tái sử dụng. Để khắc phục, quy trình phát triển phần mềm hiện đại đòi hỏi việc xây dựng các thành phần riêng rẽ, độc lập, có sự phân định rõ ràng về trách nhiệm (Separation of Concerns) và đạt tính module hóa cao. Tuy nhiên, việc duy trì tính độc lập gặp nhiều trở ngại do cách thức các thành phần liên kết với nhau trong mã nguồn truyền thống.

Trước thực tiễn đó, đề tài được thực hiện nhằm đạt được các mục tiêu cụ thể sau:

  1. Tìm hiểu và hệ thống hóa lý thuyết về Spring Framework, làm rõ các đặc tính hỗ trợ module hóa và khả năng tái sử dụng thành phần trong ứng dụng.
  2. Tìm hiểu các framework và kỹ thuật bổ trợ thường được tích hợp cùng Spring trong các ứng dụng web doanh nghiệp, bao gồm: MySQL Workbench, jQuery và Bootstrap.
  3. Vận dụng toàn bộ các kết quả lý thuyết đã nghiên cứu để xây dựng một ứng dụng thực nghiệm: "Hệ thống Quản lý dịch vụ sân golf trực tuyến trên nền web".

Đối tượng nghiên cứu của khóa luận là Spring Framework (chuyên sâu vào 3 module: Spring Core, Spring MVC, Spring Security) cùng các công nghệ web liên quan gồm MySQL Workbench, jQuery và Bootstrap. Phạm vi nghiên cứu về mặt không gian học thuật là chương trình đào tạo chuyên ngành Công nghệ thông tin tại Trường Đại học Quảng Nam vào tháng 04 năm 2017, nơi Spring Framework vào thời điểm đó vẫn còn tương đối mới mẻ đối với sinh viên. Phạm vi sản phẩm ứng dụng dừng lại ở mức hệ thống web quản lý và đặt sân golf trực tuyến minh họa cho các nguyên lý kiến trúc đã nghiên cứu.

Cơ sở lý thuyết và phương pháp

Khóa luận kết hợp giữa nghiên cứu tổng quan tài liệu kỹ thuật chuyên ngành và phương pháp phân tích, thiết kế hệ thống hướng đối tượng để xây dựng phần mềm thực nghiệm.

Khung lý thuyết của đề tài dựa trên các nền tảng sau:

  • Mẫu thiết kế Inversion of Control (IoC) và Dependency Injection (DI): Dựa trên các nguyên lý kiến trúc phần mềm của Robert C. Martin và Martin Fowler, Spring Framework chuyển giao quyền kiểm soát luồng thực thi (control flow) từ mã nguồn ứng dụng sang cho khung làm việc (framework) thông qua IoC Container, đồng thời tiêm các phụ thuộc (dependencies) thông qua cơ chế Java Reflection.
  • Kiến trúc phân tầng và Spring MVC: Khung làm việc xây dựng trên mẫu thiết kế Model-View-Controller với thành phần điều phối trung tâm là DispatcherServlet, phân tách rõ rệt giữa logic xử lý nghiệp vụ, đối tượng dữ liệu và tầng biểu diễn giao diện.
  • Khung bảo mật Spring Security: Kế thừa từ dự án The Acegi Security System for Spring, tập trung vào hai cơ chế kiểm soát truy cập then chốt: Xác thực (Authentication) và Ủy quyền (Authorization).
  • Hệ quản trị cơ sở dữ liệu quan hệ MySQL: Hệ thống quản trị cơ sở dữ liệu nguồn mở trong ngăn xếp LAMP/WAMP, quản lý dữ liệu thông qua các bảng quan hệ và cơ chế phân quyền truy cập người dùng theo tài khoản.
  • Thư viện jQuery và Framework giao diện Bootstrap: jQuery hỗ trợ thao tác cây DOM, xử lý sự kiện và truyền thông bất đồng bộ AJAX; Bootstrap cung cấp hệ thống lưới (grid system) và các lớp định kiểu CSS phục vụ thiết kế giao diện thích ứng đa màn hình (Responsive Web Design / Mobile-first).

Phương pháp nghiên cứu thực tế gồm hai phần:

  • Phương pháp nghiên cứu lý thuyết: Tìm kiếm, thu thập, phân tích và tổng hợp các nguồn tài liệu kỹ thuật chính thống, sách chuyên khảo (tiêu biểu như tài liệu của Rod Johnson - tác giả khởi xướng Spring), các bài báo khoa học và tài liệu trực tuyến của các tác giả trong và ngoài nước.
  • Phương pháp thiết kế và phát triển phần mềm: Sử dụng ngôn ngữ mô hình hóa thống nhất (UML) để xây dựng lược đồ ca sử dụng (Use Case Diagram), lược đồ hoạt động (Activity Diagram), lược đồ lớp (Class Diagram) và lược đồ tuần tự (Sequence Diagram); sử dụng MySQL Workbench để thiết kế lược đồ cơ sở dữ liệu quan hệ; lập trình tích hợp hệ thống bằng ngôn ngữ Java trên nền tảng Spring.

Nguồn dữ liệu của nghiên cứu bao gồm các tài liệu đặc tả chuẩn kỹ thuật của Spring Framework, các thông số cấu hình XML và mã nguồn minh họa, cùng bộ dữ liệu mẫu về sân golf, đơn đặt sân và tài khoản người dùng phục vụ vận hành thử nghiệm hệ thống.

Thiết kế và triển khai

Hệ thống "Quản lý dịch vụ sân golf trực tuyến trên nền web" được thiết kế theo mô hình phân lớp enterprise, tích hợp các công nghệ đã nghiên cứu nhằm hiện thực hóa các ca sử dụng nghiệp vụ.

Hệ thống phân định rõ hai tác nhân (actors) chính tham gia tương tác:

Tác nhân (Actor) Quyền hạn và vai trò trong hệ thống
Admin Quản trị viên hệ thống: Xem và quản lý đơn đặt sân, quản lý thông tin sân, quản lý danh sách khách hàng, quản lý tài khoản người dùng, thống kê doanh thu theo tháng và thống kê khách hàng thường xuyên.
Visitor Người truy cập vãng lai / Khách hàng: Tìm kiếm sân golf theo tiêu chí, xem thông tin chi tiết các sân golf, thực hiện thao tác đặt sân trực tuyến và hủy đơn đặt sân.

Về mặt công nghệ, hệ thống ứng dụng:

  • Tầng điều khiển và nghiệp vụ: Sử dụng Spring Core (quản lý vòng đời đối tượng qua IoC/DI container) và Spring MVC. Bộ điều phối DispatcherServlet tiếp nhận các HTTP Request từ trình duyệt, định tuyến qua HandlerMapping để gọi các Controller xử lý nghiệp vụ, sau đó ánh xạ kết quả tới InternalResourceViewResolver để hiển thị giao diện JSP tương ứng.
  • Tầng bảo mật: Tích hợp Spring Security nhằm xác thực danh tính người dùng khi đăng nhập vào phân hệ quản trị và phân quyền ủy quyền thao tác đối với từng tài nguyên URL.
  • Tầng cơ sở dữ liệu: Thiết kế bằng MySQL Workbench, vận hành trên hệ quản trị cơ sở dữ liệu MySQL, lưu trữ các thực thể thông tin về sân golf, khu vực, khách hàng, đơn đặt sân và tài khoản.
  • Tầng giao diện người dùng: Sử dụng Bootstrap nhằm đảm bảo tính tương thích hiển thị trên nhiều kích thước màn hình thiết bị khác nhau, kết hợp cùng jQuery để xử lý tương tác giao diện và điều hướng phân trang (phân trang dạng Previous-Next hoặc First-Last).

Nội dung chính theo từng chương

Bố cục của khóa luận gồm 2 phần chính: Phần mở đầu và Phần nội dung nghiên cứu (được chia thành 2 chương).

Chương 1: Cơ sở lý thuyết

Chương 1 hệ thống hóa toàn bộ các nền tảng công nghệ được áp dụng trong đề tài, tập trung phân tích sâu cơ chế hoạt động của Spring Framework cùng các công nghệ liên quan:

  • Lịch sử và tổng quan về Spring Framework: Ra đời từ dự án ban đầu của Rod Johnson năm 2000 và cuốn sách Expert One-on-One JavaEE Design and Development (10/2002). Kiến trúc chính thức ra mắt tháng 06/2003 theo giấy phép Apache 2.0; phiên bản 1.0 phát hành tháng 03/2004. Tác giả trình bày các cột mốc phát triển, sự ra đời của Diễn đàn Spring (cuối 2004) và các hội thảo quốc tế tại Miami (12/2005, 300 người) và Antwerp (06/2006, hơn 400 người).
  • Nguyên lý IoC và Dependency Injection: Phân tích bản chất việc chuyển giao quyền điều khiển luồng thực thi từ mã người dùng sang khung làm việc, đối chiếu qua ví dụ Servlet Container điều phối doGet()/doPost() và kiểm thử tự động với JUnit/TestNG. Trình bày chi tiết cơ chế tiêm phụ thuộc thông qua Java Reflection, đối chiếu giữa hai phương pháp: tiêm qua hàm tạo (Constructor-based DI - dùng cho các phụ thuộc bắt buộc) và tiêm qua phương thức setter (Setter-based DI - dùng cho các phụ thuộc tùy chọn).
  • Spring IoC Container và Bean: Khái niệm bean (đối tượng do container khởi tạo, cấu hình và quản lý); các gói nền tảng beans và context; giao diện BeanFactory và ApplicationContext. Phân tích 3 phương pháp khởi tạo bean (hàm dựng, phương thức tĩnh factory, phương thức đối tượng factory); 2 phạm vi (scope) phổ biến nhất là Singleton (mặc định, chỉ một thể hiện duy nhất trong container) và Prototype (tạo thể hiện mới mỗi khi được gọi); cùng 4 chế độ tự động liên kết (Autowiring): byName, byType, constructor và no.
  • Hệ thống module của Spring: Khái quát chức năng của Spring Core, Spring Context, Spring AOP, Spring DAO, Spring ORM, Spring Web và Spring MVC.
  • Spring MVC: Cơ chế vận hành của DispatcherServlet, cơ chế định tuyến qua HandlerMapping, các annotation cấu hình controller (@Controller, @RequestMapping), và quá trình phân giải khung nhìn thông qua InternalResourceViewResolver.
  • Spring Security: Lịch sử từ Acegi Security (2003) đến khi sáp nhập chính thức vào Spring cuối năm 2007. Phân tích hai nhiệm vụ trọng tâm là Xác thực (Authentication) và Ủy quyền (Authorization). Trình bày 7 module cấu thành: spring-security-core, spring-security-web, spring-security-config, spring-security-ldap, spring-security-acl,... cùng giải pháp channel security (HTTPS) và JCaptcha.
  • Công nghệ phụ trợ: Đặc trưng của jQuery (tạo bởi John Resig năm 2006, kích thước gọn nhẹ khoảng 19KB gzipped, hỗ trợ bộ chọn Sizzle, tương tác DOM, AJAX); hệ quản trị MySQL (mã nguồn mở, đa nền tảng, cơ chế chứng thực truy cập người dùng); và Bootstrap (front-end framework, hệ thống CSS/JS dựng sẵn hỗ trợ responsive web design và mobile-first).

Chương 2: Thiết kế và cài đặt chương trình

Chương 2 mô tả quá trình chuyển đổi cơ sở lý thuyết thành hệ thống phần mềm quản lý dịch vụ sân golf cụ thể:

  • Xác định tác nhân: Phân tích chi tiết vai trò của 2 nhóm tác nhân tương tác là Admin và Visitor.
  • Hệ thống lược đồ ca sử dụng (Use Case Diagrams): Trình bày lược đồ ca sử dụng tổng thể hệ thống cùng các lược đồ phân rã chức năng: xem trang chủ, quản lý đơn đặt sân, quản lý sân, quản lý khách hàng, quản lý dịch vụ, quản lý tài khoản và thống kê.
  • Lược đồ động và tương tác: Xây dựng các lược đồ hoạt động (trang chủ, luồng nghiệp vụ của admin); hệ thống lược đồ tuần tự (trang chủ, danh sách sân theo khu vực, quy trình đặt sân, quản lý khách hàng, quản lý sân, quản lý đơn đặt sân, quản lý tài khoản); và các lược đồ lớp chi tiết.
  • Đặc tả chi tiết giao diện và tương tác: Tài liệu chuẩn hóa cấu trúc dữ liệu nhập liệu, điều kiện thực thi và kịch bản ngoại lệ cho từng chức năng chính.

Dưới đây là bảng tổng hợp các trường dữ liệu hiển thị và thao tác tại hai giao diện quản lý nghiệp vụ trọng tâm được trích xuất từ văn bản:

Tên màn hình / Giao diện Mục / Trường dữ liệu Kiểu dữ liệu Mô tả chức năng / Thao tác
Quản lý đơn đặt sân Mã Đơn Number Hiển thị mã định danh đơn đặt sân
Tên KH Number (ID) Hiển thị thông tin nhận diện khách hàng
Tên sân String(10) Tên sân golf được đặt
Ngày đặt Date Ngày giờ khách hàng tạo lệnh đặt sân
Ngày chơi Date Ngày khách hàng dự kiến chơi golf
Số Người chơi Number Số lượng khách hàng tham gia
Thành tiền Number Tổng số tiền khách hàng phải thanh toán
Tình trạng thanh toán bit Trạng thái thanh toán (đã/chưa thanh toán)
Nút tác vụ Button Tìm kiếm chung, Phân trang, Xóa đơn chưa thanh toán, Xem chi tiết
Quản lý danh sách sân Mã Sân Number Hiển thị mã số định danh của sân
Tên sân String(20) Tên gọi của sân golf
Khu vực String(20) Địa phương/vùng phân bố của sân
Số lỗ Number Số lỗ golf tiêu chuẩn của sân
Đơn giá Number Đơn giá thuê sân
Khuyến mãi Number Tỷ lệ phần trăm giảm giá/khuyến mãi
Giờ mở cửa / Đóng cửa Datetime Khung thời gian hoạt động của sân
Nút tác vụ Button Tìm kiếm sân, Phân trang First-Last, Thêm, Sửa thông tin, Xóa sân

Khóa luận đồng thời mô tả giao diện sửa sân (với trường Mã sân ở chế độ chỉ đọc int, Tên sân String(50), Khu vực String(30) dạng ComboBox, Số lỗ String(10)), cùng các giao diện đăng nhập, đăng xuất, giao diện chi tiết khu vực, đặt sân, thông tin khách hàng và tài khoản.

Kết quả và đóng góp

Khóa luận đạt được các kết quả cụ thể theo đúng mục tiêu đặt ra:

  • Tổng hợp có hệ thống cơ sở lý thuyết về Spring Framework, làm rõ nguyên lý hoạt động của IoC Container, vòng đời và phạm vi của Spring Bean, kỹ thuật Dependency Injection cùng cơ chế định tuyến của Spring MVC và cơ chế bảo mật của Spring Security.
  • Hoàn thành thiết kế hướng đối tượng hoàn chỉnh cho hệ thống "Quản lý dịch vụ sân golf trực tuyến trên nền web", bao gồm đầy đủ hệ thống lược đồ UML (ca sử dụng, lớp, tuần tự, hoạt động) và mô hình dữ liệu quan hệ.
  • Cài đặt thành công ứng dụng thực nghiệm với đầy đủ hai phân hệ người dùng (Visitor: tìm kiếm sân, xem chi tiết, tạo đơn đặt sân; Admin: xác thực đăng nhập, quản lý dữ liệu sân, quản lý đơn đặt sân, quản lý khách hàng, tài khoản và thống kê).

Về mặt giải pháp, tác giả áp dụng mô hình phân tách trách nhiệm chặt chẽ: giao phó việc khởi tạo và móc nối phụ thuộc cho Spring IoC Container nhằm loại bỏ sự phụ thuộc cứng giữa các lớp đối tượng, đồng thời kết hợp Bootstrap và jQuery ở tầng trình diễn để đảm bảo giao diện web có khả năng co giãn linh hoạt trên đa thiết bị.

Về mặt đóng góp, công trình mang ý nghĩa thực tiễn đối với môi trường đào tạo tại địa phương: đây là một trong những tài liệu nghiên cứu ứng dụng thực nghiệm bước đầu về Spring Framework tại Khoa Công nghệ thông tin - Trường Đại học Quảng Nam ở thời điểm năm 2017, cung cấp một hệ thống tham chiếu mẫu giúp sinh viên tiếp cận mô hình phát triển phần mềm doanh nghiệp bằng Java.

Hạn chế và hướng nghiên cứu tiếp

Căn cứ theo nội dung văn bản khóa luận, các hạn chế và hướng mở của đề tài được ghi nhận như sau:

  • Hạn chế: Hệ thống phần mềm được xây dựng chủ yếu mang tính chất thực nghiệm minh họa nhằm kiểm chứng các khái niệm lý thuyết về Spring Framework (Core, MVC, Security). Các kiểm thử chịu tải thực tế, tính toán hiệu năng bộ nhớ khi số lượng kết nối đồng thời tăng cao, cũng như các kịch bản kiểm thử tự động quy mô lớn chưa được văn bản báo cáo chi tiết. Phân hệ đặt sân mới dừng lại ở quản lý trạng thái thanh toán mà chưa tích hợp cổng thanh toán trực tuyến thực tế của bên thứ ba.
  • Hướng nghiên cứu tiếp: Mở rộng nghiên cứu sâu hơn các module nâng cao khác của hệ sinh thái Spring (như Spring Data, Spring Batch, Spring Boot); tích hợp các cổng thanh toán điện tử vào quy trình đặt sân golf; hoàn thiện quy trình kiểm thử tự động và triển khai hệ thống lên môi trường máy chủ đám mây thực tế.

Giá trị tham khảo

Bản khóa luận có giá trị tham khảo thiết thực cho các nhóm đối tượng:

  • Sinh viên ngành Công nghệ thông tin và Kỹ thuật phần mềm: Là tài liệu tham khảo phù hợp cho sinh viên đang làm đồ án môn học hoặc khóa luận tốt nghiệp liên quan đến lập trình Java hướng doanh nghiệp, đặc biệt là những người bước đầu tiếp cận các khái niệm trừu tượng như Inversion of Control, Dependency Injection và vòng đời bean.
  • Người nghiên cứu thiết kế hệ thống thông tin: Các phần lược đồ ca sử dụng, lược đồ tuần tự, lược đồ lớp và bảng đặc tả tương tác chi tiết tại Chương 2 là mẫu tham khảo hữu ích cho việc xây dựng hồ sơ phân tích thiết kế phần mềm hướng đối tượng theo chuẩn UML.

Câu hỏi thường gặp

1. Tác giả chỉ ra nguyên nhân chính nào khiến hơn 83,8% dự án phần mềm thất bại hoặc không đáp ứng yêu cầu?
Theo tác giả, nguyên nhân cơ bản nhất là do các thành phần trong hệ thống phần mềm quá phụ thuộc lẫn nhau, cấu trúc chồng chéo và không có tính sử dụng lại cao, dẫn đến chi phí bảo trì và mở rộng hệ thống tăng vọt so với các giai đoạn khác.

2. Hai kỹ thuật nền tảng tạo nên sức mạnh của Spring Framework được phân tích trong khóa luận là gì?
Đó là Inversion of Control (IoC - Đảo ngược điều khiển) và Dependency Injection (DI - Tiêm phụ thuộc). Hai kỹ thuật này giúp chuyển quyền kiểm soát luồng thực thi từ mã người dùng sang cho khung làm việc, quản lý các đối tượng (bean) tập trung và giảm thiểu sự liên kết phụ thuộc trực tiếp giữa các thành phần.

3. Khóa luận phân tích những phạm vi (scope) nào của Spring Bean?
Khóa luận nêu rõ Spring cung cấp năm phạm vi của bean, trong đó tập trung trình bày chi tiết hai phạm vi phổ biến nhất là: singleton (chỉ tồn tại duy nhất một thể hiện của bean trong một container, được lưu trữ trong bộ nhớ đệm) và prototype (mỗi khi có yêu cầu tham chiếu, container sẽ khởi tạo một thể hiện mới hoàn toàn).

4. Hệ thống Quản lý dịch vụ sân golf trực tuyến có những tác nhân nào và quyền hạn ra sao?
Hệ thống có hai tác nhân chính:

  • Admin: Quản trị viên có quyền đăng nhập hệ thống để quản lý đơn đặt sân, quản lý danh sách sân golf, quản lý khách hàng, quản lý tài khoản, quản lý dịch vụ và xem thống kê doanh thu, khách hàng.
  • Visitor: Người dùng truy cập trang web có quyền tìm kiếm sân, xem thông tin chi tiết các sân golf, thực hiện đặt sân trực tuyến và hủy đơn đặt sân.

5. Thư viện jQuery được giới thiệu trong khóa luận có kích thước và những đặc trưng nổi bật nào?
jQuery được John Resig tạo ra năm 2006 với phương châm "Write less, do more", có kích thước rất gọn nhẹ (khoảng 19KB sau khi gzipped). Thư viện nổi bật với các tính năng: thao tác cây DOM thông qua bộ chọn Sizzle, xử lý sự kiện, hỗ trợ công nghệ AJAX, tạo hiệu ứng động, hỗ trợ chuẩn CSS3 Selector và tương thích tốt với hầu hết các trình duyệt hiện đại (IE 6.0+, Chrome, Opera 9).

Kết luận

Khóa luận tốt nghiệp của sinh viên Lê Quốc Thọ đã hệ thống hóa thành công các nguyên lý cốt lõi của Spring Framework, trọng tâm là IoC Container, Dependency Injection, Spring MVC và Spring Security. Nghiên cứu đã vận dụng hiệu quả khung lý thuyết này kết hợp cùng MySQL Workbench, jQuery và Bootstrap để thiết kế và cài đặt thực nghiệm hệ thống Quản lý dịch vụ sân golf trực tuyến. Mặc dù sản phẩm mang tính chất minh họa học thuật, công trình đã giải quyết tốt bài toán phân tách module và là tài liệu tham khảo có giá trị đối với sinh viên chuyên ngành Công nghệ thông tin trong việc nghiên cứu và ứng dụng công nghệ Java Enterprise.