Giới thiệu dự án
Thị trường giao đồ ăn trực tuyến (Online Food Delivery) tại Việt Nam đang chứng kiến sự tăng trưởng vượt bậc với tốc độ tăng trưởng kép hàng năm (CAGR) đạt mức 18.5%, dự kiến quy mô thị trường vượt mốc 1.5 tỷ USD vào năm 2025. Thói quen tiêu dùng của khách hàng đã chuyển dịch mạnh mẽ từ ăn uống tại chỗ sang đặt hàng đa kênh qua thiết bị thông minh. Tuy nhiên, việc các cửa hàng F&B (Food and Beverage) vừa và nhỏ phụ thuộc hoàn toàn vào các siêu ứng dụng trung gian như ShopeeFood, GrabFood khiến họ phải gánh mức chiết khấu hoa hồng cao (từ 20% đến 30% trên mỗi đơn hàng), đồng thời bị hạn chế trong việc quản lý dữ liệu khách hàng độc lập.
Đề tài "Thiết kế website đặt đồ ăn online" được nghiên cứu và phát triển bởi sinh viên Nguyễn Quang Sáng (Đại học Công nghệ Đông Á) dưới sự hướng dẫn của Ts. Nông Thị Hoa nhằm giải quyết trực tiếp bài toán số hóa quy trình kinh doanh cho các cửa hàng dịch vụ ăn uống. Hệ thống cung cấp giải pháp bán hàng Direct-to-Consumer (D2C) độc lập, tối ưu hóa quy trình order, quản lý thực đơn và theo dõi đơn hàng với hiệu năng cao và chi phí vận hành tối thiểu.
+-------------------------------------------------------------------------+
| PROBLEM STATEMENT |
| |
| [Chi phí hoa hồng cao 20-30%] ----> Bào mòn lợi nhuận cửa hàng F&B |
| [Thiếu kênh bán hàng D2C] ----> Không sở hữu dữ liệu khách hàng |
| [Quy trình thủ công] ----> Xử lý đơn chậm, tỷ lệ sai sót cao |
+-------------------------------------------------------------------------+
Mục tiêu dự án
- Chuẩn hóa kiến trúc hệ thống: Xây dựng nền tảng website thương mại điện tử chuyên biệt cho ngành F&B dựa trên phương pháp phân tích thiết kế hướng đối tượng (OOAD - Object-Oriented Analysis and Design).
- Tối ưu hóa trải nghiệm khách hàng (Front-end UX/UI): Cung cấp giao diện trực quan, đa nền tảng (Responsive Web Design), cho phép tìm kiếm, tùy chỉnh món ăn, quản lý giỏ hàng và đặt đơn chỉ trong 3 bước thao tác.
- Tự động hóa quản trị cửa hàng (Back-end Management): Xây dựng bộ công cụ quản lý tập trung cho Admin gồm quản lý danh mục, điều phối thực đơn, kiểm soát trạng thái đơn hàng thời gian thực và báo cáo thống kê doanh thu.
- Đảm bảo tính toàn vẹn và an toàn dữ liệu: Áp dụng chuẩn bảo mật dữ liệu, mã hóa mật khẩu, lọc đầu vào chống tấn công SQL Injection và Cross-Site Scripting (XSS).
Phương pháp tiếp cận và kết quả kỳ vọng
- Phương pháp tiếp cận: Sử dụng mô hình Client-Server kết hợp ngôn ngữ lập trình kịch bản máy chủ PHP và hệ quản trị cơ sở dữ liệu quan hệ MySQL. Phương pháp phân tích dựa trên chuẩn UML (Unified Modeling Language) để thiết kế chi tiết luồng dữ liệu thông qua Use Case, Sequence Diagram và Activity Diagram.
- Kết quả đo lường kỳ vọng:
- Thời gian phản hồi trang (TTFB - Time to First Byte) < 250ms trên môi trường localhost/VPS tiêu chuẩn.
- Hỗ trợ tải đồng thời tối thiểu 100 kết nối đồng thời (concurrent connections) không gây sập cơ sở dữ liệu.
- Tối ưu hóa chu kỳ xử lý đơn hàng: Giảm thời gian xử lý đơn từ khi tiếp nhận đến lúc bàn giao xuống dưới 60 giây.
Phạm vi và giới hạn đề tài
- Phạm vi áp dụng: Triển khai cho các nhà hàng, quán ăn đơn lẻ hoặc chuỗi cửa hàng F&B quy mô vừa và nhỏ (SME).
- Giới hạn kỹ thuật: Hệ thống hiện tập trung vào mô hình đặt hàng thanh toán khi nhận hàng (COD - Cash On Delivery) và xác thực tài khoản nội bộ; chưa tích hợp cổng thanh toán trực tuyến bên thứ ba (VNPay, MoMo) qua sandbox ngân hàng và chưa định vị GPS tài xế theo thời gian thực.
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 nền tảng đặt đồ ăn trực tuyến hàng đầu hiện nay cho thấy sự phân hóa rõ nét về mặt tính năng và mô hình kinh doanh:
| Tiêu chí so sánh |
ShopeeFood |
GrabFood |
Website D2C Đề xuất |
| Mô hình kiến trúc |
Multi-vendor Marketplace |
Multi-vendor / Super App |
Single-vendor / Direct Store |
| Phí hoa hồng |
20% - 25% |
25% - 30% |
0% (Sở hữu trọn gói) |
| Kiểm soát dữ liệu |
Nền tảng nắm giữ |
Nền tảng nắm giữ |
Cửa hàng toàn quyền quản trị |
| Tốc độ tùy biến Menu |
Phụ thuộc duyệt của app |
Phụ thuộc duyệt của app |
Cập nhật tức thì (Real-time CRUD) |
| Chi phí duy trì |
Phí duy trì gian hàng + Ads |
Phí tài xế + Ads |
Chi phí máy chủ/hosting thấp |
Ma trận phân loại yêu cầu người dùng (MoSCoW Prioritization)
+-------------------------------------------------------------------------+
| MoSCoW PRIORITIZATION |
+-------------------------------------------------------------------------+
| [MUST HAVE] |
| - Xác thực người dùng (Đăng ký, Đăng nhập Session) |
| - Danh mục thực đơn đa cấp & Chi tiết món ăn (CRUD) |
| - Giỏ hàng động (Cart Session/Cookie Management) |
| - Quy trình Checkout & Theo dõi trạng thái đơn hàng (Pending -> Done) |
| - Phân quyền hệ thống: Admin & Customer (RBAC) |
+-------------------------------------------------------------------------+
| [SHOULD HAVE] |
| - Tìm kiếm món ăn theo tên và lọc theo danh mục |
| - Đánh giá, phản hồi chất lượng món ăn (Rating & Review) |
| - Dashboard thống kê doanh thu theo ngày/tháng/năm |
+-------------------------------------------------------------------------+
| [COULD HAVE] |
| - Quản lý chương trình khuyến mãi/mã giảm giá |
| - Tự động gửi email thông báo trạng thái đơn hàng |
+-------------------------------------------------------------------------+
| [WON'T HAVE (Giai đoạn này)] |
| - Tích hợp cổng thanh toán trực tuyến quốc tế (Stripe/PayPal) |
| - Tracking tài xế bằng bản đồ GPS thời gian thực |
+-------------------------------------------------------------------------+
Thiết kế hệ thống
Hệ thống được tổ chức theo kiến trúc 3 tầng phân lớp (Three-Tier Architecture), tách biệt giữa giao diện hiển thị, tầng xử lý logic nghiệp vụ và tầng lưu trữ dữ liệu.
graph TD
Client[Client Browser / Web Responsive] -->|HTTP / HTTPS Request| WebServer[Apache Web Server 2.4]
subgraph Application Layer
WebServer --> Router[PHP Routing & Controller]
Router --> AuthMod[Authentication & Session Guard]
Router --> OrderMod[Order Management Engine]
Router --> MenuMod[Menu & Category Processor]
Router --> StatMod[Analytics & Reporting Service]
end
subgraph Data Access Layer
AuthMod --> MySQLi[MySQLi Driver / Prepared Statements]
OrderMod --> MySQLi
MenuMod --> MySQLi
StatMod --> MySQLi
end
subgraph Storage Layer
MySQLi --> DB[(MySQL Relational Database)]
end
Tech Stack & Môi trường thực thi
- Front-end Stack: HTML5 (Hypertext Markup Language v5), CSS3, Bootstrap Framework v5.3, JavaScript (ES6+ Vanilla/AJAX) xử lý tương tác DOM bất đồng bộ.
- Back-end Stack: PHP 8.2 (Hypertext Preprocessor) với chuẩn lập trình hướng đối tượng OOP và kiến trúc MVC phân tách rõ ràng.
- Database Engine: MySQL Server v8.0 / MariaDB 10.4, Storage Engine InnoDB hỗ trợ giao dịch ACID và khóa ngoại (Foreign Keys).
- Môi trường phát triển & Máy chủ: XAMPP v8.2.12 (tích hợp Apache 2.4, PHP 8.2, phpMyAdmin), IDE Visual Studio Code v1.89+.
Thiết kế cơ sở dữ liệu quan hệ (Relational Database Schema)
Hệ thống được chuẩn hóa dữ liệu ở mức chuẩn 3 (3NF) để loại bỏ hoàn toàn hiện tượng dư thừa dữ liệu (Data Redundancy) và dị thường khi cập nhật:
[tbl_admin]
- admin_id (PK, INT, AUTO_INCREMENT)
- username (VARCHAR(50), UNIQUE)
- password (VARCHAR(255))
- full_name (VARCHAR(100))
- created_at (DATETIME)
[tbl_users]
- user_id (PK, INT, AUTO_INCREMENT)
- username (VARCHAR(50), UNIQUE)
- password (VARCHAR(255))
- email (VARCHAR(100), UNIQUE)
- phone (VARCHAR(15))
- address (TEXT)
- status (TINYINT)
[tbl_categories]
- category_id (PK, INT, AUTO_INCREMENT)
- category_name (VARCHAR(100))
- description (TEXT)
- image (VARCHAR(255))
[tbl_food_items]
- food_id (PK, INT, AUTO_INCREMENT)
- category_id (FK -> tbl_categories.category_id)
- food_name (VARCHAR(150))
- price (DECIMAL(10,2))
- description (TEXT)
- image (VARCHAR(255))
- is_available (TINYINT)
[tbl_orders]
- order_id (PK, INT, AUTO_INCREMENT)
- user_id (FK -> tbl_users.user_id)
- total_amount (DECIMAL(12,2))
- order_status (ENUM('Pending', 'Confirmed', 'Preparing', 'Delivering', 'Completed', 'Cancelled'))
- delivery_address (TEXT)
- order_date (DATETIME)
[tbl_order_details]
- detail_id (PK, INT, AUTO_INCREMENT)
- order_id (FK -> tbl_orders.order_id)
- food_id (FK -> tbl_food_items.food_id)
- quantity (INT)
- unit_price (DECIMAL(10,2))
[tbl_reviews]
- review_id (PK, INT, AUTO_INCREMENT)
- user_id (FK -> tbl_users.user_id)
- food_id (FK -> tbl_food_items.food_id)
- rating (TINYINT)
- comment (TEXT)
- review_date (DATETIME)
Thiết kế an toàn thông tin (Security Design)
- Xác thực và phân quyền (Authentication & Authorization): Mã hóa mật khẩu một chiều sử dụng thuật toán băm tiêu chuẩn công nghiệp
password_hash() với giải thuật Bcrypt (Cost Factor = 10). Phân tách Session giữa không gian Admin ($_SESSION['admin_auth']) và Customer ($_SESSION['user_auth']).
- Phòng chống tấn công SQL Injection: 100% các truy vấn tương tác cơ sở dữ liệu sử dụng kỹ thuật tham số hóa truy vấn (Prepared Statements) thông qua thư viện MySQLi/PDO.
- Phòng chống XSS (Cross-Site Scripting): Mọi dữ liệu đầu vào hiển thị lên giao diện được lọc qua hàm
htmlspecialchars(..., ENT_QUOTES, 'UTF-8').
Methodology
Dự án áp dụng mô hình phát triển phần mềm Agile/Scrum kết hợp thác nước có lặp (Iterative Waterfall), chia quy trình thực hiện thành 4 giai đoạn cụ thể:
+-------------------------------------------------------------------------+
| PROJECT ROADMAP |
+-------------------------------------------------------------------------+
| Giai đoạn 1: Khảo sát & Đặc tả yêu cầu (SRS) | Tuần 1 - Tuần 2|
| Giai đoạn 2: Phân tích & Thiết kế hệ thống (OOAD/UML) | Tuần 3 - Tuần 4|
| Giai đoạn 3: Hiện thực hóa mã nguồn (Coding & DB) | Tuần 5 - Tuần 8|
| Giai đoạn 4: Kiểm thử, Tối ưu & Đóng gói triển khai | Tuần 9 - Tuần 10|
+-------------------------------------------------------------------------+
Đánh giá và quản trị rủi ro (Risk Assessment & Mitigation)
| Rủi ro tiềm ẩn |
Mức độ |
Biện pháp giảm thiểu |
| Xung đột phiên đặt hàng khi tải cao |
Cao |
Áp dụng Database Transaction (START TRANSACTION, COMMIT, ROLLBACK) |
| Lỗ hổng rò rỉ dữ liệu qua tham số URL |
Nghiêm trọng |
Kiểm tra quyền sở hữu Session đối với tài nguyên trước khi trả về dữ liệu |
| Mất mát hình ảnh tải lên máy chủ |
Trung bình |
Chuẩn hóa đường dẫn lưu trữ, kiểm tra định dạng MIME type và kích thước file upload |
Implementation và kết quả
Development process
Quá trình phát triển tập trung vào việc hiện thực hóa các lớp nghiệp vụ cốt lõi, xử lý giao dịch đặt hàng nguyên tử và bảo mật dữ liệu người dùng.
Thuật toán và Đoạn mã xử lý giao dịch đặt hàng an toàn (Atomic Order Processing)
Dưới đây là mã nguồn PHP chuẩn hóa mô tả cơ chế xử lý đặt hàng an toàn với Database Transaction và Prepared Statements:
<?php
declare(strict_types=1);
namespace App\Services;
use mysqli;
use Exception;
class OrderService
{
private mysqli $db;
public function __construct(mysqli $dbConnection)
{
$this->db = $dbConnection;
}
/**
* Xử lý tạo đơn hàng nguyên tử (Atomic Transaction)
* Đảm bảo tính nhất quán giữa bảng đơn hàng và chi tiết đơn hàng
*/
public function placeOrder(int $userId, array $cartItems, string $deliveryAddress): int
{
if (empty($cartItems)) {
throw new Exception("Giỏ hàng rỗng. Không thể tiến hành đặt hàng.");
}
// 1. Khởi tạo giao dịch (ACID Transaction)
$this->db->begin_transaction();
try {
$totalAmount = 0.0;
// 2. Tính toán lại tổng tiền từ DB gốc để chống gian lận giá client-side
$stmtCheck = $this->db->prepare("SELECT price, is_available FROM tbl_food_items WHERE food_id = ? FOR UPDATE");
$verifiedItems = [];
foreach ($cartItems as $foodId => $quantity) {
$stmtCheck->bind_param("i", $foodId);
$stmtCheck->execute();
$result = $stmtCheck->get_result()->fetch_assoc();
if (!$result || (int)$result['is_available'] !== 1) {
throw new Exception("Món ăn ID {$foodId} hiện không khả dụng hoặc đã hết.");
}
$price = (float)$result['price'];
$itemTotal = $price * (int)$quantity;
$totalAmount += $itemTotal;
$verifiedItems[] = [
'food_id' => $foodId,
'quantity' => (int)$quantity,
'unit_price' => $price
];
}
$stmtCheck->close();
// 3. Thêm bản ghi vào bảng đơn hàng chính (tbl_orders)
$orderStatus = 'Pending';
$stmtOrder = $this->db->prepare(
"INSERT INTO tbl_orders (user_id, total_amount, order_status, delivery_address, order_date)
VALUES (?, ?, ?, ?, NOW())"
);
$stmtOrder->bind_param("idss", $userId, $totalAmount, $orderStatus, $deliveryAddress);
$stmtOrder->execute();
$orderId = $this->db->insert_id;
$stmtOrder->close();
// 4. Thêm danh sách món ăn vào bảng chi tiết (tbl_order_details)
$stmtDetail = $this->db->prepare(
"INSERT INTO tbl_order_details (order_id, food_id, quantity, unit_price)
VALUES (?, ?, ?, ?)"
);
foreach ($verifiedItems as $item) {
$stmtDetail->bind_param("iiid", $orderId, $item['food_id'], $item['quantity'], $item['unit_price']);
$stmtDetail->execute();
}
$stmtDetail->close();
// 5. Xác nhận giao dịch thành công
$this->db->commit();
return $orderId;
} catch (Exception $e) {
// Rollback toàn bộ dữ liệu nếu có bất kỳ lỗi nào phát sinh
$this->db->rollback();
error_log("Lỗi đặt hàng: " . $e->getMessage());
throw $e;
}
}
}
Testing và validation
Hệ thống đã trải qua các đợt kiểm thử chức năng (Functional Testing), kiểm thử bảo mật (Security Audit) và đo lường hiệu năng tải (Stress Testing):
Ma trận kết quả kiểm thử chức năng (Test Cases)
| Mã kiểm thử |
Kịch bản kiểm thử |
Dữ liệu đầu vào |
Kết quả kỳ vọng |
Trạng thái |
| TC-AUTH-01 |
Đăng ký tài khoản mới |
Username hợp lệ, Password > 6 ký tự |
Tài khoản được tạo, mật khẩu băm Bcrypt |
PASSED |
| TC-AUTH-02 |
Phòng chống SQL Injection |
Username: ' OR 1=1 -- |
Hệ thống báo sai tài khoản, không lỗi SQL |
PASSED |
| TC-CART-01 |
Thêm món ăn vào giỏ |
Food ID: 1, Quantity: 2 |
Giỏ hàng cập nhật số lượng và tính đúng tổng tiền |
PASSED |
| TC-ORDER-01 |
Đặt đơn hàng khi hết món |
Food ID: Unavailable |
Hủy giao dịch, rollback DB, thông báo cho User |
PASSED |
| TC-ADMIN-01 |
Thống kê doanh thu |
Filter theo Tháng 05/2024 |
Xuất đúng tổng doanh thu theo công thức SUM(total_amount) |
PASSED |
+-------------------------------------------------------------------------+
| PERFORMANCE BENCHMARK SUMMARY |
+-------------------------------------------------------------------------+
| [Google Lighthouse Audit (Desktop)] |
| - Performance: 94 / 100 |
| - Accessibility: 96 / 100 |
| - Best Practices: 92 / 100 |
| - SEO Score: 95 / 100 |
+-------------------------------------------------------------------------+
| [ApacheBench (ab) Load Testing Metrics] |
| - Concurrency Level: 50 clients |
| - Total Requests: 1,000 requests |
| - Failed Requests: 0 (0.00%) |
| - Requests per second: 428.32 [#/sec] (mean) |
| - Time per Request: 116.73 [ms] (mean) |
| - Transfer Rate: 1,842.10 [Kbytes/sec] |
+-------------------------------------------------------------------------+
Kết quả đạt được
-
Phía Khách hàng (Customer Interface):
- Hoàn thiện 100% luồng mua hàng: Đăng ký/Đăng nhập $\rightarrow$ Duyệt danh mục $\rightarrow$ Tìm kiếm theo tên $\rightarrow$ Tùy biến giỏ hàng $\rightarrow$ Xác nhận địa chỉ giao hàng $\rightarrow$ Tra cứu trạng thái đơn hàng trực quan.
- Chức năng tương tác phản hồi: Người dùng có thể đánh giá sao và gửi nhận xét thực tế sau khi nhận món.
-
Phía Quản trị viên (Admin Dashboard):
- Quản lý vòng đời sản phẩm: Thêm, sửa, xóa danh mục và món ăn kèm hình ảnh đại diện linh hoạt.
- Xử lý đơn hàng đa trạng thái: Cập nhật trạng thái tuần tự (Pending $\rightarrow$ Confirmed $\rightarrow$ Preparing $\rightarrow$ Delivering $\rightarrow$ Completed).
- Module Báo cáo & Thống kê: Trực quan hóa doanh số bán hàng, lọc đơn theo khung thời gian chính xác 100%.
Đổi mới và đóng góp
- Kiến trúc dữ liệu tối ưu hóa cho bài toán F&B đơn lẻ: Thay vì sử dụng các CMS cồng kềnh như WordPress/WooCommerce (thường sinh ra nhiều bảng metadata gây chậm truy vấn), hệ thống được thiết kế CSDL quan hệ tùy biến riêng biệt, giảm 65% số lượng câu truy vấn trung gian cho mỗi lần tải trang.
- Cơ chế xác thực giao dịch giá máy chủ (Server-side Price Verification): Ngăn chặn hoàn toàn rủi ro người dùng can thiệp vào mã nguồn JavaScript phía client để sửa đổi giá món ăn trước khi gửi payload đặt hàng.
- Tiết kiệm 100% chi phí trung gian: Giải pháp giúp chủ cửa hàng tiết kiệm từ 20-30% chi phí hoa hồng trên mỗi đơn hàng so với việc chỉ bán trên các sàn TMĐT giao đồ ăn.
- Đóng góp học thuật: Đề tài cung cấp tài liệu tham khảo hoàn chỉnh về quy trình phân tích thiết kế hướng đối tượng (OOAD) kết hợp triển khai thực tế bằng PHP/MySQL, bao gồm hệ thống sơ đồ UML (Use Case, Sequence, Activity, Class Diagram) chuẩn mực theo khung đào tạo CNTT.
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng thực tế
- Mô hình Quán ăn gia đình / Cửa hàng đặc sản địa phương: Triển khai làm website đặt hàng chính thức, hỗ trợ khách hàng quen đặt đồ ăn trực tiếp và tiết kiệm phí ship trung gian.
- Mô hình Bếp ăn trên mây (Cloud Kitchen): Sử dụng hệ thống để quản lý tập trung toàn bộ các đơn hàng đặt trực tiếp từ website thương hiệu, tối ưu hóa quy trình điều phối đơn xuống khu vực bếp.
sequenceDiagram
autonumber
actor User as Khách Hàng
participant Web as Giao Diện Web
participant Server as Order Service (PHP)
participant DB as MySQL Database
actor Admin as Quản Trị Viên
User->>Web: Thêm món vào giỏ & Chọn 'Đặt hàng'
Web->>Server: POST /order_process.php (Cart Data, Address)
Server->>DB: START TRANSACTION
Server->>DB: Khóa dòng & Kiểm tra giá (SELECT FOR UPDATE)
Server->>DB: INSERT INTO tbl_orders & tbl_order_details
Server->>DB: COMMIT TRANSACTION
DB-->>Server: Trả về OrderID thành công
Server-->>Web: Phản hồi kết quả đặt hàng thành công
Web-->>User: Hiển thị mã đơn & Trạng thái 'Pending'
Server-->>Admin: Cập nhật danh sách đơn mới trên Dashboard
Admin->>Server: Cập nhật trạng thái: 'Confirmed' -> 'Preparing'
Server->>DB: UPDATE tbl_orders SET order_status = 'Preparing'
User->>Web: Xem trang 'Theo dõi đơn hàng' -> Thấy trạng thái mới
Hướng dẫn triển khai (Deployment Instructions)
# 1. Cài đặt môi trường XAMPP (hỗ trợ PHP 8.2+ và MySQL 8.0+)
# Tải và cài đặt XAMPP từ trang chủ https://www.apachefriends.org/
# 2. Di chuyển mã nguồn dự án vào thư mục web server
cd /opt/lampp/htdocs/ # (Trên Linux) hoặc C:\xampp\htdocs\ (Trên Windows)
git clone https://github.com/example/food-ordering-system.git food_web
# 3. Khởi tạo Cơ sở dữ liệu
# Mở phpMyAdmin (http://localhost/phpmyadmin), tạo cơ sở dữ liệu mới: db_food_order
# Import file cấu trúc CSDL: database/db_food_order.sql
# 4. Cấu hình kết nối cơ sở dữ liệu trong file config/database.php
# $host = 'localhost';
# $user = 'root';
# $pass = '';
# $dbname = 'db_food_order';
# 5. Khởi động dịch vụ Apache và MySQL từ XAMPP Control Panel
# Truy cập hệ thống tại: http://localhost/food_web/
Phân tích hiệu quả kinh tế (ROI & Cost-Benefit Analysis)
- Chi phí đầu tư ban đầu: Gần như bằng 0 (Sử dụng toàn bộ công cụ mã nguồn mở: PHP, MySQL, Apache, VS Code).
- Chi phí vận hành hàng tháng: ~100.000 - 150.000 VNĐ (Thuê gói Cloud Hosting hoặc Cloud VPS phân khúc phổ thông).
- Điểm hòa vốn (Break-even Point): Đạt được ngay trong tháng đầu tiên nếu cửa hàng chuyển dịch được từ 30-50 đơn hàng/tháng từ các sàn có thu phí hoa hồng 25% sang kênh website riêng.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Hệ thống lưu trữ Session trên File hệ thống mặc định của PHP, chưa áp dụng cơ chế phân tán như Redis/Memcached khi nhân rộng máy chủ (horizontal scaling).
- Giao diện quản trị chưa tích hợp giao tiếp thời gian thực 2 chiều (WebSockets) để thông báo có đơn hàng mới mà vẫn phụ thuộc vào cơ chế Ajax Polling định kỳ.
Hướng phát triển trong tương lai
- Tích hợp cổng thanh toán trực tuyến: Kết nối API thanh toán mã QR qua VNPay-QR, MoMo Payment Gateway và cổng quốc tế.
- Kiến trúc Headless & Mobile App: Chuyển đổi tầng Back-end sang mô hình RESTful API chuẩn OpenAPI/Swagger để phát triển ứng dụng di động đa nền tảng cho khách hàng và tài xế bằng Flutter.
- Ứng dụng Trí tuệ Nhân tạo (AI): Tích hợp thuật toán gợi ý món ăn (Recommendation System) dựa trên lịch sử đặt hàng của người dùng (Collaborative Filtering).
Đối tượng hưởng lợi
- Sinh viên chuyên ngành CNTT / Phần mềm: Là tài liệu mẫu trực quan, chuẩn mực về việc áp dụng phân tích thiết kế hướng đối tượng (OOAD), vẽ sơ đồ Use Case, Sequence Diagram và tổ chức mã nguồn PHP hướng module.
- Lập trình viên Web (Web Developers): Cung cấp các mẫu xử lý giao dịch an toàn (ACID Transaction), kỹ thuật phòng chống các lỗ hổng OWASP Top 10 phổ biến trong PHP.
- Chủ doanh nghiệp / Hộ kinh doanh F&B: Sở hữu giải pháp chuyển đổi số bán hàng D2C độc lập, kiểm soát 100% dữ liệu khách hàng và cắt giảm chi phí trung gian.
- Nhà nghiên cứu / Giảng viên: Cung cấp số liệu khảo sát thực tế và khung đánh giá bài toán thương mại điện tử F&B quy mô nhỏ tại thị trường Việt Nam.
Câu hỏi thường gặp
1. Yêu cầu cấu hình phần cứng và phần mềm tối thiểu để vận hành hệ thống là gì?
Hệ thống yêu cầu máy chủ web hỗ trợ PHP từ phiên bản 7.4 trở lên (khuyến nghị PHP 8.2), MySQL Server 5.7+ hoặc MariaDB 10.4+. Về phần cứng, chỉ cần máy chủ VPS với 1 Core CPU, 1GB RAM và 10GB SSD là có thể vận hành ổn định phục vụ 5.000 lượt truy cập mỗi ngày.
2. Hệ thống có khả năng chống nghẽn đơn khi nhiều khách cùng đặt một món không?
Có. Nhờ kỹ thuật khóa dòng dữ liệu bi quan (SELECT ... FOR UPDATE) bên trong Database Transaction, hệ thống đảm bảo việc kiểm tra số lượng và tính khả dụng của món ăn diễn ra tuần tự và chính xác tuyệt đối, không xảy ra hiện tượng xung đột dữ liệu.
3. Website có thể tích hợp thêm các nhà hàng khác thành sàn đa người bán (Multi-vendor) không?
Kiến trúc CSDL hiện tại được thiết kế tối ưu cho mô hình đơn cửa hàng (Single-vendor). Tuy nhiên, có thể nâng cấp lên sàn đa cửa hàng bằng cách bổ sung bảng tbl_restaurants và gắn khóa ngoại restaurant_id vào các bảng tbl_food_items, tbl_orders.
4. Chi phí bảo trì và vận hành hệ thống hàng năm ước tính là bao nhiêu?
Chi phí chỉ bao gồm tên miền (.vn hoặc .com khoảng 250.000 - 550.000 VNĐ/năm) và chi phí thuê Web Hosting tiêu chuẩn (khoảng 1.200.000 VNĐ/năm). Hệ thống không phát sinh bất kỳ khoản phí duy trì tính năng nào khác.
5. Làm thế nào để đảm bảo website hiển thị tốt trên các dòng điện thoại thông minh?
Hệ thống sử dụng hệ thống Grid System của Bootstrap 5 kết hợp kỹ thuật CSS Media Queries, tự động co giãn và bố cục lại các thành phần giao diện (Menu, Giỏ hàng, Form đặt đơn) mượt mà trên tất cả các độ phân giải màn hình từ Smartphone (320px+), Tablet cho đến Desktop (1920px).
Kết luận
Đồ án tốt nghiệp "Thiết kế website đặt đồ ăn online" của sinh viên Nguyễn Quang Sáng đã hoàn thành xuất sắc các mục tiêu nghiên cứu và ứng dụng thực tiễn đề ra. Dự án không chỉ giải quyết trọn vẹn bài toán kỹ thuật về phân tích thiết kế hệ thống hướng đối tượng OOAD, xây dựng cơ sở dữ liệu quan hệ chuẩn hóa 3NF và phát triển các module chức năng bảo mật bằng PHP/MySQL, mà còn mang lại giá trị kinh tế trực tiếp cho các doanh nghiệp F&B trong quá trình chuyển đổi số. Đây là nền tảng vững chắc để tiếp tục mở rộng phát triển thành hệ sinh thái dịch vụ ăn uống thông minh toàn diện trong tương lai.