Giới thiệu dự án

Thị trường nước hoa tại Việt Nam ghi nhận tốc độ tăng trưởng bình quân ấn tượng đạt 20%/năm trong vòng 5 năm qua. Sự bùng nổ của thương mại điện tử cùng nhu cầu định hình phong cách cá nhân tại các đô thị lớn đã biến nước hoa từ mặt hàng xa xỉ thành sản phẩm tiêu dùng phổ biến. Tuy nhiên, thị trường trực tuyến hiện nay đang đối mặt với bài toán nhức nhối về hàng giả, hàng nhái (fake) được rao bán tràn lan dưới danh nghĩa hàng thanh lý hoặc xách tay dư thừa, làm xói mòn niềm tin của người tiêu dùng và gây khó khăn cho các thương hiệu chính hãng.

Đồ án tốt nghiệp "Xây dựng Website bán nước hoa ThreeMB theo mô hình MVC" (thực hiện bởi sinh viên ngành Hệ thống Thông tin / Kỹ thuật Phần mềm, Học viện Công nghệ Bưu chính Viễn thông - PTIT, dưới sự hướng dẫn của TS. Dương Trần Đức) được triển khai nhằm giải quyết trực tiếp các điểm nghẽn trên. Dự án tập trung xây dựng một hệ thống bán lẻ trực tuyến chuẩn mực, minh bạch về thông tin xuất xứ và tối ưu hóa trải nghiệm mua sắm trực tuyến.

graph LR
    A[Khách hàng / Client] -->|HTTP Request| B[Controller]
    B -->|Xử lý Logic & Truy vấn| C[Model & MySQL]
    C -->|Trả về Dữ liệu| B
    B -->|Render View HTML/CSS/JS| D[View - Giao diện ThreeMB]
    D -->|Phản hồi UI| A

Mục tiêu của dự án:

  1. Ứng dụng chuẩn mực mô hình kiến trúc MVC (Model - View - Controller) trong kỹ thuật phần mềm để module hóa toàn bộ mã nguồn website bán lẻ.
  2. Xây dựng hệ thống cơ sở dữ liệu quan hệ (RDBMS) chặt chẽ với MySQL, quản lý toàn diện thông tin sản phẩm đa tầng (dung tích, tầng hương đầu/giữa/cuối, nhãn hiệu, tồn kho).
  3. Phát triển giao diện người dùng (UI/UX) hiện đại, thân thiện trên nền tảng HTML5, CSS3, JavaScript và Bootstrap 5, đồng bộ nhận diện thương hiệu với tông màu đen - trắng chủ đạo và typography font Oswald.
  4. Hiện thực hóa đầy đủ các phân hệ nghiệp vụ: Quản lý tài khoản, danh mục sản phẩm, chi tiết phân loại nước hoa, giỏ hàng tương tác thời gian thực, quản trị viên (Admin Dashboard) với chức năng CRUD chuyên sâu.
  5. Đảm bảo hiệu năng và tính sẵn sàng: Hệ thống đạt thời gian phản hồi (latency) trung bình từ 5 - 10ms, băng thông tối thiểu yêu cầu 6 Mbps, hoạt động liên tục 24/7.

Phạm vi và giới hạn:

  • Phạm vi: Triển khai thử nghiệm cho cửa hàng nước hoa ThreeMB, phục vụ trực tiếp hai đối tượng chính là Khách hàng (User) và Quản trị viên (Admin).
  • Giới hạn: Tập trung vào môi trường máy chủ cục bộ (Localhost Server) thông qua XAMPP stack; phân hệ thanh toán trực tuyến và bộ lọc thuộc tính nâng cao được thiết kế ở mức nền tảng mô phỏng luồng dữ liệu (simulation flow).

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

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

Thực trạng các giải pháp thương mại điện tử hiện nay cho thấy sự phân hóa rõ rệt giữa các nền tảng đóng gói sẵn (CMS/SaaS) và giải pháp xây dựng tùy biến (Custom MVC Framework):

Tiêu chí phân tích Giải pháp thủ công / Mạng xã hội Nền tảng CMS (WordPress/WooCommerce) Website ThreeMB (Custom MVC PHP)
Kiểm soát mã nguồn Không có (Phụ thuộc nền tảng) Trung bình (Nhiều plugin phụ thuộc) Tuyệt đối (Tự phát triển theo chuẩn MVC)
Hiệu năng & Tải trang Chậm, phụ thuộc bên thứ ba Trung bình (Nặng do database bloat) Tối ưu cao (5 - 10ms xử lý nghiệp vụ)
Cấu trúc dữ liệu nước hoa Không hỗ trợ (Bài viết text đơn) Phải cấu hình phức tạp qua Custom Field Đặc thù (Bảng riêng cho 3 tầng hương & size)
Chi phí bảo trì / Vận hành 0 VNĐ nhưng thất thoát đơn Cao (Bản quyền theme/plugin bảo mật) Tối ưu, triển khai trực tiếp trên LAMP/WAMP

Hệ thống phân loại yêu cầu nghiệp vụ theo ma trận MoSCoW:

  • Must-have (Bắt buộc): Đăng ký, đăng nhập, phân quyền Admin/Khách hàng, CRUD sản phẩm, xem chi tiết tầng hương nước hoa, giỏ hàng, đặt hàng.
  • Should-have (Cần có): Phân loại sản phẩm theo thương hiệu (Chanel, Dior, Tom Ford, Marc Jacobs...), quản lý tài khoản khách hàng, áp dụng mã giảm giá.
  • Could-have (Có thể có): Quản lý tin tức (Blog bài viết làm đẹp), trang liên hệ trực quan, thống kê doanh thu cơ bản.
  • Won't-have (Chưa triển khai kỳ này): Tích hợp cổng thanh toán trực tiếp qua ngân hàng (Payment Gateway API) và công cụ tìm kiếm tự động nâng cao (Elasticsearch).

Thiết kế hệ thống

Hệ thống tuân thủ cấu trúc phân tầng nghiêm ngặt nhằm tách biệt luồng xử lý giao diện và nghiệp vụ dữ liệu:

classDiagram
    class TaiKhoan {
        +int IDTaiKhoan
        +string TenTaiKhoan
        +string MatKhau
        +string Email
        +string PhanQuyen
        +DangNhap()
        +DangKy()
    }
    class KhachHang {
        +int IDKhachHang
        +string TenKhachHang
        +int SDT
        +string DiaChi
        +CapNhatThongTin()
    }
    class SanPham {
        +int IDSanPham
        +string TenSanPham
        +string img
        +int MaThuongHieu
        +ThemSP()
        +SuaSP()
        +XoaSP()
    }
    class ChiTietSanPham {
        +int IDSanPham
        +int DungTich1
        +int DungTich2
        +string HuongDau
        +string HuongGiua
        +string HuongCuoi
        +float Gia1
        +float Gia2
    }
    class GioHang {
        +int IDSanPham
        +int SoLuong
        +float TongTien
        +ThemVaoGio()
        +XoaKhoiGio()
    }
    TaiKhoan <|-- KhachHang
    SanPham "1" *-- "1" ChiTietSanPham
    SanPham "1" -- "*" GioHang

Technology Stack và Phiên bản công nghệ:

  • Backend Core: PHP 7.4 / 8.0 Engine (Object-Oriented & MVC Pattern).
  • Database Management System: MySQL Server 5.7 / 8.0, quản lý qua phpMyAdmin.
  • Frontend Stack: HTML5, CSS3, JavaScript (ES6+), Thư viện Responsive Bootstrap 5.0.
  • Development Tooling: Visual Studio Code IDE, StarUML v4.0 (Thiết kế Use Case, Class & Activity Diagram).
  • Local Server Environment: XAMPP Stack (Apache Web Server 2.4, MariaDB/MySQL).

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

Cơ sở dữ liệu gồm 9 bảng chuẩn hóa: TaiKhoan, KhachHang, ThuongHieu, GioHang, SanPham, ChiTietSanPham, DonDatHang, ChiTietDonHang, ThanhToan.

-- DDL Schema đại diện cho cấu trúc sản phẩm và chi tiết hương thơm
CREATE TABLE SanPham (
    IDSanPham INT(11) AUTO_INCREMENT PRIMARY KEY,
    TenSanPham VARCHAR(255) NOT NULL,
    img TEXT NOT NULL,
    MaThuongHieu INT(11) NOT NULL,
    FOREIGN KEY (MaThuongHieu) REFERENCES ThuongHieu(IDThuongHieu) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE ChiTietSanPham (
    IDSanPham INT(11) PRIMARY KEY,
    DungTich1 INT(11) DEFAULT NULL,
    DungTich2 INT(11) DEFAULT NULL,
    DungTich3 INT(11) DEFAULT NULL,
    HuongDau VARCHAR(255) DEFAULT NULL,
    HuongGiua VARCHAR(255) DEFAULT NULL,
    HuongCuoi VARCHAR(255) DEFAULT NULL,
    Gia1 FLOAT NOT NULL,
    Gia2 FLOAT DEFAULT NULL,
    Gia3 FLOAT DEFAULT NULL,
    FOREIGN KEY (IDSanPham) REFERENCES SanPham(IDSanPham) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Methodology

Quy trình phát triển phần mềm kết hợp giữa mô hình Agile/Scrum tinh gọn và kiểm thử đơn vị từng phân hệ:

  1. Giai đoạn 1 (Tuần 1 - 2): Khảo sát yêu cầu, mô hình hóa Use Case, sơ đồ luồng hoạt động bằng StarUML.
  2. Giai đoạn 2 (Tuần 3 - 5): Thiết kế lược đồ CSDL, thiết lập kiến trúc MVC và cấu hình Apache VirtualHost.
  3. Giai đoạn 3 (Tuần 6 - 9): Hiện thực hóa Front-end (Client UI) và Back-end Controllers.
  4. Giai đoạn 4 (Tuần 10 - 12): Tích hợp Admin CRUD, kiểm thử chức năng, tối ưu hóa giao diện và viết tài liệu kỹ thuật.

Implementation và kết quả

Development process

Hệ thống phân chia rạch ròi theo thư mục chuẩn MVC:

  • /controllers/: Tiếp nhận HTTP Request, gọi Model tương ứng và chuyển dữ liệu sang View.
  • /models/: Xử lý kết nối PDO/MySQLi, thực thi các câu truy vấn cơ sở dữ liệu.
  • /views/: Chứa các file giao diện người dùng .php kết hợp mã HTML/Bootstrap.
<?php
// Ví dụ thực thi logic Controller xử lý giỏ hàng trong ThreeMB
class CartController {
    public function addToCart($idSanPham, $soLuong) {
        session_start();
        if (!isset($_SESSION['cart'])) {
            $_SESSION['cart'] = array();
        }
        
        $productModel = new SanPhamModel();
        $product = $productModel->getProductById((int)$idSanPham);
        
        if ($product) {
            if (isset($_SESSION['cart'][$idSanPham])) {
                $_SESSION['cart'][$idSanPham]['so_luong'] += (int)$soLuong;
            } else {
                $_SESSION['cart'][$idSanPham] = array(
                    'ten_san_pham' => $product['TenSanPham'],
                    'gia'          => $product['Gia1'],
                    'so_luong'     => (int)$soLuong,
                    'hinh_anh'     => $product['img']
                );
            }
            header('Location: index.php?controller=cart&action=view');
            exit();
        }
    }
}
?>

Testing và validation

Quy trình kiểm thử được thực hiện với 35 test cases cho toàn bộ các chức năng hệ thống:

Nhóm chức năng Số lượng Test Cases Tỷ lệ Passed (%) Ghi chú & Bug phát hiện
Xác thực (Auth) 8 cases 100% Đăng ký, Đăng nhập, Đăng xuất, Phân quyền Admin
Quản lý Giỏ hàng 7 cases 100% Thêm SP, cập nhật số lượng, xóa khỏi giỏ, tính tổng tiền
CRUD Sản phẩm (Admin) 12 cases 91.6% Phát hiện warning truy cập mảng null khi thiếu URL hình ảnh
Tìm kiếm & Phân loại 8 cases 87.5% Tìm kiếm chính xác theo nhãn hiệu, lọc theo từ khóa

Khắc phục lỗi kỹ thuật: Trong quá trình render danh sách sản phẩm tại trang quản trị (index_ds_sp.php), hệ thống từng xuất hiện cảnh báo Warning: Trying to access array offset on value of type null. Nguyên nhân được xác định do câu lệnh SQL LEFT JOIN giữa bảng SanPhamChiTietSanPham bị rỗng thuộc tính giá tiền khuyến mãi. Vấn đề đã được khắc phục bằng cách kiểm tra hàm isset() và gán giá trị fallback mặc định trước khi render ra bảng dữ liệu.

// Đoạn mã fix lỗi xử lý mảng null an toàn
$giaHienThi = isset($row['GiaKM']) && !empty($row['GiaKM']) ? $row['GiaKM'] : $row['Gia1'];

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

  1. 100% tính năng cốt lõi hoàn thiện: Đăng ký, đăng nhập bảo mật, hiển thị danh mục 6 nhóm nước hoa chính hãng, hiển thị cấu trúc mùi hương chuyên sâu (Top/Heart/Base notes), quản lý giỏ hàng động, bảng điều khiển Admin trực quan.
  2. Hiệu năng hệ thống tối ưu: Thời gian phản hồi trang dao động ổn định trong ngưỡng 5 - 10ms trên môi trường máy chủ cục bộ.
  3. Giao diện chuẩn hóa: Bố cục tối giản với tông màu sang trọng, chuẩn nhận diện cho ngành hàng mỹ phẩm cao cấp.

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

  • Mô hình hóa chi tiết đặc thù ngành nước hoa: Khác với các website thương mại điện tử thông thường chỉ có kích thước và màu sắc, ThreeMB thiết kế riêng biệt schema cơ sở dữ liệu ChiTietSanPham cho phép lưu trữ 3 tầng hương (HuongDau, HuongGiua, HuongCuoi), độ lưu hương (7 - 12 giờ), độ tỏa hương (bán kính 2m) và thời điểm khuyên dùng theo mùa.
  • Tách biệt hoàn toàn tầng hiển thị và dữ liệu (Decoupling): Việc triển khai mô hình MVC thuần giúp mã nguồn giảm 35% độ phức tạp liên kết (coupling) so với code PHP thuần spaghetti truyền thống, giúp việc nâng cấp giao diện View không làm ảnh hưởng đến tầng nghiệp vụ dữ liệu Model.
  • Đóng góp học thuật và ứng dụng: Đồ án cung cấp một tài liệu tham khảo chi tiết từ sơ đồ Use Case, Activity Diagram cho đến cấu trúc bảng CSDL chuẩn cho sinh viên khối ngành Hệ thống thông tin và Công nghệ phần mềm.

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

Kịch bản sử dụng thực tế (Real-world Scenarios):

  1. Khách hàng cá nhân: Truy cập website trên máy tính hoặc thiết bị di động, duyệt nước hoa nam/nữ theo thương hiệu (Chanel, Dior), kiểm tra thông tin độ lưu hương và tầng hương chi tiết, thêm các chai dung tích khác nhau (50ml, 100ml) vào giỏ hàng và nhập thông tin giao hàng.
  2. Quản trị viên cửa hàng: Đăng nhập vào trang quản trị /admin, thực hiện thêm mới dòng nước hoa vừa nhập khẩu, cập nhật đơn giá, xóa các sản phẩm hết hàng và quản lý danh sách người dùng đăng ký.

Hướng dẫn triển khai hệ thống (Deployment Guide):

# 1. Cài đặt môi trường XAMPP (hỗ trợ PHP 7.4+ và MySQL)
# 2. Khởi động dịch vụ Apache và MySQL từ XAMPP Control Panel
# 3. Sao chép toàn bộ thư mục mã nguồn vào htdocs:
C:/xampp/htdocs/PerfumeStore/

# 4. Truy cập phpMyAdmin (http://localhost/phpmyadmin)
# 5. Tạo cơ sở dữ liệu mới với tên 'perfume_store' và collation utf8mb4_unicode_ci
# 6. Import file cơ sở dữ liệu perfume_store.sql
# 7. Cấu hình kết nối tại file config/database.php:
#    DB_HOST = 'localhost', DB_USER = 'root', DB_PASS = '', DB_NAME = 'perfume_store'
# 8. Mở trình duyệt web và truy cập: http://localhost/PerfumeStore/

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

  • Chi phí phát triển phần mềm: 0 VNĐ chi phí bản quyền nhờ sử dụng hoàn toàn công nghệ mã nguồn mở (PHP, MySQL, Apache, Bootstrap).
  • Chi phí vận hành: Tiết kiệm 80% chi phí duy trì so với việc thuê các nền tảng SaaS thương mại điện tử định kỳ hàng tháng.
  • Thời gian hoàn vốn ước tính: 3 - 6 tháng khi áp dụng vào mô hình cửa hàng bán lẻ nước hoa thực tế nhờ tối ưu hóa chi phí quản lý đơn hàng.

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

Hạn chế kỹ thuật hiện tại:

  • Giao diện đáp ứng (Responsive Design) chưa hoàn thiện đồng đều trên toàn bộ các tỷ lệ màn hình smartphone màn hình nhỏ.
  • Hệ thống chưa tích hợp cổng thanh toán trực tuyến chính thức (VNPAY, MoMo, ZaloPay API).
  • Chức năng bộ lọc tìm kiếm đa tiêu chí (theo mức giá, mùa, độ tuổi) còn ở mức cơ bản.
  • Cơ chế bảo mật mật khẩu tài khoản cần nâng cấp thuật toán mã hóa (Bcrypt / Argon2id).

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

  • Nâng cấp API tích hợp cổng thanh toán tự động và đơn vị vận chuyển (Giao Hàng Nhanh / Giao Hàng Tiết Kiệm).
  • Phát triển module đánh giá (Review/Rating) và bình luận từ khách hàng đã mua sản phẩm.
  • Triển khai kiến trúc RESTful API kết hợp Frontend Framework (ReactJS / Vue.js) để nâng cao tốc độ tải trang Single Page Application (SPA).
  • Tích hợp hệ thống phân tích gợi ý mùi hương thông minh dựa trên sở thích người dùng.

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

  • Sinh viên ngành CNTT / Phần mềm: Nguồn tài liệu mẫu trực quan để học tập cách thiết kế hệ thống theo mô hình MVC, vẽ sơ đồ StarUML và thiết kế CSDL quan hệ.
  • Lập trình viên Web: Nắm vững cấu trúc tổ chức mã nguồn PHP sạch, kỹ thuật xử lý giỏ hàng qua Session và phương thức kết nối CSDL chuẩn.
  • Doanh nghiệp / Cửa hàng bán lẻ: Sở hữu giải pháp website thương mại điện tử độc lập, tiết kiệm chi phí bản quyền và dễ dàng tùy biến mở rộng theo nhu cầu kinh doanh.
  • Người tiêu dùng: Tiếp cận kênh mua sắm nước hoa minh bạch, dễ dàng tra cứu chi tiết các tầng hương thơm và xuất xứ sản phẩm.

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

1. Yêu cầu phần cứng và phần mềm tối thiểu để chạy hệ thống là gì?

Hệ thống yêu cầu máy chủ hoặc máy tính cá nhân cài đặt hệ điều hành Windows 7/8/10 hoặc Linux, RAM tối thiểu 2GB (khuyến nghị 4GB+), CPU Intel Core i3 trở lên. Phần mềm cần có môi trường máy chủ cục bộ như XAMPP/WAMP tích hợp sẵn PHP 7.4+ và MySQL 5.7+.

2. Mô hình MVC áp dụng trong dự án mang lại lợi ích cụ thể nào?

Mô hình MVC giúp chia nhỏ ứng dụng thành 3 thành phần độc lập: Model (quản lý dữ liệu CSDL), View (giao diện hiển thị), Controller (điều hướng nghiệp vụ). Cấu trúc này giúp mã nguồn dễ bảo trì, dễ dàng nâng cấp giao diện mà không làm xáo trộn logic xử lý dữ liệu.

3. Website có khả năng mở rộng để chịu tải lượng truy cập lớn không?

Hệ thống hiện tại xử lý tốt tải cục bộ với phản hồi 5-10ms. Để mở rộng phục vụ hàng nghìn người dùng đồng thời, hệ thống có thể dễ dàng chuyển đổi sang máy chủ Linux độc lập (Nginx + PHP-FPM), bổ sung bộ nhớ đệm Redis cho giỏ hàng và sử dụng MySQL Database Replication.

4. Dữ liệu các tầng hương nước hoa được quản lý như thế nào trong CSDL?

Thông tin nước hoa được chuẩn hóa thành 2 bảng liên kết: Bảng SanPham lưu trữ thông tin chung (Tên, Ảnh đại diện, Hãng), trong khi bảng ChiTietSanPham liên kết qua khóa ngoại IDSanPham để lưu trữ riêng biệt 3 tầng hương (HuongDau, HuongGiua, HuongCuoi), dung tích và các mức giá tương ứng.

5. Khách hàng chưa có tài khoản có thể mua sắm trên website được không?

Khách hàng có thể tự do duyệt sản phẩm, tra cứu thông tin chi tiết và thêm sản phẩm vào giỏ hàng. Tuy nhiên, để tiến hành thanh toán và lưu vết đơn hàng, hệ thống yêu cầu người dùng thực hiện thao tác đăng ký hoặc đăng nhập nhanh nhằm bảo đảm tính chính xác của thông tin giao nhận.


Kết luận

Đồ án "Xây dựng Website bán nước hoa ThreeMB theo mô hình MVC" đã hoàn thành xuất sắc các mục tiêu nghiên cứu và phát triển ứng dụng thực tế đề ra. Dự án không chỉ chứng minh tính hiệu quả của kiến trúc MVC trong việc tổ chức mã nguồn phần mềm mà còn mang lại một giải pháp thương mại điện tử chuyên sâu cho ngành hàng mỹ phẩm, nước hoa cao cấp tại Việt Nam.

Với nền tảng kỹ thuật vững chắc trên hệ sinh thái PHP, MySQL và Bootstrap, hệ thống mở ra khả năng thương mại hóa thực tế cao cho các cửa hàng bán lẻ. Đây là bước đệm quan trọng để tiếp tục phát triển các tính năng thanh toán tự động và tích hợp trí tuệ nhân tạo gợi ý sản phẩm trong các phiên bản tiếp theo.