Bối cảnh và vấn đề nghiên cứu
Báo cáo đồ án môn học "Phát triển phần mềm hướng dịch vụ" được thực hiện bởi Nhóm 10 gồm 4 sinh viên (Nguyễn Thành Trung, Phạm Minh Mạnh, Đỗ Đức Hậu, Lê Lâm Tuấn) thuộc Khoa Công nghệ Thông tin, Học viện Công nghệ Bưu chính Viễn thông (Cơ sở Thành phố Hồ Chí Minh), dưới sự hướng dẫn của giảng viên ThS. Huỳnh Trung Trụ vào tháng 6 năm 2023.
Trong bối cảnh chuyển đổi số và phát triển mạnh mẽ của thương mại điện tử trong ngành ẩm thực, việc xây dựng các hệ thống đặt và quản lý thức ăn nhanh trên đa nền tảng trở thành nhu cầu thiết thực. Đồ án tập trung giải quyết bài toán xây dựng hệ thống phần mềm hoàn chỉnh cho cửa hàng thức ăn nhanh dựa trên mô hình dịch vụ (REST API), phân tách rõ ràng giữa máy chủ xử lý dữ liệu và các ứng dụng giao diện đầu cuối phục vụ các nhóm người dùng khác nhau.
Mục tiêu và nhiệm vụ nghiên cứu, phát triển của đồ án bao gồm:
- Phân tích và đặc tả hệ thống quản lý, kinh doanh thức ăn nhanh bao gồm cấu trúc dữ liệu, danh mục sản phẩm, quy trình đặt hàng, thanh toán và phản hồi của khách hàng.
- Xây dựng tầng máy chủ cung cấp dịch vụ web (Web Server REST API) đóng vai trò trung tâm xử lý dữ liệu và cung cấp dịch vụ cho các ứng dụng khách.
- Thiết kế và triển khai ứng dụng web cho khách hàng (Web User) phục vụ xem thực đơn, quản lý giỏ hàng, đặt hàng và theo dõi đơn hàng.
- Thiết kế và triển khai ứng dụng web cho quản trị viên (Web Admin) phục vụ quản lý món ăn, tiếp nhận và xử lý trạng thái đơn hàng.
- Thiết kế và phát triển ứng dụng di động (Mobile App) trên nền tảng React Native với đầy đủ quy trình trải nghiệm người dùng từ tìm kiếm, xem đánh giá, đặt hàng đến quản lý tài khoản.
Đối tượng và phạm vi nghiên cứu:
- Đối tượng nghiên cứu: Quy trình nghiệp vụ bán hàng thức ăn nhanh; kiến trúc hướng dịch vụ REST API; các mô hình kiến trúc phần mềm MVC (Model - View - Controller) và MVVM (Model - View - ViewModel); các công nghệ lập trình web và di động (Nodejs, Expressjs, MySQL, Reactjs, React Native).
- Phạm vi không gian: Hệ thống phần mềm phục vụ mô hình cửa hàng bán đồ ăn nhanh, bao gồm hai nhóm đối tượng người dùng là khách hàng (sử dụng Web User và Mobile App) và ban quản trị/nhân viên cửa hàng (sử dụng Web Admin).
- Phạm vi thời gian: Đồ án được triển khai, hoàn thành và báo cáo nghiệm thu vào tháng 6 năm 2023 tại TP. Hồ Chí Minh.
Cơ sở lý thuyết và phương pháp
Đồ án ứng dụng các cơ sở lý thuyết chuẩn mực trong kỹ thuật phần mềm hiện đại và phát triển ứng dụng phân tán:
- Kiến trúc REST API: REST (Representational State Transfer) là kiểu kiến trúc phần mềm sử dụng các phương thức của giao thức HTTP (như GET, POST, DELETE...) để truyền tải và xử lý dữ liệu giữa các hệ thống máy tính qua các URL xác định. Dữ liệu trao đổi giữa client và server được định dạng theo các chuẩn mở như JSON hoặc XML, thay thế các chuẩn dịch vụ web truyền thống như SOAP và WSDL.
- Mô hình kiến trúc MVC (Model - View - Controller): Được áp dụng cho hệ thống máy chủ và ứng dụng web. Mô hình gồm 3 lớp độc lập:
- Model: Chịu trách nhiệm quản lý dữ liệu, giao tiếp trực tiếp với cơ sở dữ liệu quan hệ, thực hiện các thao tác lưu trữ, cập nhật hoặc truy vấn dữ liệu.
- View: Đại diện cho giao diện người dùng, chịu trách nhiệm biểu diễn trực quan dữ liệu thành các thành phần có thể quan sát và tương tác.
- Controller: Đóng vai trò điều phối luồng hoạt động, tiếp nhận các yêu cầu (requests) từ phía client, điều phối tương tác giữa Model và View để trả về kết quả tương ứng cho người dùng.
- Mô hình kiến trúc MVVM (Model - View - ViewModel): Được ứng dụng trên môi trường di động (Android / iOS) nhằm tăng tính linh hoạt và phản hồi của giao diện:
- View: Giao diện ứng dụng nhận tương tác và hiển thị dữ liệu; có tính năng chủ động phản hồi người dùng thông qua cơ chế data binding và command.
- Model: Các đối tượng nghiệp vụ hỗ trợ truy xuất và xử lý dữ liệu thực sự.
- ViewModel: Lớp trung gian thay thế Controller, chứa mã lệnh thực hiện ràng buộc dữ liệu (data binding) và xử lý command. ViewModel không phụ thuộc trực tiếp vào View mà áp dụng mẫu thiết kế Observer (Observer pattern) để giao tiếp với View theo quan hệ một-nhiều (one-to-many), hỗ trợ kết hợp với các thư viện lập trình phản ứng (Reactive Programming) hoặc luồng sự kiện (Event/Data Stream).
Phương pháp thực hiện thực tế bao gồm phương pháp phân tích thiết kế hệ thống thông tin, mô hình hóa dữ liệu quan hệ trên MySQL, xây dựng kiến trúc dịch vụ phân tán qua Expressjs/Nodejs và xây dựng giao diện người dùng đa nền tảng bằng Reactjs và React Native. Nguồn dữ liệu sử dụng là cơ sở dữ liệu nội bộ được thiết kế riêng cho nghiệp vụ kinh doanh thức ăn nhanh.
Thiết kế và triển khai
Hệ thống được thiết kế theo mô hình phân tầng hướng dịch vụ, trong đó máy chủ web đảm nhận vai trò cung cấp API tập trung cho các ứng dụng client truy xuất.
1. Công nghệ sử dụng (Tech Stack)
| Thành phần |
Công nghệ / Thư viện |
Đặc điểm và vai trò trong hệ thống |
| Backend Runtime |
Nodejs |
Nền tảng thực thi JavaScript phía máy chủ, xử lý I/O hướng sự kiện. |
| Backend Framework |
Expressjs |
Framework chạy trên Nodejs, hỗ trợ các method HTTP và middleware để tạo REST API. |
| Cơ sở dữ liệu |
MySQL |
Hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở lưu trữ toàn bộ dữ liệu nghiệp vụ. |
| Frontend Web |
Reactjs |
Thư viện JavaScript xây dựng giao diện người dùng cho ứng dụng Web User và Web Admin. |
| Mobile App |
React Native |
Framework mã nguồn mở phát triển ứng dụng di động đa nền tảng (Android, iOS). |
2. Đặc tả cơ sở dữ liệu
Cơ sở dữ liệu của hệ thống được thiết kế gồm 13 bảng phục vụ quản lý thông tin tài khoản, danh mục sản phẩm, đơn hàng và các tính năng tương tác khách hàng:
| Tên bảng |
Mô tả chi tiết dữ liệu lưu trữ |
staffs |
Danh sách nhân viên của cửa hàng, bao gồm các trường: tên, giới tính, số điện thoại, email. |
roles |
Danh sách phân quyền người dùng trong hệ thống (Admin, Khách hàng...). |
customers |
Danh sách thông tin khách hàng, bao gồm: tên, số điện thoại, địa chỉ... |
accounts |
Danh sách tài khoản người dùng sử dụng để đăng nhập vào hệ thống. |
types |
Danh mục phân loại món ăn (Nước uống, bánh, bánh mặn). |
items |
Danh sách các món ăn nhanh: loại món, tên món, hình ảnh, giá bán, mô tả, nguyên liệu. |
payments |
Danh sách các phương thức thanh toán hỗ trợ. |
orders |
Danh sách hóa đơn / đơn đặt hàng của khách hàng. |
order_details |
Chi tiết hóa đơn, lưu trữ danh sách món ăn và số lượng thuộc từng đơn hàng. |
carts |
Danh sách giỏ hàng của từng khách hàng. |
cart_details |
Danh sách chi tiết các món ăn có trong giỏ hàng của khách hàng. |
wishlists |
Danh mục danh sách yêu thích của khách hàng. |
wishlist_details |
Chi tiết các món ăn được lưu trong danh sách yêu thích của khách hàng. |
reviews |
Danh sách các đánh giá, phản hồi và bình luận về món ăn từ khách hàng. |
3. Phân công công việc nhóm thực hiện
| STT |
Thành viên |
Nhiệm vụ đảm nhiệm trong đồ án |
| 1 |
Phạm Minh Mạnh |
- CRUD sản phẩm, hình ảnh sản phẩm, tìm kiếm sản phẩm. - Xử lý chốt đơn và hủy đơn cho khách. - Đăng nhập, đăng ký, đăng xuất. - Đánh giá sản phẩm, danh sách yêu thích, thống kê. - Đặt hàng, giỏ hàng, thanh toán, lịch sử đơn hàng, viết báo cáo. |
| 2 |
Nguyễn Thành Trung |
- CRUD sản phẩm, hình ảnh sản phẩm, đánh giá sản phẩm. - Quản lý danh sách yêu thích, lịch sử đơn hàng, viết báo cáo. - Đăng nhập, đăng ký, đăng xuất. |
| 3 |
Lê Lâm Tuấn |
- Xây dựng GUI User, trang chủ, danh sách sản phẩm, chi tiết đơn hàng. - Tìm kiếm sản phẩm, danh sách yêu thích, đánh giá sản phẩm. - Đặt hàng, giỏ hàng, thanh toán, lịch sử đơn hàng. - Thống kê biểu đồ (chart), đăng nhập, đăng ký, đăng xuất, viết báo cáo. |
| 4 |
Đỗ Đức Hậu |
- Xây dựng GUI Admin, quản lý CRUD sản phẩm, tìm kiếm sản phẩm. - Xử lý chốt đơn và hủy đơn, thống kê admin. - Đặt hàng, giỏ hàng, thanh toán, đăng nhập, đăng ký, đăng xuất. |
Nội dung chính theo từng chương
CHƯƠNG 1. MÔ TẢ HỆ THỐNG
Nội dung chương 1 trình bày tổng quan cấu trúc phân rã chức năng và kiến trúc kỹ thuật của hệ thống. Trọng tâm của chương bao gồm:
- Đặc tả sơ đồ CSDL: Trình bày chi tiết 13 thực thể dữ liệu quan hệ (
staffs, roles, customers, accounts, types, items, payments, orders, order_details, carts, cart_details, wishlists, wishlist_details, reviews) xác định đầy đủ các trường thông tin cấu thành nên hệ sinh thái quản lý cửa hàng.
- Kiến trúc REST API và các mô hình thiết kế: Làm rõ nguyên lý truyền thông phi trạng thái thông qua các phương thức HTTP chuẩn (GET, POST, DELETE...) và định dạng dữ liệu trao đổi JSON/XML. Đồng thời, chương phân tích sâu sự khác biệt giữa mô hình MVC áp dụng trên máy chủ/web và mô hình MVVM áp dụng trên ứng dụng di động với cơ chế liên kết dữ liệu qua Observer pattern.
MÔI TRƯỜNG MÁY CHỦ WEB SERVER
Chương này mô tả chi tiết ngăn xếp công nghệ (tech stack) được lựa chọn để hiện thực hóa hệ thống. Báo cáo làm rõ vai trò của Nodejs như một môi trường thực thi JavaScript hướng sự kiện, kết hợp với Expressjs để cung cấp các API endpoints và xử lý middleware. Hệ quản trị MySQL được lựa chọn làm cơ sở dữ liệu lưu trữ quan hệ, trong khi Reactjs và React Native đóng vai trò xây dựng giao diện người dùng tương ứng cho nền tảng web và thiết bị di động.
CÁC CLIENT, APPLICATION TRUY CẬP API
Phần này mô tả chi tiết toàn bộ các giao diện và luồng nghiệp vụ của 3 phân hệ ứng dụng đầu cuối kết nối vào hệ thống REST API:
I. Ứng dụng web user
Phân hệ dành cho khách hàng trên nền tảng trình duyệt web bao gồm các giao diện chức năng:
- Giao diện trang chủ, xác thực và tài khoản: Màn hình trang chủ đón tiếp người dùng với các liên kết đăng nhập, đăng ký, quên mật khẩu và đổi mật khẩu; giao diện hiển thị thông tin người dùng và đăng xuất.
- Giao diện thực đơn và chi tiết món ăn: Cho phép xem danh mục đồ ăn nhanh, tùy chọn số lượng cụ thể (mặc định là 1) để thêm vào giỏ hàng thông qua icon giỏ hàng, hoặc bấm vào icon trái tim để thêm/xóa món ăn khỏi danh sách yêu thích.
- Giao diện giỏ hàng và thanh toán: Cung cấp giao diện giỏ hàng chi tiết và giao diện xem nhanh giỏ hàng, cho phép chỉnh sửa số lượng hoặc xóa món; giao diện thanh toán hỗ trợ 3 phương thức: Ví điện tử, Thẻ ghi nợ, Thanh toán khi nhận hàng, kèm theo trường ghi chú nhắc nhở khi đặt món.
- Giao diện đơn hàng và đánh giá: Cung cấp danh sách lịch sử đơn hàng và màn hình chi tiết đơn hàng. Khách hàng được phép hủy đơn khi đơn hàng chưa được nhân viên xác nhận. Đối với các đơn hàng đã được xác nhận/hoàn tất và chưa đánh giá, khách hàng có thể thực hiện vote số sao và viết bình luận đánh giá món ăn.
II. Ứng dụng web admin
Phân hệ dành cho người quản trị và nhân viên cửa hàng trên nền tảng web bao gồm:
- Giao diện đăng nhập: Bảo mật quyền truy cập dành riêng cho vai trò quản trị.
- Giao diện quản lý món ăn và thêm mới thức ăn: Cho phép quản trị viên xem danh sách món ăn, thực hiện các thao tác thêm mới món ăn, chỉnh sửa thông tin hoặc xóa món ăn (CRUD).
- Giao diện quản lý đơn hàng và chi tiết đơn hàng: Hiển thị danh sách hóa đơn đặt hàng từ khách hàng, cho phép nhân viên xem chi tiết từng đơn hàng, thực hiện quy trình chốt đơn hoặc hủy đơn hàng.
III. Ứng dụng mobile
Phân hệ ứng dụng di động dành cho khách hàng được xây dựng với trải nghiệm người dùng tối ưu hóa cho màn hình cảm ứng:
- Giao diện bắt đầu và trang chủ: Màn hình chào với nút "Bắt đầu" dẫn vào trang chủ. Trang chủ tích hợp thanh tìm kiếm sản phẩm theo từ khóa tên món, thanh ActionBar dạng tab có layout slider phân loại sản phẩm, banner quảng cáo, biểu tượng thêm nhanh vào giỏ hàng và danh sách sản phẩm hỗ trợ tải dữ liệu theo cơ chế Lazy load kết hợp Infinite Scroll (tự động tải thêm khi cuộn đến cuối màn hình).
- Quy trình xác thực: Màn hình đăng nhập, màn hình đăng ký tài khoản (ràng buộc tất cả các trường dữ liệu đều bắt buộc nhập trước khi bấm "Xác nhận đăng ký"), và màn hình quên mật khẩu hỗ trợ gửi mã xác nhận (OTP) thông qua email đăng ký của tài khoản.
- Giao diện chi tiết và đánh giá món ăn: Hiển thị đầy đủ thông tin món ăn, nút tăng/giảm số lượng (+/-), nút icon trái tim để thêm danh sách yêu thích, rating hiển thị bằng các ngôi sao đỏ. Nút biểu tượng tin nhắn cho phép xem toàn bộ danh sách đánh giá (rating, nội dung bình luận, thời gian bình luận và hình ảnh đính kèm). Màn hình đánh giá cho phép người dùng nhập bình luận, chấm điểm vote sao và tải hình ảnh đính kèm từ thiết bị (chỉ áp dụng cho các món ăn thuộc đơn hàng đã hoàn tất).
- Giao diện giỏ hàng, thanh toán và lịch sử: Cho phép điều chỉnh số lượng món, xóa món, tự động tính toán lại tổng giá tiền; hỗ trợ nhập trường "Ghi chú cho chúng tôi" khi chọn phương thức thanh toán. Giao diện lịch sử đơn hàng thống kê tổng số lượng hóa đơn và tổng chi tiêu (tổng tiền các hóa đơn đã hoàn thành), liệt kê mã hóa đơn, tình trạng và thời gian đặt; cho phép hủy các đơn hàng đang ở trạng thái chờ xác nhận.
- Giao diện cá nhân: Xem thông tin cá nhân, thực hiện đổi mật khẩu và đăng xuất khỏi ứng dụng.
Kết quả và đóng góp
Báo cáo đồ án ghi nhận các kết quả xây dựng hệ thống phần mềm cụ thể:
- Thiết kế hoàn chỉnh mô hình dữ liệu quan hệ gồm 13 bảng đáp ứng toàn bộ các nghiệp vụ kinh doanh thức ăn nhanh từ quản lý thực đơn, khách hàng, nhân viên đến hóa đơn và phản hồi.
- Xây dựng thành công hệ thống REST API trung tâm trên nền tảng Nodejs và Expressjs, kết nối cơ sở dữ liệu MySQL và cung cấp đầy đủ các phương thức HTTP cho các ứng dụng client.
- Triển khai đồng bộ 3 phân hệ ứng dụng giao diện người dùng:
- Web User (Reactjs) với đầy đủ quy trình mua sắm, thanh toán và quản lý đơn hàng.
- Web Admin (Reactjs) hỗ trợ quản lý danh mục món ăn, xử lý chốt đơn/hủy đơn và thống kê.
- Mobile App (React Native) đa nền tảng tích hợp các kỹ thuật hiện đại như tải trang Lazy load, cuộn vô tận Infinite Scroll, khôi phục mật khẩu qua mã xác nhận email, đánh giá sản phẩm kèm hình ảnh tải lên từ thiết bị.
- Thiết lập các quy tắc nghiệp vụ chặt chẽ: chỉ cho phép hủy đơn khi đơn hàng chưa được xác nhận; chỉ cho phép đánh giá và chấm điểm món ăn khi đơn hàng đã chuyển sang trạng thái hoàn tất.
- Về mặt giải pháp, đồ án đã hiện thực hóa việc phân tách kiến trúc rõ ràng giữa MVC (cho backend và web) và MVVM (cho ứng dụng di động sử dụng Observer pattern), tạo nền tảng cho việc mở rộng và bảo trì hệ thống phần mềm hướng dịch vụ.
Hạn chế và hướng nghiên cứu tiếp
- Hạn chế: Theo tự đánh giá của nhóm tác giả trong phần lời cảm ơn, do vốn kiến thức và khả năng tiếp thu thực tế còn bỡ ngỡ nên bài báo cáo và sản phẩm khó tránh khỏi những thiếu sót và một số điểm chưa hoàn toàn chính xác trong quá trình triển khai hệ thống.
- Hướng nghiên cứu và phát triển tiếp: Dựa trên phạm vi đồ án môn học, các hướng hoàn thiện tiếp theo bao gồm việc tối ưu hóa hiệu năng các API endpoints, hoàn thiện sâu hơn các biểu đồ thống kê chuyên sâu cho Web Admin, mở rộng tích hợp các cổng thanh toán trực tuyến thực tế (thay vì xử lý nội bộ) và tăng cường bảo mật cho quy trình xác thực API giữa client và server.
Giá trị tham khảo
Đồ án là tài liệu tham khảo hữu ích cho:
- Sinh viên ngành Công nghệ Thông tin, Kỹ thuật Phần mềm, Hệ thống Thông tin: Tham khảo cấu trúc báo cáo đồ án môn học "Phát triển phần mềm hướng dịch vụ" hoặc các môn học liên quan đến Lập trình Web/Mobile nâng cao.
- Người nghiên cứu xây dựng hệ thống thương mại điện tử/F&B: Tham khảo thiết kế lược đồ cơ sở dữ liệu quan hệ gồm 13 bảng chuẩn hóa cho bài toán đặt món ăn trực tuyến.
- Lập trình viên phát triển ứng dụng Full-stack: Tham khảo kiến trúc kết hợp giữa ngăn xếp Expressjs/Nodejs/MySQL ở phía máy chủ với Reactjs và React Native ở phía giao diện người dùng, đặc biệt là cách áp dụng mô hình MVVM và xử lý các luồng tương tác di động (Lazy load, Infinite Scroll, bình luận đính kè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 cho khách hàng?
Hệ thống hỗ trợ 3 phương thức thanh toán được định nghĩa tại bảng payments và hiển thị trên giao diện thanh toán của Web/Mobile, bao gồm: Ví điện tử, Thẻ ghi nợ và Thanh toán khi nhận hàng (COD). Ngoài ra, khách hàng có thể nhập thêm ghi chú cho nhân viên khi đặt món.
2. Điều kiện để khách hàng có thể hủy đơn hàng hoặc thực hiện đánh giá món ăn là gì?
Theo quy tắc nghiệp vụ trong hệ thống:
- Khách hàng chỉ có thể hủy đơn hàng khi đơn hàng đang ở trạng thái chờ xử lý (chưa được nhân viên xác nhận). Khi đơn hàng đã được xác nhận, khách hàng không thể tự hủy đơn.
- Khách hàng chỉ có thể đánh giá (vote sao đỏ, nhập bình luận và tải ảnh từ thiết bị) đối với những món ăn thuộc đơn hàng đã ở trạng thái hoàn tất và chưa được đánh giá trước đó.
3. Quy trình xử lý khi người dùng quên mật khẩu trên ứng dụng di động diễn ra như thế nào?
Tại màn hình Quên mật khẩu trên ứng dụng mobile, người dùng nhập tên tài khoản cần lấy lại mật khẩu và bấm "Tiếp theo". Hệ thống sẽ tạo và gửi mã xác nhận (OTP) thông qua email đã đăng ký của tài khoản đó để người dùng xác thực và thiết lập lại mật khẩu mới.
4. Mô hình MVVM được áp dụng như thế nào trên ứng dụng di động của hệ thống?
Trên ứng dụng di động (React Native), mô hình MVVM được phân tách thành 3 thành phần: View (giao diện hiển thị, nhận tương tác chủ động qua data binding và command), Model (đối tượng thao tác dữ liệu) và ViewModel (lớp trung gian chứa mã lệnh data binding, giao tiếp với View qua mẫu thiết kế Observer pattern theo quan hệ một-nhiều mà không cần biết trực tiếp về View).
5. Nhóm tác giả đã sử dụng những công nghệ nào để xây dựng hệ thống?
Hệ thống được phát triển với ngăn xếp công nghệ gồm: Nodejs và framework Expressjs cho máy chủ dịch vụ REST API; MySQL cho hệ quản trị cơ sở dữ liệu; thư viện Reactjs cho các ứng dụng Web (Web User và Web Admin); và framework React Native cho ứng dụng di động đa nền tảng (Android/iOS).
Kết luận
Báo cáo đồ án môn học "Phát triển phần mềm hướng dịch vụ" của Nhóm 10 (Khoa CNTT - Học viện Công nghệ Bưu chính Viễn thông TP.HCM) đã trình bày hoàn chỉnh quy trình thiết kế và xây dựng hệ thống phần mềm quản lý và kinh doanh thức ăn nhanh. Hệ thống đã triển khai thành công kiến trúc REST API trung tâm với Nodejs, Expressjs và MySQL, kết nối đồng bộ với 3 ứng dụng giao diện gồm Web User, Web Admin (Reactjs) và Mobile App (React Native). Các quy trình nghiệp vụ mua bán, quản lý thực đơn, hủy đơn có điều kiện, đánh giá sản phẩm kèm hình ảnh và xác thực người dùng đã được hiện thực hóa đầy đủ theo đúng mục tiêu môn học.