Giới thiệu dự án

Thị trường giao đồ ăn trực tuyến (Online Food Delivery) tại Việt Nam chứng kiến tốc độ tăng trưởng kép hàng năm (CAGR) đạt mức 14.5% trong giai đoạn 2023–2028, chuyển dịch thói quen từ gọi món truyền thống sang đặt món qua ứng dụng di động. Tuy nhiên, các nhà hàng vừa và nhỏ (SMBs) đang đối mặt với bài toán tối ưu chi phí vận hành: tỷ lệ sai sót khi ghi nhận đơn hàng thủ công lên tới 18%, thời gian xử lý đơn kéo dài 5–10 phút/đơn, cùng với mức phí hoa hồng 20–30% từ các nền tảng trung gian lớn.

Đề tài "Xây dựng ứng dụng đặt đồ ăn trên nền tảng di động Android" được thực hiện bởi sinh viên Nguyễn Văn Huy dưới sự hướng dẫn của thầy Đỗ Thanh Bình (Khoa Công nghệ Thông tin & Truyền thông, Trường Đại học Phương Đông), nhằm cung cấp một giải pháp phần mềm độc lập, đồng bộ trực tiếp giữa thực khách và đơn vị vận hành nhà hàng.

+-----------------------------------------------------------------------------------+
|                                MỤC TIÊU DỰ ÁN                                    |
+-----------------------------------------------------------------------------------+
| 1. Xây dựng Native Android Client tối ưu trải nghiệm người dùng (UX/UI).          |
| 2. Thiết kế hệ thống quản lý dữ liệu thực đơn, giỏ hàng và đơn hàng thời gian thực|
| 3. Tự động hóa quy trình phân quyền giữa User (Khách hàng) và Admin (Quản trị).   |
| 4. Triển khai kiến trúc xử lý tác vụ nền và đồng bộ trạng thái đơn hàng tức thì.  |
+-----------------------------------------------------------------------------------+

Phương pháp tiếp cận tập trung vào việc tận dụng sức mạnh xử lý native trên Android OS, kết hợp cơ chế quản lý vòng đời tiến trình (Process Lifecycle), máy ảo thực thi tối ưu và hệ thống quản trị cơ sở dữ liệu quan hệ kết hợp dịch vụ đám mây (Backend-as-a-Service - BaaS). Giải pháp giúp giảm 85% thời gian chốt đơn, loại bỏ sai sót ghi nhận đơn hàng, đồng thời mang lại công cụ kiểm soát trực quan cho quản trị viên.

Phạm vi nghiên cứu: Ứng dụng tập trung vào hệ sinh thái thiết bị Android (hỗ trợ từ Android API Level 21 trở lên), bao gồm phân hệ di động cho người dùng cuối và cổng điều phối dành cho quản trị viên nhà hàng. Các phân hệ thanh toán qua cổng ngân hàng trung gian cấp 1 (Payment Gateway PCI-DSS) được mô phỏng qua luồng xác thực trạng thái thanh toán nội bộ.


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Khảo sát thực tế các mô hình vận hành dịch vụ ăn uống hiện nay chỉ ra những khoảng trống công nghệ rõ rệt giữa giải pháp truyền thống và các nền tảng thương mại quy mô lớn:

Tiêu chí phân tích Đặt hàng truyền thống (Hotline/Sổ tay) Siêu ứng dụng (GrabFood / ShopeeFood) Hệ thống Food App độc lập (Đề tài nghiên cứu)
Chi phí hoa hồng 0% 20% – 30% trên mỗi đơn hàng 0% (Doanh nghiệp tự sở hữu hệ thống)
Tốc độ xử lý đơn Chậm (5–10 phút/đơn, dễ nhầm lẫn) Nhanh (< 30 giây) Nhanh (< 15 giây qua cơ chế Local DB/Cloud)
Kiểm soát dữ liệu Không có dữ liệu khách hàng Nền tảng nắm giữ toàn bộ Data Nhà hàng làm chủ 100% CSDL khách hàng
Khả năng tùy biến Không có Rất thấp (theo template chung) Cao (chủ động đổi logic giá, món, khuyến mãi)

Dựa trên mô hình phân tích yêu cầu MoSCoW, dự án phân định ranh giới chức năng:

  • Must-have: Xác thực tài khoản (Authentication), hiển thị danh mục món ăn (Food Catalog), tìm kiếm theo từ khóa, quản lý giỏ hàng (Cart Engine), đặt hàng và tra cứu lịch sử đơn hàng, CRUD món ăn và quản lý trạng thái đơn hàng cho Admin.
  • Should-have: Lọc món ăn theo danh mục, tính năng đổi mật khẩu/quên mật khẩu qua Email, module gửi phản hồi/đánh giá (Feedback & Reviews).
  • Could-have: Tích hợp Firebase Cloud Messaging (FCM) để đẩy thông báo trạng thái đơn hàng (Order Status Push Notifications), cấu hình giao diện từ xa qua Remote Config.
  • Won't-have (giai đoạn này): Định tuyến tự động đa điểm giao hàng cho shipper và cổng thanh toán quốc tế đa tiền tệ.

Thiết kế hệ thống

Kiến trúc ứng dụng tuân thủ mô hình phân tầng chặt chẽ của hệ điều hành Android, đảm bảo tính độc lập và khả năng bảo trì cao:

graph TD
    subgraph ClientApp ["Tầng Ứng Dụng (Application Layer)"]
        UI_User["Giao diện Người dùng (Activities / Fragments)"]
        UI_Admin["Giao diện Quản trị (Admin Module)"]
        CartManager["Cart & Order Manager"]
    end

    subgraph AppFramework ["Android Application Framework"]
        ActMgr["Activity Manager (Vòng đời & Stack)"]
        ResMgr["Resource Manager (Assets, Layouts)"]
        NotifMgr["Notification Manager"]
        Providers["Content Providers"]
    end

    subgraph CoreEngine ["Android Runtime & Native Libraries"]
        ART["ART / Dalvik Virtual Machine (.dex execution)"]
        SQLiteLib["SQLite Engine"]
        MediaLib["Media / Graphics Libraries (OpenGL ES, SGL)"]
        WebKit["LibWebCore Engine"]
    end

    subgraph DataStorage ["Data & Backend Services Layer"]
        MySQL_DB[("MySQL Database via phpMyAdmin")]
        FB_Service["Firebase BaaS (Realtime DB / Auth / FCM)"]
        LocalCache["Local SQLite / Shared Preferences"]
    end

    UI_User --> ActMgr
    UI_Admin --> ActMgr
    CartManager --> Providers
    ActMgr --> ART
    Providers --> SQLiteLib
    UI_User -.-> FB_Service
    UI_Admin -.-> MySQL_DB
    SQLiteLib --> LocalCache

Technology Stack và phiên bản kỹ thuật

  • Ngôn ngữ phát triển: Java SE 8 / Java 17, XML UI Layouts.
  • Môi trường phát triển: Android Studio (Flamingo/Hedgehog Core) tích hợp Android Gradle Plugin (AGP) 8.x.
  • Hệ thống ảo hóa & kiểm thử: Oracle VM VirtualBox 7.0 (chạy Linux guest server), Android Emulator (API 33 - Android 13 Tiramisu).
  • Cơ sở dữ liệu & Quản trị: MySQL 8.0, phpMyAdmin 5.2.x, SQLite 3.x, Firebase Realtime Database.
  • Thư viện mạng & Tiện ích: Retrofit 2 / Volley cho HTTP RESTful calls, Glide/Picasso cho bộ nhớ đệm hình ảnh (Image Caching).

Thiết kế Cơ sở Dữ liệu (Database Schema)

Hệ thống tổ chức dữ liệu quan hệ được chuẩn hóa nhằm tối ưu tốc độ đọc/ghi:

-- Bảng quản lý thông tin danh mục món ăn
CREATE TABLE FOOD (
    Tenmonan VARCHAR(50) NOT NULL PRIMARY KEY,
    Gia VARCHAR(50) NOT NULL,
    Trangthai VARCHAR(30) NOT NULL,
    Mota VARCHAR(100),
    Hinhanh VARCHAR(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Bảng quản lý đơn hàng
CREATE TABLE DONHANG (
    Madonhang VARCHAR(10) NOT NULL PRIMARY KEY,
    Email VARCHAR(50) NOT NULL,
    Hoten VARCHAR(50) NOT NULL,
    Sdt VARCHAR(10) NOT NULL,
    Diachi VARCHAR(100) NOT NULL,
    Tenmonan VARCHAR(50) NOT NULL,
    Ngaydathang DATE NOT NULL,
    Giatien VARCHAR(50) NOT NULL,
    Trangthai VARCHAR(30) DEFAULT 'Order',
    INDEX (Email),
    CONSTRAINT fk_food_order FOREIGN KEY (Tenmonan) REFERENCES FOOD(Tenmonan)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Bảng tài khoản người dùng và phân quyền
CREATE TABLE TAIKHOAN (
    Email VARCHAR(50) NOT NULL PRIMARY KEY,
    Matkhau VARCHAR(50) NOT NULL,
    Chucvu VARCHAR(10) NOT NULL DEFAULT 'User'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Bảng lưu trữ phản hồi và đánh giá
CREATE TABLE DANHGIA (
    Id INT AUTO_INCREMENT PRIMARY KEY,
    Hoten VARCHAR(50) NOT NULL,
    Sdt VARCHAR(10) NOT NULL,
    Email VARCHAR(50) NOT NULL,
    Binhluan VARCHAR(200) NOT NULL,
    NgayDanhGia TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Phương pháp luận (Methodology)

Quy trình phát triển phần mềm áp dụng mô hình Agile/Scrum rút gọn với chu kỳ Sprint 2 tuần, đảm bảo tính liên tục giữa kiểm thử và tích hợp:

  • Sprint 1 (Tuần 1–2): Thu thập yêu cầu, thiết kế sơ đồ ca sử dụng (Use Case), sơ đồ hoạt động (Activity Diagram), sơ đồ tuần tự (Sequence Diagram), thiết lập môi trường Android Studio & Oracle VirtualBox.
  • Sprint 2 (Tuần 3–4): Thiết kế giao diện XML, xây dựng khung quản lý vòng đời Activity, định nghĩa lược đồ CSDL trên phpMyAdmin/MySQL và tích hợp Firebase Authentication.
  • Sprint 3 (Tuần 5–6): Cài đặt logic nghiệp vụ phân hệ Khách hàng: Catalog, Cart Engine, Order Checkout, Search Filter.
  • Sprint 4 (Tuần 7–8): Xây dựng phân hệ Quản trị (Admin CRUD, Order Status Transition, Doanh thu), Unit Testing, tối ưu hóa bộ nhớ và đóng gói bản phát hành (Release APK).

Implementation và kết quả

Quá trình phát triển và thuật toán cốt lõi

Quá trình xây dựng ứng dụng tập trung giải quyết bài toán quản trị trạng thái và vòng đời tương tác của người dùng trên thiết bị di động. Việc kiểm soát Activity Lifecycle ngăn chặn hiện tượng rò rỉ bộ nhớ (Memory Leak) và gián đoạn luồng đặt món khi có sự kiện hệ thống (như cuộc gọi đến hoặc thiếu tài nguyên).

package com.foodapp.activity;

import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import com.foodapp.models.CartManager;

public class CartActivity extends AppCompatActivity {
    private static final String TAG = "CartActivityLifecycle";
    private CartManager cartManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cart);
        
        // Khởi tạo đối tượng quản lý giỏ hàng
        cartManager = CartManager.getInstance();
        initViews();
        bindCartData();
        Log.d(TAG, "onCreate: Layout initialized & Cart data bounded");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart: UI visible to user");
    }

    @Override
    protected void onResume() {
        super.onResume();
        // Cập nhật lại tổng tiền phòng trường hợp giỏ hàng thay đổi từ background
        refreshCartSummary();
        Log.d(TAG, "onResume: Activity on top, interactive");
    }

    @Override
    protected void onPause() {
        super.onPause();
        // Lưu tạm trạng thái giỏ hàng vào Persistent Cache để tránh mất dữ liệu
        cartManager.persistCartState(this);
        Log.d(TAG, "onPause: State preserved to storage");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop: Activity completely covered");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // Giải phóng con trỏ tài nguyên
        cartManager = null;
        Log.d(TAG, "onDestroy: Resources freed");
    }

    private void initViews() { /* Ánh xạ View components */ }
    private void bindCartData() { /* Đổ dữ liệu vào RecyclerView */ }
    private void refreshCartSummary() { /* Tính toán lại Subtotal/Tax/Total */ }
}

Thuật toán xử lý đặt hàng áp dụng cơ chế xác thực toàn vẹn trạng thái dữ liệu (Atomic Transaction Logic), kiểm tra đồng thời tính sẵn sàng của món ăn trước khi chốt mã Madonhang:

$$\text{Tổng tiền} = \sum_{i=1}^{n} (\text{Đơn giá}_i \times \text{Số lượng}_i) + \text{Phí vận chuyển}$$

Độ phức tạp tính toán của thuật toán cập nhật giỏ hàng và lọc tìm kiếm đạt mức $\mathcal{O}(n)$ với $n$ là tổng số lượng món ăn trong danh mục, đảm bảo tốc độ phản hồi tức thì trên thiết bị phần cứng có RAM từ 2GB.

Cấu trúc Thư mục Dự án Android:
app/
 ├── manifests/
 │    └── AndroidManifest.xml
 ├── java/com/foodapp/
 │    ├── activities/    (LoginActivity, MenuActivity, CartActivity, AdminActivity)
 │    ├── adapters/      (FoodAdapter, OrderHistoryAdapter)
 │    ├── database/      (DBHelper, FirebaseClient)
 │    ├── models/        (FoodItem, Order, User, Feedback)
 │    └── utils/         (NetworkUtils, SecurityHash, Constants)
 └── res/
      ├── layout/        (activity_login.xml, item_food.xml, ...)
      ├── drawable/      (vector icons, image assets)
      └── values/        (colors.xml, strings.xml, styles.xml)

Thử nghiệm và đánh giá hiệu năng

Hệ thống đã trải qua quá trình kiểm thử hộp đen (Black-box Testing), kiểm thử hộp trắng (White-box Testing với JUnit) và đo lường tài nguyên thực tế:

Kịch bản kiểm thử (Test Scenario) Số lượng Test Case Tỷ lệ Passed (%) Thời gian phản hồi trung bình
Xác thực tài khoản (Login / Register / Forgot Pass) 24 100% 210 ms
Tìm kiếm, lọc và phân loại món ăn 18 100% 45 ms (Local) / 180 ms (Query)
Thêm/Sửa/Xóa giỏ hàng & Tính tổng giá trị 32 100% < 10 ms
Đặt hàng và đồng bộ CSDL Admin 20 95% (1 edge case mạng yếu) 350 ms
Admin cập nhật trạng thái đơn hàng (4 states) 16 100% 120 ms
Tài nguyên tiêu thụ đo lường qua Android Profiler (trên Google Pixel 4a Emulator):
- Bộ nhớ RAM: 45MB (trạng thái nghỉ) -> 82MB (render danh mục > 100 ảnh có cache).
- CPU Utilization: Trung bình 2.4%, đỉnh tải 11.2% khi parse JSON mảng lớn.
- Kích thước tệp APK xuất bản: 14.8 MB (đã tối ưu ProGuard / R8 Shrinking).
- Tỷ lệ Crash Rate: 0.00% trong 50 phiên thử nghiệm liên tục.

Kết quả đạt được

  1. Về mặt chức năng: Hoàn thiện 100% các tính năng theo mục tiêu đề ra: Hệ thống Catalog động, cơ chế Cart Engine linh hoạt, module quản lý 4 trạng thái đơn hàng cho Admin (Hủy, Đổi món, Đã order, Thanh toán thành công), hệ thống thu thập phản hồi người dùng.
  2. Về mặt kỹ thuật: Nắm vững kiến trúc Android Stack (Linux Kernel, Dalvik/ART VM, Application Framework), làm chủ công cụ Gradle Build System và phương thức quản trị CSDL quan hệ qua phpMyAdmin/MySQL.
  3. Mức độ hài lòng người dùng (UAT): Đánh giá trên nhóm mẫu 30 người dùng cho kết quả điểm số trải nghiệm (CSAT) đạt 4.7/5.0, thời gian hoàn thành 1 đơn đặt hàng trung bình là 42 giây (nhanh hơn 85% so với gọi điện thoại ghi chép).

Đổi mới và đóng góp

  • Tối ưu hóa quản lý vòng đời bộ nhớ: Áp dụng chặt chẽ mô hình Activity Stack và giải phóng vùng nhớ tại onDestroy(), giảm thiểu 35% tỷ lệ tràn bộ nhớ (OOM Exceptions) trên các dòng máy Android phân khúc bình dân.
  • Mô hình kiến trúc lai linh hoạt: Kết hợp CSDL quan hệ MySQL (đảm bảo tính toàn vẹn dữ liệu cho quản trị) và cơ chế thời gian thực của Firebase, giúp trạng thái đơn hàng cập nhật với độ trễ dưới 0.5 giây.
  • Tiết kiệm chi phí đầu tư hạ tầng: Bằng cách kết hợp công cụ ảo hóa Oracle VM VirtualBox và phpMyAdmin, toàn bộ hệ thống backend có thể đóng gói và triển khai trên các máy chủ cục bộ hoặc dịch vụ lưu trữ giá rẻ mà không phụ thuộc vào các dịch vụ đám mây đắt đỏ.

Ứng dụng thực tế và triển khai

Kịch bản vận hành thực tế

  1. Khách hàng cá nhân: Tìm kiếm các món ăn đặc trưng, theo dõi chi tiết hình ảnh, giá cả, chủ động kiểm tra tổng hóa đơn trong giỏ hàng, gửi đơn đặt kèm địa chỉ chính xác mà không lo nhân viên ghi nhầm.
  2. Chủ nhà hàng / Bộ phận bếp: Nhận tín hiệu đơn hàng mới trên giao diện quản trị viên ngay lập tức, chuyển trạng thái từ "Đã order" sang "Thanh toán thành công" hoặc "Hủy/Đổi món" khi hết nguyên liệu, đồng thời theo dõi tổng doanh thu phát sinh trong ngày theo thời gian thực.
sequenceDiagram
    autonumber
    actor User as Khách hàng (App)
    participant Client as Cart & Order Engine
    participant Server as Backend / MySQL DB
    actor Admin as Quản trị viên (Admin UI)

    User->>Client: Chọn món ăn & Thêm vào giỏ hàng
    User->>Client: Nhấn "Đặt hàng" (Gửi tên, SĐT, địa chỉ)
    Client->>Server: Gửi gói tin tạo đơn hàng (HTTP/Firebase)
    Server-->>Server: Lưu bảng DONHANG (Trạng thái: 'Order')
    Server->>Admin: Đẩy thông báo đơn hàng mới
    Admin->>Server: Cập nhật trạng thái ('Thanh toán thành công')
    Server-->>User: Đồng bộ trạng thái đơn hàng trên màn hình Lịch sử

Yêu cầu triển khai và Ước tính Hiệu quả Kinh tế (ROI)

  • Yêu cầu môi trường Client: Thiết bị chạy hệ điều hành Android 5.0 (Lollipop - API 21) trở lên, RAM tối thiểu 2GB, dung lượng bộ nhớ trống tối thiểu 50MB.
  • Yêu cầu môi trường Server: Máy chủ chạy Linux (Ubuntu 20.04/22.04 LTS hoặc qua Oracle VM VirtualBox), Web server Apache/Nginx, PHP 7.4+, MySQL 8.0+.
  • Hiệu quả kinh tế: Đối với một nhà hàng xử lý 200 đơn/ngày, việc sử dụng ứng dụng riêng giúp tiết kiệm khoảng 12.000.000 – 18.000.000 VNĐ tiền phí hoa hồng hàng tháng cho các bên thứ ba, rút ngắn thời gian thu hồi vốn đầu tư (ROI) về mức 2.5 – 3 tháng.

Hạn chế và hướng phát triển

Dù đạt được toàn bộ các mục tiêu cốt lõi của một đồ án kỹ sư, hệ thống vẫn tồn tại các khía cạnh cần nâng cấp:

  1. Bảo mật và Mã hóa: Dữ liệu mật khẩu lưu trữ trong bảng TAIKHOAN cần nâng cấp từ chuỗi thuần/hash đơn giản sang thuật toán mã hóa băm một chiều có muối (BCrypt / PBKDF2) kết hợp JSON Web Token (JWT) cho các phiên làm việc.
  2. Kiến trúc mã nguồn: Cần tái cấu trúc từ mô hình MVC truyền thống sang mô hình MVVM (Model-View-ViewModel) kết hợp Clean Architecture và Jetpack Compose để tách biệt hoàn toàn tầng logic và giao diện.
  3. Cổng thanh toán: Dự kiến tích hợp thêm SDK của các cổng thanh toán nội địa và quốc tế (VNPay, MoMo, ZaloPay, Stripe).
  4. Hệ thống GPS: Bổ sung Google Maps API để theo dõi vị trí shipper và ước tính thời gian giao nhận theo thời gian thực (Real-time ETA Tracking).

Đối tượng hưởng lợi

+-----------------------------------------------------------------------------------+
|                            ĐỐI TƯỢNG HƯỞNG LỢI                                    |
+-----------------------------------------------------------------------------------+
| 👨‍🎓 Sinh viên: Tham khảo cấu trúc dự án mẫu, cách xử lý Activity Lifecycle,      |
|    thiết kế biểu đồ UML chuẩn (Activity, Sequence, Use Case) và lập trình CSDL.  |
| 👨‍💻 Lập trình viên: Nắm bắt mô hình tích hợp giữa Android Native và MySQL /      |
|    Firebase, tái sử dụng các mẫu thiết kế (Adapter Pattern, Singleton Cart).       |
| 🏪 Doanh nghiệp ẩm thực: Sở hữu giải pháp quản lý bán hàng độc lập, giảm 100%    |
|    chi phí hoa hồng cho bên thứ ba, bảo mật tuyệt đối tệp khách hàng thân thiết.   |
| 🔬 Nhà nghiên cứu: Dữ liệu cơ sở về hiệu năng tương tác ứng dụng di động trong    |
|    lĩnh vực kinh tế số và dịch vụ F&B.                                            |
+-----------------------------------------------------------------------------------+

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

1. Ứng dụng yêu cầu cấu hình phần cứng tối thiểu như thế nào để vận hành mượt mà?

Ứng dụng được biên dịch tối ưu hóa qua máy ảo Android (hỗ trợ cả Dalvik và ART), tương thích với 98.5% các thiết bị Android trên thị trường hiện nay (yêu cầu từ Android 5.0 Lollipop, RAM 2GB, dung lượng lưu trữ khả dụng 50MB).

2. Hệ thống xử lý thế nào khi người dùng bị mất kết nối mạng đột ngột lúc đang đặt hàng?

Ứng dụng tích hợp cơ chế lắng nghe vòng đời onPause() và lưu tạm trạng thái đơn hàng/giỏ hàng vào bộ nhớ tạm (Local Shared Preferences / SQLite). Khi có kết nối mạng trở lại, hệ thống sẽ nhắc nhở người dùng hoàn tất giao dịch mà không làm mất các món đã chọn.

3. Làm thế nào để quản trị viên phân biệt giữa đơn hàng mới và đơn hàng đã thanh toán?

Hệ thống thiết lập trường Trangthai trong bảng DONHANG với 4 trạng thái định danh rõ ràng: Hủy, Đổi món, Đã order (đơn mới gửi), và Thanh toán thành công. Màn hình quản trị tự động cập nhật và phân loại đơn hàng theo các thẻ màu trực quan.

4. Chi phí duy trì hệ thống máy chủ cơ sở dữ liệu hàng tháng là bao nhiêu?

Hệ thống được thiết kế để có thể chạy trên hạ tầng máy chủ cục bộ (On-premises Server qua VirtualBox/XAMPP) với chi phí 0 VNĐ, hoặc thuê máy chủ ảo Cloud VPS cấu hình cơ bản (1 vCPU, 2GB RAM) với chi phí khoảng 100.000 – 150.000 VNĐ/tháng.

5. Khả năng mở rộng (Scalability) của hệ thống khi số lượng người dùng tăng đột biến?

Cơ sở dữ liệu MySQL đã được thiết lập chỉ mục (Indexes) trên các khóa ngoại và trường tìm kiếm chính (Email, Tenmonan). Khi hệ thống mở rộng lên hàng chục ngàn người dùng, kiến trúc backend có thể dễ dàng tách biệt thành các Microservices và tích hợp thêm Redis Cache để giảm tải truy vấn cho Database.


Kết luận

Đề tài tốt nghiệp "Xây dựng App đặt đồ ăn" của tác giả Nguyễn Văn Huy đã giải quyết thành công bài toán chuyển đổi số quy trình đặt món và vận hành nhà hàng trên nền tảng Android. Bằng việc kết hợp chặt chẽ giữa lý thuyết hệ điều hành di động, cơ chế vòng đời ứng dụng, các mô hình phân tích thiết kế hệ thống chuẩn mực (UML, ERD) cùng công nghệ cơ sở dữ liệu thực tiễn (MySQL, phpMyAdmin, Firebase), đồ án không chỉ đáp ứng xuất sắc các tiêu chuẩn học thuật của Khoa CNTT&TT – Trường Đại học Phương Đông mà còn mở ra một giải pháp ứng dụng có giá trị thương mại hóa cao cho ngành dịch vụ F&B.