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

Trong xu thế phát triển của khoa học công nghệ và sự gia tăng tốc độ đô thị hóa tại Việt Nam, thói quen sinh hoạt và ăn uống của người dân tại các đô thị hiện đại đã có những chuyển dịch rõ rệt. Người tiêu dùng ngày càng có nhu cầu sử dụng các giải pháp đặt món và giao hàng tận nơi nhằm tiết kiệm thời gian cũng như công sức so với phương thức mua hàng trực tiếp truyền thống.

Để làm rõ bối cảnh thực tiễn của đề tài, tác giả đã dẫn chứng các nguồn số liệu khảo sát thị trường:

  • Theo ước tính của Tập đoàn nghiên cứu thị trường Euromonitor International, quy mô thị trường giao đồ ăn trực tuyến tại Việt Nam đạt giá trị khoảng 33 triệu USD và duy trì xu hướng tiếp tục tăng trưởng.
  • Theo kết quả bản "Khảo sát thị trường về nhu cầu tiêu dùng ngành ẩm thực Việt Nam" do tổ chức Kantar thực hiện vào năm 2020, có tới 43% người dân tại Thành phố Hồ Chí Minh và 34% người dân tại Hà Nội đặt đồ ăn trực tuyến với tần suất tối thiểu 1 lần/tuần.

Bên cạnh đó, các ứng dụng đặt món trực tuyến mang lại lợi thế về khả năng tiếp cận thực đơn phong phú từ nhiều cửa hàng, đồng thời kích thích sức mua thông qua các chương trình hỗ trợ giá, voucher giảm giá và ưu đãi chi phí vận chuyển. Xuất phát từ bối cảnh đó, đề tài "Xây dựng ứng dụng đặt đồ ăn online" (tên ứng dụng: BAC-FOOD) được tác giả triển khai nhằm giải quyết bài toán cung cấp nền tảng số hỗ trợ người dùng tìm kiếm, lựa chọn món ăn theo sở thích cá nhân và hỗ trợ đơn vị kinh doanh tối ưu hóa quy trình quản lý bán hàng.

Mục tiêu và nhiệm vụ nghiên cứu của đề tài bao gồm:

  1. Nghiên cứu tổng quan nhu cầu thị trường, xác định yêu cầu hệ thống (yêu cầu chức năng và yêu cầu phi chức năng) cho ứng dụng đặt đồ ăn.
  2. Ứng dụng các công cụ phân tích và thiết kế hệ thống theo ngôn ngữ mô hình hóa UML (biểu đồ ca sử dụng, biểu đồ hoạt động, biểu đồ trình tự, biểu đồ thành phần) để chuẩn hóa luồng nghiệp vụ.
  3. Lựa chọn công nghệ, thiết lập môi trường phát triển để xây dựng và cài đặt hoàn thiện ứng dụng di động BAC-FOOD.
  • Đối tượng nghiên cứu: Quy trình đặt món ăn trực tuyến và hệ thống phần mềm quản lý bán đồ ăn (bao gồm phân hệ khách hàng và phân hệ quản trị/nhân viên).
  • Phạm vi nghiên cứu: Đề tài tập trung vào việc thiết kế và lập trình ứng dụng di động đa nền tảng, cơ sở dữ liệu thời gian thực và quản trị đơn hàng, danh mục món ăn áp dụng cho người tiêu dùng và các cơ sở kinh doanh dịch vụ ăn uống.

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

Tác giả đã tổng hợp các khái niệm, mô hình kiến trúc và công nghệ nền tảng phục vụ việc xây dựng ứng dụng:

  • Mô hình kiến trúc MVC (Model – View – Controller): Mô hình phân tách phần mềm thành 3 thành phần độc lập:
    • Model: Tương đương với tầng truy xuất dữ liệu (Data Access Layer) và tầng xử lý nghiệp vụ (Business Logic Layer) trong kiến trúc Three-Tier.
    • View: Tương đương với tầng giao diện (Presentation Layer), đảm nhận việc hiển thị dữ liệu cho người dùng.
    • Controller: Tầng trung gian điều phối, tiếp nhận yêu cầu từ View, gọi dữ liệu từ Model và trả kết quả hiển thị về cho View.
  • Ngôn ngữ lập trình Dart: Ngôn ngữ hướng đối tượng dựa trên lớp, mã nguồn mở do Google phát triển (được chuẩn hóa theo ECMA-408), sở hữu cơ chế gom rác tự động (garbage-collected), cú pháp tương đồng hệ C/Java/JavaScript và hỗ trợ xử lý tác vụ đồng thời thông qua cơ chế phân lập (Isolate).
  • Framework Flutter: Bộ công cụ phát triển phần mềm giao diện đa nền tảng (cross-platform) từ Google, sử dụng hệ thống Widget phong phú và hỗ trợ tính năng hot-reload giúp hiển thị nhanh các thay đổi mã nguồn.
  • Hệ quản trị cơ sở dữ liệu Firebase Realtime Database: Dịch vụ cơ sở dữ liệu đám mây NoSQL theo thời gian thực của Google, cung cấp SDK hỗ trợ lưu trữ, tự động đồng bộ dữ liệu giữa máy khách và đám mây, tích hợp bộ nhớ đệm cục bộ (local cache) khi thiết bị ngoại tuyến (offline).
  • Môi trường phát triển tích hợp (IDE): Android Studio (dựa trên nền tảng JetBrains IntelliJ IDEA, tích hợp hệ thống build tự động Gradle) cùng bộ công cụ phát triển Java JDK (Java Development Kit) cấu hình trên hệ điều hành Windows.
  • Phương pháp nghiên cứu: Phương pháp phân tích - tổng hợp tài liệu, phương pháp phân tích thiết kế hệ thống hướng đối tượng bằng UML (Unified Modeling Language), và phương pháp thực nghiệm xây dựng phần mềm.
  • Nguồn dữ liệu: Dữ liệu khảo sát từ các báo cáo thị trường (Euromonitor, Kantar 2020) kết hợp với tập dữ liệu cấu trúc thực đơn, danh mục, thông tin tài khoản và đơn hàng được thiết lập trên Firebase.

Thiết kế kiến trúc và triển khai hệ thống

1. Phân quyền và mô hình hóa chức năng (UML)

Hệ thống BAC-FOOD phân chia tác nhân tham gia thành hai nhóm chính:

STT Tác nhân (Actor) Vai trò và quyền hạn trong hệ thống
01 Khách hàng (User) Nhóm người dùng sử dụng hệ thống để tìm kiếm thông tin món ăn, quản lý giỏ hàng cá nhân, tiến hành đặt hàng, theo dõi tình trạng đơn hàng và gửi liên hệ phản hồi.
02 Quản trị viên (Admin) & Nhân viên Nhóm người quản lý hệ thống. Thực hiện các quyền của người dùng, đồng thời được cấp quyền quản lý toàn bộ hệ thống: quản lý danh mục, quản lý sản phẩm, quản lý đơn hàng (duyệt, cập nhật trạng thái đơn), quản trị và phân quyền tài khoản.

Hệ thống được thiết kế với các biểu đồ UML chi tiết bao gồm: Biểu đồ Use Case tổng quát, Biểu đồ Use Case cho từng phân hệ, Biểu đồ hoạt động (Activity Diagram), Biểu đồ trình tự (Sequence Diagram) và Biểu đồ thành phần (Component Diagram). Trong Biểu đồ thành phần, hệ thống biểu diễn mối quan hệ phụ thuộc vật lý giữa các module, sử dụng công cụ như Rational Rose để ánh xạ các lớp vào các tệp thành phần vật lý và định nghĩa các Stereotype.

2. Các yêu cầu phi chức năng và ràng buộc kỹ thuật

Tác giả xác định các tiêu chí chất lượng cụ thể mà hệ thống phần mềm phải đáp ứng:

Nhóm yêu cầu phi chức năng Các chỉ tiêu kỹ thuật được quy định trong đồ án
Tính tin cậy (Reliability) Thông tin sản phẩm phải đảm bảo tính xác thực. Khi xảy ra sự cố làm ngừng vận hành, hệ thống phải đảm bảo khả năng phục hồi 100% trong vòng 24 giờ.
Tính hiệu năng (Performance) - Thời gian tối đa trả về kết quả tìm kiếm trong hệ thống là 10 giây.
- Thời gian xử lý yêu cầu từ người dùng tối đa là 5 giây.
- Khả năng chịu tải đảm bảo hệ thống vận hành ổn định khi có nhiều người truy cập đồng thời.
Tính hữu dụng (Usability) Giao diện thân thiện, dễ nhìn, dễ thao tác; tự động sao lưu dữ liệu sau mỗi 12 giờ để ngăn ngừa sự cố mất mát thông tin đơn hàng và người dùng.
Tính bảo mật (Security) Bảo vệ thông tin cá nhân (họ tên, số điện thoại, địa chỉ nhận hàng); mật khẩu người dùng phải được mã hóa và không được phép sao chép; hỗ trợ cơ chế khôi phục dữ liệu nhanh.
Tính tương thích (Compatibility) Tương thích với quy trình nghiệp vụ thủ công trước đây; tương thích với hệ điều hành Windows trên các máy tính quản trị tại cửa hàng/nhà hàng.
Tính văn hóa Giao diện và ngôn ngữ hướng tới đối tượng người dùng tại Việt Nam.

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

Chương 1: Tổng quan dự án

Chương này trình bày lý do lựa chọn đề tài xuất phát từ nhu cầu thực tiễn của thị trường giao đồ ăn trực tuyến tại Việt Nam. Tác giả xác định phạm vi, mục tiêu dự án và khảo sát các công nghệ dự kiến sử dụng (ngôn ngữ Dart, mô hình MVC, IDE Android Studio, framework Flutter).

Nội dung trọng tâm của chương là việc chi tiết hóa hai nhóm yêu cầu hệ thống:

  1. Yêu cầu chức năng: Phân định rõ nhiệm vụ của khách hàng (tìm kiếm theo tên/danh mục, xem chi tiết món ăn, quản lý giỏ hàng, tạo đơn hàng gồm thông tin họ tên, số điện thoại, địa chỉ, email, số lượng, giá tiền, theo dõi đơn, đăng ký, đăng nhập) và nhiệm vụ của nhân viên/quản trị viên (quản lý chi tiết đơn hàng, quản lý danh mục, quản lý sản phẩm, quản lý tài khoản).
  2. Yêu cầu phi chức năng: Thiết lập hệ thống tiêu chuẩn kỹ thuật gồm độ tin cậy, hiệu năng xử lý, tính hữu dụng, tính bảo mật, tính tương thích và tính văn hóa.

Chương 2: Phân tích và thiết kế hệ thống

Chương 2 là phần trọng tâm về kỹ thuật phần mềm, tập trung mô hình hóa chi tiết toàn bộ các luồng nghiệp vụ của hệ thống thông qua biểu đồ ca sử dụng và các bảng đặc tả Use Case:

  • Chức năng đăng nhập: Đặc tả luồng xử lý đối với khách hàng chưa có tài khoản (chuyển hướng sang form đăng ký thông tin hợp lệ) và khách hàng đã có tài khoản (xác thực tên đăng nhập/mật khẩu, điều hướng về trang chủ hoặc kích hoạt luồng lấy lại mật khẩu khi quên).
  • Chức năng mua hàng: Đặc tả luồng sự kiện khách hàng tìm kiếm, lọc danh mục, xem chi tiết món ăn, thêm vào giỏ hàng, cập nhật số lượng món ăn và lựa chọn hình thức thanh toán đơn hàng.
  • Chức năng quản lý sản phẩm: Đặc tả quyền hạn của Admin/nhân viên trong việc truy xuất danh sách món ăn, thực hiện các tác vụ thêm mới món ăn, chỉnh sửa thông tin giá/mô tả hoặc xóa sản phẩm khỏi cơ sở dữ liệu.
  • Chức năng quản lý danh mục: Cho phép người quản trị thiết lập và phân loại các nhóm món ăn trong hệ thống thông qua các thao tác thêm, sửa, xóa danh mục.
  • Chức năng quản lý đơn hàng: Mô tả quy trình nhân viên tiếp nhận đơn đặt hàng từ hệ thống, kiểm tra yêu cầu, chuyển đổi trạng thái đơn, chuẩn bị món ăn, liên hệ khách hàng qua điện thoại để xác nhận và điều phối người giao hàng bên ngoài.
  • Chức năng quản lý người dùng: Cung cấp công cụ cho Quản trị viên xem danh sách thành viên, cập nhật thông tin, cấp mới, phân quyền sử dụng hoặc cấm/mở khóa tài khoản nhân viên và khách hàng.
  • Thiết kế sơ đồ lớp và Biểu đồ thành phần: Mô tả các thành phần vật lý của hệ thống, cơ chế khai báo phụ thuộc và ánh xạ cấu trúc lớp vào các module chương trình.

Chương 3: Cài đặt chương trình

Chương 3 trình bày các bước thiết lập môi trường kỹ thuật và kết quả xây dựng giao diện thực tế của ứng dụng BAC-FOOD:

  • Cài đặt công nghệ: Hướng dẫn tải và cấu hình Java JDK (x64 MSI Installer), thiết lập biến môi trường Path trong System Variables của Windows, cấu hình Android Studio và kết nối dịch vụ Firebase Realtime Database.
  • Kết quả thực hiện giao diện:
    • Giao diện trang chủ: Hiển thị thanh tìm kiếm, danh sách món ăn nổi bật và các phân mục chức năng chính.
    • Giao diện đăng nhập/đăng ký: Form xác thực tài khoản người dùng và liên kết tạo tài khoản mới.
    • Giao diện thêm danh mục: Màn hình dành cho quản trị viên tạo mới các nhóm danh mục món ăn.
    • Giao diện thêm món ăn: Form nhập liệu chi tiết thông tin món ăn mới (ràng buộc không được bỏ trống các trường dữ liệu bắt buộc).
    • Giao diện menu ứng dụng: Menu trượt (navigation drawer) điều hướng các tính năng khi người dùng nhấn vào biểu tượng 3 gạch tại trang chủ.
    • Giao diện giỏ hàng: Màn hình thống kê danh sách món đã chọn, cho phép tùy chỉnh số lượng và hiển thị tổng tiền thanh toán.
    • Giao diện đơn hàng: Màn hình hiển thị lịch sử các đơn hàng đã đặt, thông tin hóa đơn và mốc thời gian đặt món để người dùng tiện theo dõi.

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

1. Kết quả thực hiện

  • Xây dựng hoàn chỉnh ứng dụng di động đặt đồ ăn trực tuyến BAC-FOOD trên nền tảng Flutter và ngôn ngữ Dart, kết nối cơ sở dữ liệu NoSQL Firebase Realtime Database.
  • Thiết kế và hoàn thiện đầy đủ 7 màn hình chức năng chính đáp ứng yêu cầu người dùng và người quản trị (Trang chủ, Đăng nhập, Thêm danh mục, Thêm món ăn, Menu ứng dụng, Giỏ hàng, Quản lý đơn hàng).
  • Thiết lập hệ thống tài liệu phân tích thiết kế phần mềm chi tiết với 7 bảng đặc tả Use Case, Biểu đồ Use Case tổng quát/chi tiết, Biểu đồ hoạt động, Biểu đồ trình tự và Biểu đồ thành phần theo chuẩn UML.

2. Đóng góp của đề tài

  • Cung cấp một giải pháp phần mềm cụ thể nhằm tự động hóa quy trình đặt món và quản lý bán đồ ăn trực tuyến với chi phí vận hành thấp, tận dụng kiến trúc serverless của Firebase.
  • Đề xuất quy trình xử lý đơn hàng kết hợp giữa hệ thống số và nghiệp vụ thực tế (tiếp nhận đơn trên app, nhân viên xác nhận qua điện thoại và thuê đơn vị giao hàng ngoài).

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

  • Hạn chế:
    • Do thời gian nghiên cứu có hạn và giới hạn về kiến thức của sinh viên trong bước đầu tiếp cận thực tế, ứng dụng vẫn còn một số thiếu sót trong việc tối ưu hóa trải nghiệm người dùng và xử lý các luồng nghiệp vụ phức tạp.
    • Chưa tích hợp trực tiếp các cổng thanh toán điện tử tự động, quy trình giao hàng vẫn phụ thuộc vào việc điều phối thủ công với đơn vị vận chuyển bên ngoài.
  • Hướng phát triển trong tương lai:
    • Nâng cấp và hoàn thiện các chức năng nâng cao cho hệ thống quản trị.
    • Mở rộng thêm các phương thức thanh toán trực tuyến đa dạng và tự động hóa quy trình theo dõi vị trí giao hàng theo thời gian thực.

Giá trị tham khảo

Đồ án tốt nghiệp này mang lại giá trị tham khảo thiết thực cho:

  • Sinh viên ngành Công nghệ thông tin / Công nghệ phần mềm: Là tài liệu tham khảo trực quan về cấu trúc một đồ án tốt nghiệp xây dựng ứng dụng di động, phương pháp mô hình hóa hướng đối tượng bằng UML (đặc tả use case, sơ đồ tuần tự, sơ đồ hoạt động, sơ đồ thành phần).
  • Lập trình viên mới tiếp cận Flutter và Firebase: Cung cấp tài liệu thực hành về cách xây dựng ứng dụng di động đa nền tảng bằng ngôn ngữ Dart, tổ chức mô hình MVC và kết nối đồng bộ cơ sở dữ liệu thời gian thực NoSQL qua Firebase Realtime Database.

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

1. Ứng dụng BAC-FOOD sử dụng hệ quản trị cơ sở dữ liệu nào và cơ chế đồng bộ dữ liệu diễn ra ra sao?
Ứng dụng sử dụng cơ sở dữ liệu thời gian thực Firebase (Firebase Realtime Database) của Google. Đây là cơ sở dữ liệu NoSQL hoạt động trên nền tảng đám mây, cho phép lưu trữ và tự động đồng bộ hóa dữ liệu giữa các máy khách trong thời gian thực. Khi thiết bị ngoại tuyến (offline), SDK của Firebase sẽ lưu trữ dữ liệu vào bộ nhớ đệm cục bộ (local cache) trên thiết bị và tự động đồng bộ lên đám mây ngay khi thiết bị có kết nối mạng trở lại.

2. Các chỉ số kỹ thuật về hiệu năng và phục hồi trong yêu cầu phi chức năng của đồ án được quy định như thế nào?
Đồ án quy định: thời gian trả về kết quả tìm kiếm tối đa không quá 10 giây; thời gian xử lý yêu cầu người dùng tối đa không quá 5 giây; hệ thống phải đảm bảo khả năng phục hồi 100% trong vòng 24 giờ khi xảy ra sự cố ngừng vận hành; đồng thời hệ thống cần tự động sao lưu dữ liệu sau mỗi 12 giờ.

3. Kiến trúc phần mềm của ứng dụng được xây dựng theo mô hình nào?
Ứng dụng được thiết kế theo mô hình MVC (Model – View – Controller), tương ứng với cấu trúc 3 tầng (Three-Tier): tầng Model tương đương tầng truy xuất dữ liệu (Data Access) và tầng nghiệp vụ (Business Logic); tầng View tương đương tầng giao diện (Presentation); tầng Controller đóng vai trò điều phối luồng dữ liệu giữa Model và View.

4. Quy trình xử lý đơn hàng của nhân viên được thực hiện qua các bước nào?
Quy trình gồm 6 bước: (1) Quản trị viên/nhân viên truy cập mục quản lý đơn hàng; (2) Hệ thống hiển thị danh sách đơn; (3) Nhân viên xem chi tiết các yêu cầu trong đơn; (4) Theo dõi và cập nhật trạng thái đơn; (5) Nhân viên thực hiện xử lý vật lý (lấy sản phẩm, gọi điện thoại cho khách hàng để xác nhận đơn, thuê người giao hàng bên ngoài để chuyển đồ ăn); (6) Kết thúc ca sử dụng.

5. Cơ sở dữ liệu và căn cứ thị trường nào được tác giả sử dụng để chứng minh tính cấp thiết của ứng dụng đặt đồ ăn?
Tác giả sử dụng số liệu từ Tập đoàn nghiên cứu thị trường Euromonitor International (thị trường giao đồ ăn trực tuyến tại Việt Nam đạt quy mô 33 triệu USD) và báo cáo "Khảo sát thị trường về nhu cầu tiêu dùng ngành ẩm thực Việt Nam" năm 2020 của Kantar (cho thấy 43% người dân TP.HCM và 34% người dân Hà Nội đặt đồ ăn trực tuyến ít nhất 1 lần/tuần).


Kết luận

Đồ án tốt nghiệp "Xây dựng ứng dụng đặt đồ ăn online" của tác giả Hoàng Văn Bắc đã hoàn thành mục tiêu nghiên cứu và phát triển phần mềm đặt món ăn trực tuyến BAC-FOOD. Hệ thống được thiết kế bài bản theo mô hình MVC, chuẩn hóa nghiệp vụ bằng các biểu đồ UML và triển khai thành công trên nền tảng framework Flutter, ngôn ngữ Dart và Firebase Realtime Database. Kết quả của đồ án cung cấp một giải pháp ứng dụng di động khả thi, phục vụ nhu cầu đặt món của người tiêu dùng và hỗ trợ công tác quản lý đơn hàng cho các cơ sở kinh doanh ăn uống.