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

Trong bối cảnh khoa học và công nghệ thông tin phát triển nhanh chóng, thương mại điện tử ngày càng trở thành kênh kinh doanh thiết yếu đối với các cửa hàng bán lẻ. Tác giả xác định rằng các doanh nghiệp bán điện thoại di động quy mô vừa và nhỏ đang có nhu cầu cấp thiết về một nền tảng trực tuyến đủ năng lực để quảng bá thương hiệu, quản lý sản phẩm và tiếp nhận đơn hàng mà không đòi hỏi khách hàng phải đến trực tiếp cửa hàng. Đồ án được thực hiện tại Khoa Công nghệ Thông tin, Bộ môn Công nghệ Phần mềm, Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh, trong khoảng thời gian từ ngày 05/09/2023 đến ngày 29/12/2023.

Nhiệm vụ nghiên cứu được đề cương xác định gồm hai nhóm:

  1. Lý thuyết: Nghiên cứu Spring Framework, ReactJS, REST API và MySQL.
  2. Thực hành: Xây dựng website theo mô hình ba lớp, sử dụng Spring Boot kết hợp ReactJS, tích hợp Spring Security và JWT; triển khai đầy đủ các chức năng bao gồm đăng nhập/đăng ký/quên mật khẩu, giỏ hàng, đặt hàng, thanh toán COD và thanh toán trực tuyến, bình luận đánh giá sản phẩm, tìm kiếm và lọc sản phẩm, gửi email, quản trị toàn diện (người dùng, đơn hàng, sản phẩm, nhà cung cấp, danh mục, khuyến mãi) và thống kê doanh thu.

Đối tượng nghiên cứu là nhu cầu sử dụng của các cửa hàng bán điện thoại di động vừa và nhỏ, đồng thời là bản thân các công nghệ Spring Framework và ReactJS.

Phạm vi nghiên cứu tập trung vào việc tìm hiểu và ứng dụng Spring Framework và ReactJS để xây dựng một website minh họa hoàn chỉnh phục vụ mục tiêu bán hàng trực tuyến trong phân khúc doanh nghiệp nhỏ.


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

Khung công nghệ và mô hình thiết kế

Đồ án áp dụng kết hợp mô hình ba lớp (Three-Tier Architecture) và mô hình MVC (Model–View–Controller) làm nền tảng tổ chức mã nguồn:

  • Presentation Layer: Giao tiếp với người dùng thông qua giao diện ReactJS.
  • Business Logic Layer: Xử lý toàn bộ logic nghiệp vụ tại tầng Service trong Spring Boot.
  • Data Access Layer: Tương tác với cơ sở dữ liệu thông qua Spring Data JPA và Repository.

Các công nghệ cụ thể được sử dụng trong đồ án:

Thành phần Công nghệ
Front-end ReactJS (Single Page Application, JSX, axios)
Back-end Spring Boot (REST API, Spring MVC, Spring Security)
ORM / Data Access Spring Boot JPA (JpaRepository)
Xác thực JWT (JSON Web Token)
Cơ sở dữ liệu MySQL
API bên ngoài VnPay API, Cloudinary API, Tawk
Hỗ trợ giao diện Bootstrap
Giao tiếp dữ liệu RESTful API (HTTP: GET, POST, DELETE, PATCH), JSON

Spring Boot được giới thiệu là phiên bản đơn giản hóa của Spring Framework, loại bỏ cấu hình phức tạp, hỗ trợ tự động cấu hình và IoC Container nhẹ. ReactJS được trình bày theo lịch sử phát hành từ phiên bản 15.0 (10/2020) đến React 18.0 (03/2022), với đặc điểm nổi bật là hỗ trợ xây dựng Single Page Application bằng JSX.

Phương pháp nghiên cứu

Đồ án sử dụng các phương pháp sau:

  • Khảo sát hiện trạng: Phân tích bốn website thương mại điện tử thực tế gồm Di Động Việt, CellphoneS, Shopee và Haravan để rút ra ưu/nhược điểm.
  • Thu thập thông tin: Từ tài liệu kỹ thuật trên Internet về Spring Framework và ReactJS.
  • Phân tích và thiết kế hệ thống: Theo quy trình phân tích yêu cầu, đặc tả use case, vẽ sequence diagram, thiết kế cơ sở dữ liệu.
  • Xây dựng và kiểm thử: Triển khai mã nguồn theo kế hoạch tuần và kiểm thử chức năng.

Nguồn dữ liệu

Dữ liệu được xây dựng trực tiếp từ cơ sở dữ liệu MySQL do tác giả thiết kế và nhập liệu trong quá trình phát triển hệ thống.


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

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

Chương này trình bày nền tảng lý thuyết của đồ án, bao gồm mô hình hoạt động của Spring Boot Server (Back-end) và ReactJS Client (Front-end). Tác giả mô tả chi tiết luồng dữ liệu hai chiều: chiều lấy dữ liệu từ View → Controller → Service → Repository → Database và chiều trả về từ Database → Repository → Service → Controller → View. Các khái niệm Dependency Injection, Aspect Oriented Programming, POJO, IoC Container, DTO (Data Transfer Object) và Spring Data JPA được giải thích trong mối tương quan với kiến trúc tổng thể. Ngoài ra, chương giới thiệu về RESTful API và vai trò của MySQL trong hệ thống, kèm phân tích ưu điểm (tốc độ cao, bảo mật, đa tính năng) và nhược điểm (độ tin cậy với các giao dịch phức tạp, hạn chế dung lượng khi dữ liệu lớn).

Chương 2: Mô hình hóa yêu cầu và thiết kế cơ sở dữ liệu

Đây là chương có khối lượng lớn nhất, bao gồm ba nhóm nội dung:

Mô tả actor: Hệ thống có ba tác nhân: Guest (người ghé xem không cần đăng nhập), Customer (khách hàng đã đăng nhập với mục đích mua sắm) và Admin (quản trị viên quản lý toàn bộ hệ thống).

Đặc tả use case: Chương liệt kê và đặc tả chi tiết 41 use case, phân thành các nhóm chức năng: quản lý tài khoản (đăng nhập, đăng ký, quên mật khẩu, vô hiệu hoá/kích hoạt tài khoản, cập nhật mật khẩu, thay đổi thông tin cá nhân), quản lý sản phẩm (xem chi tiết, tìm kiếm, lọc theo hãng/danh mục/giá/tên/sản phẩm bán chạy), nghiệp vụ mua hàng (thêm/cập nhật/xóa giỏ hàng, đặt mua, thanh toán COD, thanh toán VnPay, xem/hủy đơn hàng, xác nhận đã nhận hàng, đánh giá sản phẩm) và nghiệp vụ quản trị (quản lý tài khoản, danh mục, thương hiệu, nhà cung cấp, sản phẩm, đơn hàng, khuyến mãi, thống kê, xóa đánh giá). Mỗi use case được mô tả với đầy đủ các trường: tên, mô tả, tác nhân kích hoạt, tiền điều kiện và các bước thực hiện. Riêng sequence diagram được vẽ chi tiết cho tất cả 39 luồng chức năng.

Thiết kế cơ sở dữ liệu: Trình bày lược đồ cơ sở dữ liệu tổng thể và chi tiết các bảng dữ liệu.

Chương 3: Thiết kế giao diện

Chương trình bày giao diện người dùng cho toàn bộ các màn hình của hệ thống, bao gồm: trang chủ, đăng nhập, đăng ký, quên mật khẩu, lọc sản phẩm, thông tin cá nhân, đổi mật khẩu, chi tiết sản phẩm, giỏ hàng, xác nhận hóa đơn, đơn hàng, tra cứu đơn hàng, trang liên hệ, chat với shop (tích hợp Tawk) và toàn bộ giao diện quản trị viên (dashboard thống kê, quản lý người dùng, sản phẩm, nhóm sản phẩm, đơn hàng, chi tiết đơn hàng, thương hiệu, khuyến mãi).

Chương 4: Cài đặt và kiểm thử

Chương hướng dẫn cụ thể các bước cài đặt môi trường gồm cài đặt Node.js, cài đặt ReactJS, import database vào MySQL và khởi chạy ứng dụng Back-end. Phần kết quả kiểm thử trình bày kết quả kiểm tra các chức năng đã xây dựng.


Thiết kế và triển khai

Kiến trúc hệ thống

Hệ thống được xây dựng theo kiến trúc tách biệt Front-end và Back-end hoàn toàn (decoupled architecture):

  • Back-end (Spring Boot): Đóng vai trò REST API server. Nhận request từ ReactJS, map dữ liệu thành DTO hoặc Form Object, chuyển xử lý qua tầng Service, gọi Spring Data JPA để tương tác MySQL, trả về dữ liệu dạng JSON.
  • Front-end (ReactJS): Gọi API thông qua axios trong lớp Service của React. Các Function Component chịu trách nhiệm hiển thị và tương tác. Route điều hướng giữa các trang trong ứng dụng Single Page Application.
  • Bảo mật: Spring Security kết hợp JWT để xác thực và phân quyền người dùng.
  • Lưu trữ ảnh: Cloudinary API.
  • Thanh toán trực tuyến: VnPay API.
  • Chat trực tuyến: Tawk.
  • Gửi email: Tích hợp chức năng gửi email tự động cho các sự kiện đặt hàng, hủy đơn, quên mật khẩu và vô hiệu hóa tài khoản.

Cơ sở dữ liệu

Hệ quản trị cơ sở dữ liệu MySQL được sử dụng với thiết kế bao gồm các bảng phục vụ đầy đủ nghiệp vụ: tài khoản người dùng, sản phẩm, danh mục sản phẩm, thương hiệu, nhà cung cấp, giỏ hàng, đơn hàng, chi tiết đơn hàng, đánh giá và khuyến mãi.

Kiểm thử

Giai đoạn kiểm thử được bố trí tại tuần 18 trong kế hoạch thực hiện, bao gồm kiểm tra chức năng, phát hiện và sửa lỗi phát sinh, đồng thời hoàn thiện tài liệu báo cáo.


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

Kết quả chương trình đạt được

Tác giả xác nhận hệ thống đã hoàn thành đầy đủ các chức năng đề ra, bao gồm:

  • Nhóm chức năng người dùng cuối: Đăng nhập, đăng ký, quên mật khẩu, đăng xuất; xem và tìm kiếm sản phẩm theo từ khóa; lọc sản phẩm theo hãng, danh mục, giá (nhiều khoảng); thêm/cập nhật/xóa giỏ hàng; đặt hàng; thanh toán COD và thanh toán trực tuyến qua VnPay; đánh giá sản phẩm sau khi nhận hàng; xem và hủy đơn hàng; vô hiệu hóa/kích hoạt tài khoản; thay đổi thông tin cá nhân và đổi mật khẩu.
  • Nhóm chức năng quản trị viên: Quản lý toàn diện tài khoản người dùng (thêm, sửa, xóa, tìm kiếm, kích hoạt/vô hiệu hoá); quản lý sản phẩm, danh mục, thương hiệu, nhà cung cấp; quản lý đơn hàng (duyệt, lọc trạng thái, giao hàng hàng loạt, hủy); quản lý khuyến mãi; xóa đánh giá của người dùng; thống kê số lượng khách hàng, đơn hàng mới, doanh thu theo khoảng thời gian và sản phẩm bán chạy nhất; dashboard tổng quan.

Kiến thức học được

Tác giả ghi nhận việc nắm vững các công nghệ Spring Framework, ReactJS, REST API, MySQL, Spring Security, JWT và các API bên ngoài như VnPay, Cloudinary, Tawk trong suốt quá trình thực hiện đồ án.

Đóng góp

Đồ án cung cấp một bản mẫu hệ thống thương mại điện tử đầy đủ chức năng, phù hợp với quy mô cửa hàng bán điện thoại vừa và nhỏ, minh họa cách tích hợp Spring Boot REST API với ReactJS theo mô hình kiến trúc ba lớp trong thực tiễn.


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

Nhược điểm được tác giả nêu

Tác giả thừa nhận kinh nghiệm thực tiễn và kiến thức chuyên môn còn hạn chế, dẫn đến báo cáo vẫn có những thiếu sót. Cụ thể, tác giả đề cập đến nhược điểm của MySQL trong việc xử lý dung lượng dữ liệu lớn và một số hạn chế về độ tin cậy khi xử lý các giao dịch phức tạp.

Hướng phát triển

Đồ án ghi nhận một mục riêng về hướng phát triển, tuy nhiên fulltext không trình bày nội dung chi tiết của mục này. Dựa trên phạm vi hệ thống hiện tại, các hướng mở rộng tự nhiên có thể bao gồm tối ưu hiệu năng truy vấn khi dữ liệu tăng trưởng, bổ sung phương thức thanh toán (Momo đã được nhắc đến trong sequence diagram nhưng chưa được xác nhận là đã triển khai hoàn chỉnh), và phát triển ứng dụng di động kết hợp với REST API đã xây dựng.


Giá trị tham khảo

Đồ án phù hợp để tham khảo cho các đối tượng sau:

  • Sinh viên ngành Công nghệ Thông tin, Công nghệ Phần mềm đang tìm hiểu cách kết hợp Spring Boot và ReactJS trong một dự án thực tế, đặc biệt phần mô hình ba lớp kết hợp MVC và phần luồng dữ liệu hai chiều được trình bày rõ ràng tại Chương 1.
  • Sinh viên làm đồ án về thương mại điện tử có thể tham khảo bộ use case đầy đủ (41 use case, 39 sequence diagram) tại Chương 2 làm mẫu cho giai đoạn phân tích và đặc tả yêu cầu.
  • Người học lập trình Back-end Java quan tâm đến cách cấu trúc dự án Spring Boot với Spring Security, JWT và Spring Data JPA.
  • Người học Front-end quan tâm đến cách tổ chức React component theo hướng gọi API thông qua axios và quản lý định tuyến.
  • Người thực hiện đề tài tương tự về hệ thống bán hàng trực tuyến có thể tham khảo phần thiết kế cơ sở dữ liệu và danh sách chức năng để đối chiếu với phạm vi đề tài của mình.

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

1. Hệ thống hỗ trợ những phương thức thanh toán nào? Hệ thống hỗ trợ hai phương thức: thanh toán COD (Cash on Delivery — thanh toán khi nhận hàng) và thanh toán trực tuyến qua VnPay API. Sequence diagram cho cả hai luồng này được đặc tả riêng biệt tại Chương 2.

2. Khách hàng có thể hủy đơn hàng trong điều kiện nào? Theo đặc tả use case, khách hàng chỉ có thể hủy đơn hàng khi quản trị viên chưa duyệt đơn. Quản trị viên có thể hủy đơn khi đơn hàng chưa được bàn giao cho đơn vị vận chuyển. Khi hủy thành công, hệ thống gửi email thông báo cho khách hàng.

3. Chức năng thống kê của Admin bao gồm những nội dung gì? Theo đề cương nhiệm vụ, chức năng thống kê bao gồm: số lượng khách hàng, số đơn hàng mới, doanh thu trong một khoảng thời gian tùy chọn và danh sách sản phẩm bán chạy nhất. Ngoài ra Admin có dashboard tổng quan và có thể lọc đơn hàng theo trạng thái (đã giao, đang giao, chờ xác nhận, đã hủy).

4. Tại sao đồ án chọn mô hình ba lớp kết hợp MVC thay vì chỉ dùng một trong hai? Tác giả giải thích rằng MVC chỉ mô tả luồng đi của dữ liệu ở tầng Presentation, không đủ để tổ chức toàn bộ ứng dụng. Mô hình ba lớp bổ sung thêm tầng Business Logic (Service) và tầng Data Access (Repository), tạo thành cấu trúc Controller – Service – Repository hoàn chỉnh cho một ứng dụng Spring Boot thực tế.

5. Hệ thống xử lý tài khoản bị vô hiệu hóa như thế nào? Khi khách hàng đăng nhập bằng tài khoản đã bị vô hiệu hóa, hệ thống hiển thị thông báo tài khoản chưa kích hoạt và hỏi người dùng có muốn kích hoạt lại không. Nếu đồng ý, người dùng được chuyển đến trang kích hoạt, chọn nhận OTP qua email và nhập OTP trong vòng 5 phút. Kích hoạt thành công sẽ chuyển về trang đăng nhập.


Kết luận

Đồ án tốt nghiệp "Xây dựng website bán điện thoại di động với Spring REST API và ReactJS" của sinh viên Thái Duy Bảo (MSSV 19110329) trình bày toàn bộ quy trình phát triển một hệ thống thương mại điện tử từ phân tích yêu cầu đến triển khai, bao gồm 41 use case được đặc tả chi tiết và kiến trúc ba lớp kết hợp Spring Boot với ReactJS. Hệ thống tích hợp xác thực JWT, thanh toán VnPay, lưu trữ ảnh Cloudinary và chat trực tuyến Tawk, đáp ứng đầy đủ nhu cầu vận hành của một cửa hàng bán lẻ điện thoại di động quy mô vừa và nhỏ. Đồ án có giá trị thực hành cao cho sinh viên ngành Công nghệ Phần mềm muốn tìm hiểu cách ứng dụng Spring Boot và ReactJS trong một dự án có quy mô và độ phức tạp tương đương thực tiễn.