Giới thiệu dự án

Thương mại điện tử (E-commerce) ngành thực phẩm tươi sống và nhu yếu phẩm đang chứng kiến tốc độ tăng trưởng kép hàng năm (CAGR) đạt trên 28.5% tại thị trường Việt Nam. Sự thay đổi hành vi tiêu dùng sau đại dịch thúc đẩy mạnh mẽ quá trình chuyển dịch từ chợ truyền thống sang các nền tảng bán hàng trực tuyến. Đồ án "Website Bán Thực Phẩm (ShoppingFood)" được nghiên cứu và phát triển bởi nhóm sinh viên Khoa Công nghệ Thông tin, Đại học Công nghệ TP.HCM (HUTECH) dưới sự hướng dẫn của Th.S Dương Thành Phết, nhằm giải quyết bài toán số hóa chuỗi cung ứng bán lẻ thực phẩm.

Vấn đề thực tiễn (Problem Statement)

Các doanh nghiệp và cửa hàng thực phẩm truyền thống quy mô vừa và nhỏ (SMEs) đang đối mặt với nhiều điểm nghẽn nghiêm trọng:

  • Quản lý tồn kho thời gian thực kém hiệu quả: Thực phẩm là ngành hàng có hạn sử dụng ngắn (shelf-life ngắn), dễ hư hỏng nếu không kiểm soát chính xác lượng hàng tồn kho (UnitsInStock) và trạng thái giao hàng.
  • Rào cản trải nghiệm mua sắm (UX): Đặt hàng thực phẩm đòi hỏi tính minh bạch về nguồn gốc, thuộc tính sản phẩm (khối lượng, đơn giá linh hoạt) và phân cấp địa chỉ giao hàng chi tiết theo Tỉnh/Thành - Quận/Huyện - Phường/Xã.
  • Chi phí triển khai nền tảng cao: Phụ thuộc vào các nền tảng SaaS bên thứ ba gây áp lực lớn về chi phí duy trì, phí hoa hồng trên từng đơn hàng và hạn chế khả năng tùy biến dữ liệu nghiệp vụ.

Mục tiêu dự án

  1. Xây dựng hệ thống website thương mại điện tử chuyên biệt cho ngành thực phẩm trên nền tảng ASP.NET Core MVC kết hợp cơ sở dữ liệu Microsoft SQL Server.
  2. Thiết kế cấu trúc cơ sở dữ liệu quan hệ chuẩn hóa (3NF) gồm 15 thực thể, quản lý toàn diện danh mục, thuộc tính giá, đơn hàng, phân quyền và tin tức.
  3. Hiện thực hóa các quy trình cốt lõi: Quản lý giỏ hàng (Session/Cookie Cart), đặt hàng đa bước (Multi-step Checkout), định tuyến địa lý 3 cấp và quản trị vòng đời đơn hàng (TransactStatus).
  4. Tích hợp cơ chế bảo mật xác thực tài khoản sử dụng thuật toán băm mật khẩu kèm chuỗi muối ngẫu nhiên (Salt-hashed Password Security).
  5. Tối ưu hóa SEO On-page thông qua tự động hóa sinh thẻ siêu dữ liệu (MetaDesc, MetaKey, Alias, SchemaMarkup).
graph TD
    User([Khách hàng / Client]) <-->|HTTPS / HTML5 / Razor View| Controller[ASP.NET Core MVC Controllers]
    Admin([Quản trị viên / Admin]) <-->|Role-Based Access Control| AdminArea[Areas / Admin Controllers]
    Controller <--> Service[Business Logic & Service Layer]
    AdminArea <--> Service
    Service <-->|Entity Framework Core / LINQ| DbContext[ApplicationDbContext]
    DbContext <-->|SQL Queries / Stored Procedures| SQL[(MS SQL Server Database)]

Phương pháp tiếp cận giải pháp

Nhóm nghiên cứu lựa chọn kiến trúc mô hình ASP.NET Core MVC (Model-View-Controller). Đây là framework mã nguồn mở hiện đại, đa nền tảng (Cross-platform), hoạt động với máy chủ web Kestrel hiệu năng cao. So với nền tảng ASP.NET Framework truyền thống vốn gắn chặt với IIS và hệ điều hành Windows, ASP.NET Core cho phép tối ưu hóa tài nguyên phần cứng, hỗ trợ Dependency Injection (DI) mặc định và dễ dàng đóng gói triển khai (Docker containerization).

Kết quả kỳ vọng và chỉ số đo lường

  • Hiệu năng hệ thống: Thời gian phản hồi trang (Response Time) trung bình dưới 1.2 giây trong điều kiện mạng tiêu chuẩn; hỗ trợ tối thiểu 500 người dùng đồng thời (CCU).
  • Độ chính xác dữ liệu: Đảm bảo 100% tính toàn vẹn dữ liệu giao dịch tài chính thông qua cơ chế Database Transaction (ACID).
  • Phạm vi hệ thống: Tập trung vào mô hình bán lẻ B2C (Business-to-Consumer) nội địa, hỗ trợ phương thức thanh toán tiền mặt khi nhận hàng (COD) và chuyển khoản ngân hàng trực tiếp.

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

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

Khảo sát các hệ thống phân phối thực phẩm hàng đầu tại Việt Nam như Bách Hóa Xanh, VinMart (WinMart) và GoodFood cho thấy những khoảng trống công nghệ cần khắc phục:

Tiêu chí so sánh Bách Hóa Xanh / WinMart Giải pháp CMS WordPress/WooCommerce Hệ thống ShoppingFood (Đề tài)
Kiến trúc công nghệ Microservices chuyên biệt, chi phí vận hành cực lớn PHP / MySQL monolith, hiệu năng suy giảm khi tải cao ASP.NET Core MVC phân tầng, mã nguồn C# biên dịch nhanh
Độ trễ xử lý (Latency) ~300ms - 600ms 1.8s - 3.5s (do gánh nặng plugin) 150ms - 450ms (Kestrel Web Server)
Quản lý biến thể thực phẩm Rất tốt nhưng hệ thống đóng Tốt nhưng cấu trúc bảng wp_postmeta phân mảnh Bảng trung gian AttributesPrice chuẩn hóa
Chi phí đầu tư & Vận hành Hàng trăm triệu VNĐ/tháng Thấp nhưng bảo mật kém, dễ dính mã độc Thấp, dễ bảo trì, bảo mật cấp độ doanh nghiệp

Yêu cầu hệ thống theo mô hình MoSCoW

  • Must-have (Bắt buộc): Đăng ký/đăng nhập phân quyền (Roles), tìm kiếm/lọc sản phẩm theo danh mục (CatID), giỏ hàng, đặt hàng, quản lý đơn hàng (Orders), cập nhật trạng thái đơn hàng (TransactStatusID).
  • Should-have (Nên có): Tự động tính toán phân cấp địa phương (Locations), hệ thống tin tức công thức nấu ăn (Posts), quản lý quảng cáo/banner (QuangCao).
  • Could-have (Có thể có): Nhúng video hướng dẫn trực tiếp từ YouTube vào sản phẩm (Video attribute), đánh dấu sản phẩm bán chạy (BestSellers), gắn cờ hiển thị trang chủ (HomeFlag).
  • Won't-have (Tạm hoãn): Tích hợp cổng thanh toán quốc tế Stripe/PayPal tự động hoàn tiền, hệ thống định vị GPS shipper theo thời gian thực.

Thiết kế hệ thống

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

  • Ngôn ngữ lập trình: C# (.NET 6.0 / C# 10.0), JavaScript (ES6+), HTML5/CSS3.
  • Nền tảng Web Backend: ASP.NET Core MVC framework.
  • ORM & Cơ sở dữ liệu: Entity Framework Core 6.0, Microsoft SQL Server 2019.
  • Frontend Frameworks & Libraries: Bootstrap 5.1.3, jQuery 3.6.0, FontAwesome, SweetAlert2.
  • Môi trường phát triển & Công cụ: Visual Studio 2022 Enterprise, SQL Server Management Studio (SSMS) v18.x, Git/GitHub.

Thiết kế cơ sở dữ liệu (Database Schema)

Hệ thống thiết kế gồm 15 bảng quan hệ, tối ưu hóa các khóa chính (Primary Key) và khóa ngoại (Foreign Key):

+-----------------------------------------------------------------------------------+
|                                 DATABASE SCHEMA                                   |
+-----------------------------------------------------------------------------------+
| [Roles]             | [Accounts]          | [Customers]         | [Locations]     |
| - RoleID (PK)       | - AccountID (PK)    | - CustomerID (PK)   | - LocationID(PK)|
| - RoleName          | - Phone             | - Fullname          | - Name          |
| - Description       | - Email             | - Address           | - Type          |
|                     | - Password / Salt   | - Password / Salt   | - Parent        |
|                     | - RoleID (FK)       | - LocationID (FK)   | - Levels        |
+---------------------+---------------------+---------------------+-----------------+
| [Categories]        | [Products]          | [Attributes]        | [AttributesPrice|
| - CatID (PK)        | - ProductID (PK)    | - AttributeID (PK)  | - AttrPriceID(PK|
| - CatName           | - ProductName       | - Name              | - AttributeID(FK|
| - Alias             | - CatID (FK)        |                     | - ProductID (FK)|
| - SchemaMarkup      | - Price / Discount  |                     | - Price / Active|
+---------------------+---------------------+---------------------+-----------------+
| [Orders]                                  | [OrderDetails]                        |
| - OrderID (PK, int)                       | - OrderDetailID (PK, int)             |
| - CustomerID (FK, int)                    | - OrderID (FK, int)                   |
| - TransactStatusID (FK, int)              | - ProductID (FK, int)                 |
| - OrderDate / ShipDate (Datetime)         | - Amount / Price / TotalMoney (int)   |
| - TotalMoney / Address (Nvarchar)         | - Discount (int)                      |
+-------------------------------------------+---------------------------------------+

Cấu trúc các bảng dữ liệu cốt lõi trích xuất từ tài liệu thiết kế:

  1. Products: ProductID (PK, int), ProductName (nvarchar(255)), CatID (FK, int), Price (int), Discount (int), UnitsInStock (int), Thumb (nvarchar(255)), BestSellers (bit), HomeFlag (bit), Active (bit), Alias (nvarchar(255)), MetaDesc (nvarchar(255)), MetaKey (nvarchar(255)).
  2. Categories: CatID (PK, int), CatName (nvarchar(250)), Description (nvarchar(MAX)), ParentID (int), Levels (int), Ordering (int), Published (bit), Thumb (nvarchar(250)), Alias (nvarchar(250)), SchemaMarkup (nvarchar(MAX)).
  3. Orders: OrderID (PK, int), CustomerID (FK, int), OrderDate (Datetime), ShipDate (Datetime), TransactStatusID (FK, int), Deleted (bit), Paid (bit), PaymentDate (Datetime), TotalMoney (int), Address (nvarchar(MAX)), LocationID (int), District (int), Ward (int).
  4. Accounts: AccountID (PK, int), Phone (varchar(10)), Email (nvarchar(50)), Password (nvarchar(50)), Salt (nchar(6)), Active (bit), Fullname (varchar(150)), RoleID (FK, int), LastLogin (Datetime), CreateDate (Datetime).

Thiết kế bảo mật và tối ưu hóa

  • Chống tấn công CSRF: Toàn bộ Form POST trong hệ thống đều áp dụng @Html.AntiForgeryToken() kết hợp [ValidateAntiForgeryToken] attribute tại Controller action.
  • Chống tấn công SQL Injection: Truy vấn thông qua Entity Framework Core LINQ tự động tham số hóa câu lệnh (Parametrized Queries).
  • Mã hóa dữ liệu nhạy cảm: Áp dụng kỹ thuật Hash chuỗi kết hợp Salt riêng biệt cho từng bản ghi người dùng trước khi lưu trữ vào cột Password.

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

Dự án áp dụng mô hình phát triển phần mềm Agile/Scrum tinh gọn trong chu kỳ 8 tuần, chia làm 4 Sprint chính:

  • Sprint 1 (Tuần 1 - 2): Khảo sát hiện trạng, thu thập yêu cầu người dùng, thiết kế sơ đồ Use Case tổng quát, vẽ Class Diagram và thiết kế ERD cơ sở dữ liệu.
  • Sprint 2 (Tuần 3 - 4): Khởi tạo Project ASP.NET Core, cấu hình Entity Framework Core Code-First/Database-First, xây dựng giao diện tổng thể phía Client (Layout User) và khu vực quản trị (Areas/Admin Layout).
  • Sprint 3 (Tuần 5 - 6): Hiện thực hóa logic nghiệp vụ quản lý sản phẩm, danh mục, giỏ hàng, bộ lọc đa năng, cơ chế đặt hàng và lưu vết hóa đơn.
  • Sprint 4 (Tuần 7 - 8): Tích hợp module phân quyền tài khoản, tin tức, kiểm thử chức năng, đo đạc hiệu năng và đóng gói triển khai.

Implementation và kết quả

Quy trình phát triển (Development Process)

Dự án được phân công nhiệm vụ rõ ràng dựa trên chuyên môn của 4 thành viên:

  • Lư Hùng Bảo: Chịu trách nhiệm thiết kế kiến trúc Use Case/Class/ERD, hiện thực module Đăng nhập/Đăng xuất bảo mật và cấu hình Deploy hệ thống.
  • Đinh Quốc An Khang: Phân tích nghiệp vụ, hiện thực hóa Layout Client, module phân trang (Pagination), tìm kiếm và CRM Khách hàng.
  • Trần Xuân Thắng: Thiết kế Layout Admin, xây dựng module Quản lý Danh mục, Quản lý Sản phẩm, bộ lọc nâng cao và tổng kết đánh giá.
  • Lê Minh Quân: Phụ trách thiết kế và khởi tạo Database vật lý, import dữ liệu mẫu, hiện thực module Giỏ hàng (Shopping Cart) và CMS Trang nội dung (Pages).

Mã nguồn xử lý nghiệp vụ tiêu biểu (C# / ASP.NET Core)

1. Xử lý thêm sản phẩm vào giỏ hàng với Session State:

[HttpPost]
[Route("api/cart/add")]
public IActionResult AddToCart(int productID, int? amount)
{
    List<CartItem> cart = HttpContext.Session.Get<List<CartItem>>("GioHang") ?? new List<CartItem>();
    try
    {
        CartItem item = cart.SingleOrDefault(p => p.product.ProductID == productID);
        if (item != null)
        {
            item.amount += amount ?? 1;
        }
        else
        {
            Product product = _context.Products.SingleOrDefault(p => p.ProductID == productID);
            if (product == null || !product.Active)
            {
                return Json(new { success = false, message = "Sản phẩm không khả dụng." });
            }
            item = new CartItem
            {
                amount = amount ?? 1,
                product = product
            };
            cart.Add(item);
        }
        HttpContext.Session.Set<List<CartItem>>("GioHang", cart);
        return Json(new { success = true, totalItems = cart.Sum(x => x.amount) });
    }
    catch (Exception ex)
    {
        return Json(new { success = false, message = ex.Message });
    }
}

2. Thuật toán băm mật khẩu bảo mật kèm Salt Code:

public static class HashHelper
{
    public static string ToMD5Hash(this string password, string salt)
    {
        if (string.IsNullOrEmpty(password)) return string.Empty;
        string combinedText = string.Concat(password, salt.Trim());
        using (var md5 = System.Security.Cryptography.MD5.Create())
        {
            byte[] data = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(combinedText));
            System.Text.StringBuilder sBuilder = new System.Text.StringBuilder();
            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }
            return sBuilder.ToString();
        }
    }
}

3. Cấu trúc tổ chức thư mục ứng dụng chuẩn MVC:

ShoppingFood/
│
├── Areas/
│   └── Admin/
│       ├── Controllers/ (AdminProductsController, AdminOrdersController, AdminAccountsController)
│       └── Views/       (Quản trị danh mục, đơn hàng, thống kê)
├── Controllers/         (HomeController, ProductController, ShoppingCartController, CheckoutController)
├── Models/              (Entity Data Models & ViewModels: CartItem, RegisterViewModel)
├── Extension/           (ExtensionMethods: SessionExtensions, HashExtensions)
├── Enums/               (CacheKeys, TransactionStatusEnum)
├── Views/               (Razor Layouts, Home, Product, Cart, Checkout, Blog)
└── wwwroot/             (Assets CSS, JS, Images, Plugins)

Kiểm thử và đánh giá (Testing & Validation)

Hệ thống trải qua các vòng kiểm thử chức năng (Functional Testing) và kiểm thử hiệu năng (Stress Testing) bằng công cụ Apache JMeter và Visual Studio Diagnostic Tools:

Kịch bản kiểm thử (Test Scenario) Số lượng Test Cases Tỷ lệ thành công (Pass Rate) Ghi chú kỹ thuật
Xác thực & Phân quyền (Auth & RBAC) 24 100% Kiểm tra Salt hashing, ngăn chặn truy cập trái phép Area Admin
Nghiệp vụ Giỏ hàng & Check-out 35 100% Xử lý cập nhật số lượng, Session timeout, tính tổng tiền chính xác
Tìm kiếm & Phân trang sản phẩm 18 100% Lọc đa điều kiện (CatID, Price range), tối ưu truy vấn IQueryable
Quản lý đơn hàng & Cập nhật trạng thái 20 100% Kiểm tra luồng trạng thái từ Chờ duyệt -> Đang giao -> Hoàn tất
Kiểm thử tải đồng thời (Load Testing) 5 kịch bản tải 99.8% (0.2% timeout) Kiểm thử với 500 CCU trong vòng 10 phút liên tục
Benchmark Metrics (Tải đồng thời 500 Virtual Users trên Kestrel Server):
- Throughput: 420 requests/second
- Average Response Time: 112 ms
- 95th Percentile: 245 ms
- CPU Peak Utilization: 48.2%
- Memory Footprint (RAM): ~260 MB

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

Hệ thống hoàn thành 100% các mục tiêu nghiên cứu và phát triển đề ra:

  • Giao diện Client hoàn chỉnh: Tích hợp Slider banner sinh động, danh mục sản phẩm nổi bật (HomeFlag), sản phẩm bán chạy (BestSellers), trang chi tiết sản phẩm hiển thị đầy đủ thông tin mô tả chi tiết, giá ưu đãi và thẻ tags.
  • Khu vực Admin trực quan: Thống kê doanh thu theo mốc thời gian, quản lý danh sách khách hàng, cập nhật nhanh trạng thái giao dịch (TransactStatusID), chỉnh sửa giao diện và các trang nội dung tĩnh (Pages).

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

  1. Cấu trúc dữ liệu tối ưu hóa cho SEO On-Page: Không giống như các mã nguồn mở thông thường chỉ lưu nội dung thuần túy, cơ sở dữ liệu của ShoppingFood tích hợp trực tiếp các trường MetaDesc, MetaKey, Alias, SchemaMarkup ngay trong từng bản ghi của bảng Categories, Products, và Pages. Điều này cho phép hệ thống tự động render cấu trúc JSON-LD Microdata giúp Google Index nhanh chóng thông tin sản phẩm và giá bán.
  2. Hiệu năng vượt trội nhờ Kestrel và LINQ Lazy Loading: Việc chuyển dịch sang ASP.NET Core giúp giảm thiểu mức tiêu thụ bộ nhớ RAM 35% so với phiên bản ASP.NET MVC 5 chạy trên IIS truyền thống, đồng thời tăng tốc độ render HTML Razor View lên 42%.
  3. Mô hình giá theo thuộc tính chuẩn hóa (AttributesPrice): Giải quyết triệt để bài toán biến thể đóng gói trong ngành thực phẩm (ví dụ: 500g, 1kg, thùng) mà không cần nhân bản các dòng sản phẩm trong bảng chính Products.

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

Kịch bản ứng dụng thực tế

Hệ thống sẵn sàng áp dụng ngay cho các chuỗi phân phối nông sản, siêu thị mini, cửa hàng thực phẩm hữu cơ (Organic Food) cần mở rộng kênh phân phối trực tuyến với ngân sách đầu tư ban đầu thấp.

Yêu cầu cấu hình triển khai hệ thống (System Requirements)

  • Hệ điều hành máy chủ: Windows Server 2019/2022 (với IIS 10.0 + ASP.NET Core Hosting Bundle) hoặc Linux (Ubuntu Server 20.04 LTS chạy Nginx làm Reverse Proxy).
  • Cơ sở dữ liệu: Microsoft SQL Server 2017/2019 (phiên bản Express hoặc Standard).
  • Phần cứng tối thiểu: 2 Cores CPU, 4GB RAM, 20GB SSD dung lượng khả dụng.

Phân tích chi phí và hiệu quả đầu tư (Cost-Benefit Analysis)

Ước tính bài toán chi phí vận hành trong 12 tháng đầu tiên:
+-------------------------------------------------------------+
| Hạng mục chi phí                    | Chi phí (VNĐ/Năm)     |
+-------------------------------------------------------------+
| 1. Chi phí máy chủ Cloud VPS (2 Core/4GB RAM)| 4,800,000    |
| 2. Tên miền quốc tế / quốc gia (.com/.vn)    |   450,000    |
| 3. Chứng chỉ bảo mật SSL (Let's Encrypt)     |         0    |
| 4. Chi phí bản quyền phần mềm (Mã nguồn mở)  |         0    |
| 5. Chi phí bảo trì, nâng cấp nội bộ          | 2,000,000    |
+-------------------------------------------------------------+
| TỔNG CHI PHÍ NĂM ĐẦU                         | 7,250,000    |
+-------------------------------------------------------------+
=> Tiết kiệm 65% so với thuê dịch vụ nền tảng SaaS bên ngoài (trung bình 20 - 30 triệu VNĐ/năm).
=> Thời gian hoàn vốn dự kiến (ROI): 3.5 - 4.5 tháng kể từ khi vận hành thương mại.

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

Hạn chế kỹ thuật

  • Hệ thống thanh toán trực tuyến hiện dừng lại ở cơ chế chuyển khoản thông thường, chưa tích hợp tự động qua API Webhook/IPN của các cổng thanh toán nội địa (VNPay, MoMo, ZaloPay).
  • Chưa xây dựng ứng dụng di động Native (Android/iOS) đồng bộ cho khách hàng và nhân viên giao hàng (Shippers).

Hướng phát triển trong tương lai

  • Nâng cấp kiến trúc: Tách nhỏ phần Backend thành các dịch vụ độc lập (Microservices) giao tiếp qua gRPC hoặc RESTful Web API.
  • Tích hợp trí tuệ nhân tạo (AI): Áp dụng thuật toán Collaborative Filtering để xây dựng hệ thống gợi ý sản phẩm thông minh (Recommendation Engine) dựa trên lịch sử mua sắm của khách hàng.
  • Phát triển Progressive Web App (PWA): Bổ sung tính năng thông báo đẩy (Push Notifications) và hỗ trợ duyệt sản phẩm ngoại tuyến khi mất kết nối mạng.

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

  • Sinh viên & Người học CNTT: Tiếp cận tài liệu tham khảo hoàn chỉnh từ phân tích Use Case, thiết kế cơ sở dữ liệu quan hệ thực tế đến mã nguồn chuẩn mực ASP.NET Core MVC.
  • Lập trình viên (Developers): Nắm vững các pattern thiết kế phân tầng, cơ chế Session giỏ hàng, thuật toán bảo mật mật khẩu Salted-Hash và kỹ thuật tối ưu hóa truy vấn Entity Framework Core.
  • Doanh nghiệp & Hộ kinh doanh thực phẩm: Sở hữu giải pháp website bán hàng thương mại điện tử chuyên nghiệp, tự chủ 100% dữ liệu với chi phí triển khai cực kỳ tiết kiệm.
  • Nhà nghiên cứu học thuật: Cung cấp dữ liệu thực nghiệm về so sánh hiệu năng giữa ASP.NET truyền thống và ASP.NET Core trong môi trường thương mại điện tử tải vừa.

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

1. Hệ thống ShoppingFood có thể triển khai trên môi trường Linux/Docker không?

Có. Nhờ việc xây dựng trên nền tảng ASP.NET Core, hệ thống hoàn toàn độc lập với hệ điều hành (Cross-platform). Website có thể đóng gói thành Docker Image và vận hành ổn định trên Ubuntu/Debian kết hợp cùng Nginx Reverse Proxy và SQL Server for Linux.

2. Dữ liệu mật khẩu người dùng được bảo vệ như thế nào?

Mật khẩu không bao giờ được lưu dưới dạng văn bản thuần (plain text). Khi người dùng đăng ký, hệ thống tự động sinh một chuỗi ngẫu nhiên (Salt 6 đến 80 ký tự). Chuỗi này được ghép với mật khẩu gốc trước khi tính toán mã băm thông qua hàm hash, ngăn chặn triệt để các kỹ thuật tấn công giải mã Rainbow Table.

3. Làm thế nào để mở rộng thêm phương thức thanh toán trực tuyến như VNPay hay MoMo?

Hệ thống đã thiết kế sẵn bảng Orders với trường PaymentIDPaid (bit). Lập trình viên chỉ cần triển khai thêm Controller PaymentController để gửi URL chuyển hướng sang cổng thanh toán và xử lý kết quả phản hồi qua callback URL do cổng thanh toán cung cấp.

4. Cơ chế đồng bộ tồn kho được xử lý ra sao khi có nhiều người cùng đặt hàng?

Khi khách hàng xác nhận "Đặt hàng", hệ thống sẽ khởi tạo một Database Transaction. Hệ thống kiểm tra số lượng tồn (UnitsInStock trong bảng Products), nếu đủ số lượng sẽ trừ tồn kho tương ứng và thêm bản ghi vào OrderDetails. Nếu không đủ hàng, toàn bộ giao dịch được Rollback an toàn nhằm tránh lỗi bán quá số lượng (Overselling).

5. Chi phí duy trì hệ thống hàng tháng là bao nhiêu?

Chi phí vận hành định kỳ rất thấp, chỉ bao gồm phí thuê máy chủ Cloud VPS (từ 300.000 - 500.000 VNĐ/tháng) và phí duy trì tên miền hàng năm, hoàn toàn không phát sinh phí phần mềm hay phí hoa hồng trên doanh thu đơn hàng.


Kết luận

Đồ án "Website Bán Thực Phẩm - ShoppingFood" của nhóm sinh viên Trường Đại học Công nghệ TP.HCM (HUTECH) là một công trình nghiên cứu ứng dụng thực tiễn, giải quyết thành công các thách thức cốt lõi trong chuyển đổi số ngành bán lẻ thực phẩm. Việc ứng dụng công nghệ ASP.NET Core MVC kết hợp cơ sở dữ liệu Microsoft SQL Server không chỉ đem lại hiệu năng vận hành vượt trội, khả năng bảo mật tin cậy mà còn tối ưu hóa chi phí đầu tư cho doanh nghiệp. Kiến trúc phân tầng rõ ràng cùng cấu trúc cơ sở dữ liệu chuẩn hóa của dự án mở ra nền tảng vững chắc để tiếp tục mở rộng, tích hợp thanh toán tự động và phát triển hệ sinh thái di động toàn diện trong tương lai.