Giới thiệu dự án

Thị trường thương mại điện tử (E-commerce) tại Việt Nam duy trì tốc độ tăng trưởng bình quân trên 25%/năm giai đoạn 2022–2025 (theo Hiệp hội Thương mại điện tử Việt Nam - VECOM). Trong phân khúc bán lẻ phụ kiện cao cấp và đồng hồ đeo tay, các kênh bán hàng truyền thống bộc lộ nhiều điểm nghẽn nghiêm trọng: chi phí mặt bằng chiếm 18–25% doanh thu, phạm vi tiếp cận khách hàng cục bộ, và quy trình xử lý đơn hàng thủ công dẫn đến tỷ lệ thất thoát và sai sót tồn kho lên đến 12%.

Problem statement tập trung giải quyết bài toán: Các cửa hàng bán lẻ đồng hồ quy mô vừa và nhỏ thiếu hụt một nền tảng số hóa tập trung, kết hợp liền mạch giữa giới thiệu danh mục sản phẩm, đặt hàng trực tuyến, tích hợp thông tin dịch vụ bảo dưỡng/sửa chữa và phản hồi đánh giá minh bạch.

Mục tiêu cụ thể của đồ án:

  1. Nghiên cứu và ứng dụng phương pháp Phân tích Thiết kế Hướng đối tượng (OOAD) tuân thủ bộ nguyên tắc SOLID trong xây dựng kiến trúc phần mềm.
  2. Thiết kế và hiện thực hóa hệ thống website thương mại điện tử chuyên ngành đồng hồ dựa trên ngôn ngữ PHP 8.2 kết hợp Laravel Framework 10.x và cơ sở dữ liệu MySQL 8.0.
  3. Tối ưu hóa trải nghiệm người dùng đa thiết bị (Responsive Web Design) và cung cấp giao diện quản trị (Admin Dashboard) trực quan, tự động hóa quy trình quản lý danh mục, bài viết, đơn hàng, người dùng và từ khóa tìm kiếm.
  4. Đảm bảo an toàn thông tin với các chuẩn mã hóa mật khẩu Bcrypt, cơ chế chống tấn công CSRF (Cross-Site Request Forgery), XSS (Cross-Site Scripting) và SQL Injection.

Giải pháp được chọn là mô hình MVC (Model-View-Controller) trên nền tảng PHP/Laravel nhằm phân tách rành mạch logic nghiệp vụ, truy xuất dữ liệu và giao diện trình diễn, giúp tăng khả năng bảo trì và nâng cấp.

Kết quả kỳ vọng định lượng:

  • Thời gian tải trang trung bình (Page Load Time) dưới 1.2 giây với tải trọng 100 người dùng đồng thời.
  • Rút ngắn thời gian xử lý đơn hàng từ 15 phút (thủ công) xuống dưới 30 giây (tự động hóa).
  • Độ chính xác đồng bộ trạng thái đơn hàng và tồn kho đạt 99.9%.

Phạm vi đề tài tập trung vào quy trình B2C (Business-to-Consumer) cho cửa hàng bán lẻ đồng hồ và dịch vụ hậu mãi; giới hạn không tích hợp cổng thanh toán quốc tế đa tiền tệ phức tạp mà tập trung vào phương thức COD và chuyển khoản ngân hàng nội địa.


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 giải pháp xây dựng website thương mại điện tử phổ biến trên thị trường cho thấy sự đánh đổi rõ rệt giữa chi phí, tính tùy biến và quyền kiểm soát dữ liệu:

Tiêu chí Nền tảng SaaS (Shopify / Haravan) Nền tảng CMS (WordPress + WooCommerce) Hệ thống Custom (Laravel 10.x + MySQL 8.0)
Chi phí vận hành Cao (Phí thuê bao tháng + % phí giao dịch) Trung bình (Hosting + Plugin bản quyền) Thấp (Tối ưu trên hạ tầng VPS/Cloud tiêu chuẩn)
Khả năng mở rộng & Tùy biến Giới hạn theo API và Theme đóng Trung bình (Dễ xung đột plugin khi scale) Rất cao (Toàn quyền kiểm soát source code & Database)
Hiệu năng & Tải trọng Phụ thuộc hạ tầng nhà cung cấp Chậm khi dữ liệu lớn (Dư thừa query overhead) Cao (Tối ưu query Eloquent, Caching chuyên sâu)
Bảo mật mã nguồn Do bên thứ ba quản lý Nguy cơ cao từ lỗ hổng plugin bên thứ ba Chủ động kiểm soát theo chuẩn OWASP Top 10

Phân tích yêu cầu chức năng theo mô hình MoSCoW:

  • Must have (Bắt buộc): Xác thực phân quyền (RBAC), quản lý sản phẩm đa biến thể, giỏ hàng, đặt hàng (Checkout), quản lý trạng thái đơn hàng, tra cứu dịch vụ sửa chữa.
  • Should have (Nên có): Đánh giá/bình luận sản phẩm sau mua hàng, quản lý banner slide, quản lý bài viết tin tức/blog SEO, quản lý từ khóa tìm kiếm.
  • Could have (Có thể có): Lọc nâng cao theo khoảng giá, thương hiệu, loại dây, cơ cấu máy (Automatic/Quartz).
  • Won't have (Chưa làm trong phiên bản này): Đa ngôn ngữ (i18n), Chatbot AI tư vấn tự động.

Thiết kế hệ thống

Kiến trúc tổng thể được xây dựng theo mô hình phân tầng 3 lớp (3-Tier Architecture) kết hợp mô hình MVC trong Laravel:

graph TD
    Client[Client Browser / Mobile Web] -->|HTTP/HTTPS Request| WebServer[Nginx 1.24 Web Server]
    WebServer -->|FastCGI / PHP-FPM| Router[Laravel Routing & Middleware]
    Router -->|Authenticate & Validate| Controller[HTTP Controllers]
    Controller -->|Business Logic| Service[Service Layer / Business Logic]
    Service -->|Query via Eloquent ORM| Model[Data Models]
    Model -->|Read/Write SQL| Database[(MySQL 8.0 Database)]
    Model -->|Cache Key-Value| Cache[(Redis 7.0 Cache)]
    Controller -->|Bind Data| View[Blade Template Engine / View Layer]
    View -->|Render HTML/CSS/JS| Client

Stack công nghệ chi tiết:

  • Backend: PHP 8.2.x, Laravel Framework 10.x (sử dụng Eloquent ORM, Blade Template Engine, Laravel Routing, Artisan CLI).
  • Database: MySQL 8.0.x (Storage Engine: InnoDB, hỗ trợ Transaction ACID và Foreign Key Constraints).
  • Frontend: HTML5, CSS3, JavaScript (ES6), Bootstrap 5.3 Framework, FontAwesome.
  • Hạ tầng & Công cụ: Nginx 1.24, Redis 7.0 (Cache/Session), Git/GitHub, Composer 2.6.

Thiết kế cơ sở dữ liệu quan hệ (RDBMS) gồm các thực thể cốt lõi: users, categories, products, orders, order_details, articles, keywords, menus, slides, reviews. Mối quan hệ thực thể bảo toàn toàn vẹn tham chiếu thông qua các khóa ngoại:

  • products.category_id $\rightarrow$ categories.id (1-N)
  • order_details.order_id $\rightarrow$ orders.id (1-N, Cascade on Delete)
  • order_details.product_id $\rightarrow$ products.id (N-1)
  • reviews.product_id $\rightarrow$ products.idreviews.user_id $\rightarrow$ users.id (N-1)

Cơ chế an toàn và hiệu năng:

  • Áp dụng kỹ thuật Indexed B-Tree trên các cột khóa ngoại và trường thường xuyên tìm kiếm (slug, status, created_at).
  • Middleware xác thực AuthMiddlewareAdminMiddleware kiểm soát chặt chẽ quyền truy cập vào endpoint /admin/*.
  • Chuẩn hóa đầu vào qua FormRequest Validation ngăn chặn tấn công SQL Injection và XSS.

Methodology

Dự án áp dụng phương pháp phát triển Agile/Scrum với vòng lặp 4 Sprint (mỗi Sprint kéo dài 2 tuần):

  • Sprint 1 (Tuần 1–2): Khảo sát nghiệp vụ, đặc tả Use Case, thiết kế mô hình thực thể ERD, thiết lập khung kiến trúc Laravel và cấu hình Database.
  • Sprint 2 (Tuần 3–4): Xây dựng module Admin: Quản lý danh mục, quản lý sản phẩm, quản lý từ khóa, quản lý menu và bài viết tin tức.
  • Sprint 3 (Tuần 5–6): Xây dựng module Client: Trang chủ, chi tiết sản phẩm, giỏ hàng, module đặt hàng, trang tra cứu dịch vụ và hệ thống đánh giá.
  • Sprint 4 (Tuần 7–8): Tích hợp kiểm thử hệ thống, tối ưu hóa truy vấn SQL, kiểm tra bảo mật, UAT và đóng gói triển khai.

Đánh giá rủi ro và giải pháp khắc phục:

Rủi ro kỹ thuật Mức độ Biện pháp giảm thiểu
Tranh chấp ghi tồn kho khi nhiều khách cùng đặt hàng Cao Sử dụng Database Transactions kết hợp Pessimistic Locking (lockForUpdate)
Thời gian phản hồi trang chậm khi danh mục sản phẩm lớn Trung bình Đánh Index cột tìm kiếm, áp dụng Eager Loading (with()) giảm N+1 Query
Lỗi dữ liệu đầu vào làm gián đoạn luồng đặt hàng Trung bình Triển khai lớp Validation chặt chẽ trên cả Client-side và Server-side FormRequest

Implementation và kết quả

Development process

Cấu trúc thư mục dự án tuân thủ tiêu chuẩn PSR-4 và kiến trúc module của Laravel:

app/
database/
resources/

Dưới đây là đoạn mã nguồn xử lý nghiệp vụ đặt hàng an toàn sử dụng DB::transaction nhằm đảm bảo tính toàn vẹn dữ liệu (ACID) và tránh xung đột tồn kho:

namespace App\Http\Controllers\Client;

use App\Http\Controllers\Controller;
use App\Http\Requests\CheckoutRequest;
use App\Models\Order;
use App\Models\OrderDetail;
use App\Models\Product;
use Illuminate\Support\Facades\DB;
use Exception;

class CheckoutController extends Controller
{
    public function processOrder(CheckoutRequest $request)
    {
        $cart = session()->get('cart', []);
        if (empty($cart)) {
            return redirect()->route('cart.index')->with('error', 'Giỏ hàng đang trống.');
        }

        DB::beginTransaction();
        try {
            $totalAmount = 0;
            foreach ($cart as $id => $item) {
                $totalAmount += $item['price'] * $item['quantity'];
            }

            // 1. Khởi tạo đơn hàng mới
            $order = Order::create([
                'user_id'          => auth()->id() ?? null,
                'customer_name'    => $request->validated('customer_name'),
                'customer_email'   => $request->validated('customer_email'),
                'customer_phone'   => $request->validated('customer_phone'),
                'shipping_address' => $request->validated('shipping_address'),
                'total_amount'     => $totalAmount,
                'order_status'     => Order::STATUS_PENDING,
                'payment_method'   => $request->validated('payment_method'),
                'note'             => $request->validated('note'),
            ]);

            // 2. Lưu chi tiết đơn hàng và cập nhật tồn kho an toàn
            foreach ($cart as $productId => $item) {
                $product = Product::where('id', $productId)->lockForUpdate()->firstOrFail();

                if ($product->stock_quantity < $item['quantity']) {
                    throw new Exception("Sản phẩm {$product->name} không đủ số lượng trong kho.");
                }

                OrderDetail::create([
                    'order_id'   => $order->id,
                    'product_id' => $productId,
                    'quantity'   => $item['quantity'],
                    'price'      => $item['price'],
                ]);

                // Trừ tồn kho sản phẩm
                $product->decrement('stock_quantity', $item['quantity']);
            }

            DB::commit();
            session()->forget('cart');

            return redirect()->route('checkout.success', ['order_code' => $order->id])
                             ->with('success', 'Đặt hàng thành công!');
        } catch (Exception $e) {
            DB::rollBack();
            return redirect()->back()->with('error', 'Lỗi xử lý đơn hàng: ' . $e->getMessage());
        }
    }
}

Testing và validation

Quá trình kiểm thử được thực hiện qua Unit Test (PHPUnit), Integration Test và User Acceptance Testing (UAT):

Hạng mục kiểm thử Công cụ / Phương pháp Kịch bản / Tiêu chí Kết quả đạt được
Unit Testing PHPUnit 10.x Kiểm tra validation, tính toán giá trị đơn hàng, mã hóa mật khẩu 48/48 Test cases Pass (100%)
Integration Testing Laravel HTTP Tests Luồng đặt hàng, đăng ký/đăng nhập, CRUD danh mục, phân quyền Admin 32/32 Test cases Pass (100%)
Tải trọng & Hiệu năng Apache JMeter 5.6 100 Virtual Users (VU), Ramp-up period 10s, 1000 requests Response Time trung bình 420ms, Error rate 0.0%
Code Coverage Xdebug + PHPUnit Tỷ lệ bao phủ kiểm thử trên các Service và Controller Đạt 84.6% Code Coverage

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

Hệ thống đã hoàn thiện 100% các tính năng đề ra theo kế hoạch ban đầu:

  • Module Quản trị (Admin): Quản lý toàn diện Danh mục, Sản phẩm, Thành viên, Từ khóa tìm kiếm, Menu điều hướng, Tin tức/Bài viết, Quản lý đơn hàng (phân luồng: Chờ xử lý $\rightarrow$ Đang giao $\rightarrow$ Hoàn thành $\rightarrow$ Hủy), Quản lý slide banner và hệ thống phản hồi/đánh giá.
  • Module Người dùng (Client): Giao diện chuẩn UI/UX, hỗ trợ tìm kiếm sản phẩm theo từ khóa, lọc theo danh mục, xem chi tiết thông số kỹ thuật đồng hồ, quản lý giỏ hàng session, đặt hàng nhanh, tra cứu lịch sử đơn cá nhân và gửi đánh giá sản phẩm.

So sánh chỉ số mục tiêu ban đầu và thực tế:

Chỉ số hiệu năng (KPIs) Mục tiêu ban đầu Thực tế đạt được Đánh giá
Thời gian phản hồi trang (TTFB) $< 600\text{ ms}$ $280\text{ ms}$ Vượt 53.3% so với mục tiêu
Tỷ lệ hoàn thành đơn hàng (Checkout Completion) $> 95%$ $99.2%$ Hoạt động ổn định
Mức độ hài lòng của người dùng thử nghiệm (UAT Score) $> 4.0/5.0$ $4.65/5.0$ 93% người dùng đánh giá tốt

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

  1. Chuẩn hóa kiến trúc MVC theo nguyên tắc SOLID: Thay vì viết code xử lý phân tán theo phong cách PHP thuần (Procedural PHP), dự án áp dụng chặt chẽ kiến trúc hướng đối tượng của Laravel 10, phân tách rào cản giữa Model, View và Controller, giúp giảm độ phức tạp mã nguồn (Cyclomatic Complexity) xuống dưới 8 cho mỗi hàm nghiệp vụ.
  2. Cơ chế chống Overselling với Database Locking: Ứng dụng kỹ thuật Pessimistic Locking (lockForUpdate) trong DB::transaction, loại bỏ hoàn toàn hiện tượng Race Condition khi có đồng thời nhiều người mua cùng một mặt hàng có số lượng tồn kho giới hạn.
  3. Module quản lý từ khóa tìm kiếm động: Hệ thống tự động ghi nhận và phân loại tần suất từ khóa tìm kiếm của khách hàng, giúp ban quản trị nhận diện xu hướng tiêu dùng thời gian thực để điều chỉnh chiến lược nhập hàng.
  4. Tối ưu hóa hiệu năng truy vấn: Triển khai Eager Loading (with(['category', 'reviews'])) trên Eloquent ORM, giảm số lượng câu truy vấn database từ $N+1$ xuống còn 2 queries cố định, cải thiện tốc độ tải trang sản phẩm lên 68% so với phương pháp lặp query truyền thống.

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

Hệ thống được thiết kế sẵn sàng cho việc triển khai thực tế tại các cửa hàng kinh doanh đồng hồ và phụ kiện thời trang.

Kịch bản sử dụng thực tế:

  • Khách hàng: Truy cập website trên smartphone, tìm kiếm mẫu đồng hồ thể thao cơ lộ máy, xem thông số chống nước và bình luận từ người mua trước, thêm vào giỏ hàng và tiến hành đặt hàng chỉ với 3 thao tác cơ bản trong 45 giây.
  • Nhân viên quản trị: Nhận thông báo đơn hàng mới trên dashboard, cập nhật trạng thái "Đang vận chuyển", kiểm tra lịch hẹn sửa chữa và xuất báo cáo doanh thu theo ngày.

Yêu cầu hạ tầng triển khai tiêu chuẩn:

  • Server: VPS Linux (Ubuntu 22.04 LTS), 2 vCPU, 4GB RAM, 40GB SSD NVMe.
  • Web Server: Nginx 1.24 với HTTP/2 và SSL/TLS (Let's Encrypt).
  • Runtime: PHP 8.2-FPM (kèm extensions: pdo_mysql, mbstring, openssl, bcmath, curl, gd).
  • Database: MySQL 8.0 với buffer pool size cấu hình tối thiểu 1GB.

Phân tích hiệu quả kinh tế (ROI):

  • Chi phí đầu tư hạ tầng hosting: ~150.000 – 300.000 VNĐ/tháng (tiết kiệm hơn 85% so với phí duy trì gian hàng trên các nền tảng đóng).
  • Tiết kiệm 40 giờ công/tháng cho nhân sự xử lý đơn và thống kê kho. Điểm hòa vốn (Break-even point) ước tính đạt được sau 3–4 tháng vận hành.

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

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

  • Hệ thống chưa tích hợp cổng thanh toán trực tuyến tự động (như VNPay, MoMo, ZaloPay API) kèm webhook tự động xác nhận giao dịch.
  • Cơ chế tìm kiếm hiện sử dụng mệnh đề LIKE %keyword% của SQL, chưa tích hợp Full-Text Search chuyên dụng (Elasticsearch hoặc Meilisearch) cho khối lượng dữ liệu hàng trăm nghìn sản phẩm.
  • Chưa có hệ thống gửi email/SMS thông báo trạng thái đơn hàng tự động thông qua Queue/Job Worker.

Hướng phát triển tiếp theo:

  1. Tích hợp cổng thanh toán trực tuyến qua cổng thanh toán nội địa VNPay và mã QR động VietQR.
  2. Nâng cấp bộ máy tìm kiếm sử dụng Laravel Scout kết hợp Meilisearch nhằm hỗ trợ tìm kiếm mờ (Fuzzy Search) và gợi ý tức thì (Typeahead).
  3. Ứng dụng Redis Queue để xử lý tác vụ gửi email xác nhận đơn hàng không đồng bộ (Asynchronous Email Notification).
  4. Xây dựng Restful API hoàn chỉnh để hỗ trợ kết nối ứng dụng di động (Mobile App iOS/Android bằng Flutter/React Native).

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

  • Sinh viên & Học viên CNTT: Nguồn tài liệu tham khảo hoàn chỉnh về cách áp dụng mô hình MVC, OOAD và framework Laravel 10 vào bài toán thực tế, cung cấp mẫu thiết kế Use Case, Sequence Diagram và Database Schema chuẩn mực.
  • Lập trình viên Web (Developers): Cung cấp cấu trúc code sạch (Clean Code), mẫu xử lý Transaction chống lỗi Race Condition và kỹ thuật tối ưu hóa truy vấn cơ sở dữ liệu trên Eloquent ORM.
  • Chủ cửa hàng & Doanh nghiệp vừa và nhỏ: Sở hữu một giải pháp website thương mại điện tử chuyên nghiệp, tự chủ hoàn toàn mã nguồn, tiết kiệm chi phí bản quyền hàng tháng và dễ dàng tùy biến theo nhận diện thương hiệu.
  • Nhà nghiên cứu & Giảng viên: Cung cấp dữ liệu thực nghiệm về đánh giá hiệu năng giữa kiến trúc Custom Web Application và các nền tảng CMS truyền thống trong môi trường đào tạo đại học.

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

1. Yêu cầu kỹ thuật tối thiểu để triển khai website lên môi trường Production là gì?

Hệ thống yêu cầu máy chủ Linux (khuyên dùng Ubuntu 20.04/22.04 LTS), web server Nginx hoặc Apache, PHP phiên bản $\ge 8.1$ (đầy đủ các tiện ích mở rộng: OpenSSL, PDO, Mbstring, Tokenizer, XML, Ctype, JSON, BCMath) và hệ quản trị cơ sở dữ liệu MySQL $\ge 5.7$ hoặc MariaDB $\ge 10.3$.

2. Website có khả năng chịu tải tối đa bao nhiêu người dùng cùng lúc?

Với cấu hình máy chủ tiêu chuẩn (2 Core CPU, 4GB RAM), hệ thống đáp ứng ổn định 100–150 người dùng tương tác đồng thời (Concurrent Users) với thời gian phản hồi trung bình $< 500\text{ ms}$. Khi kết hợp Redis Caching và CDN (Cloudflare), hệ thống có thể mở rộng xử lý tới 500–1.000 truy cập đồng thời mà không nghẽn tài nguyên.

3. Làm thế nào để tích hợp thêm các cổng thanh toán online như VNPay hoặc MoMo?

Hệ thống được thiết kế theo nguyên tắc mở rộng (Open/Closed Principle). Lập trình viên chỉ cần tạo thêm Service Provider chuyên trách thanh toán (ví dụ: VNPayService), định nghĩa endpoint nhận dữ liệu IPN (Instant Payment Notification) từ cổng thanh toán và cấu hình các khóa bí mật trong file .env.

4. Hệ thống đảm bảo an toàn dữ liệu khách hàng và phòng chống tấn công như thế nào?

Laravel tự động bảo vệ hệ thống trước các lỗi bảo mật phổ biến:

  • Tất cả các form gửi dữ liệu đều bắt buộc có @csrf token chống giả mạo yêu cầu.
  • Toàn bộ câu truy vấn qua Eloquent ORM sử dụng PDO Parameter Binding chống triệt để SQL Injection.
  • Mật khẩu người dùng được băm tự động bằng thuật toán Bcrypt với chi phí salt ngẫu nhiên.
  • Dữ liệu render ra View được tự động lọc qua hàm htmlspecialchars của Blade Engine ngăn chặn XSS.

5. Chi phí duy trì hệ thống hàng năm ước tính là bao nhiêu?

Chi phí vận hành bao gồm: Tên miền quốc tế (.com/.net: khoảng 250.000–350.000 VNĐ/năm), máy chủ Cloud VPS tiêu chuẩn (khoảng 1.500.000–2.500.000 VNĐ/năm), chứng chỉ bảo mật SSL (miễn phí thông qua Let's Encrypt). Tổng chi phí cố định chỉ khoảng 1.800.000–2.800.000 VNĐ/năm.


Kết luận

Đồ án tốt nghiệp "Thiết kế website bán đồng hồ qua mạng" của tác giả Nguyễn Thành Vinh (Trường Đại học Hải Phòng) đã giải quyết trọn vẹn bài toán xây dựng nền tảng thương mại điện tử chuyên ngành phụ kiện - đồng hồ. Thông qua việc ứng dụng phương pháp phân tích thiết kế hướng đối tượng OOAD, kết hợp sức mạnh kiến trúc MVC của Laravel Framework và cơ sở dữ liệu MySQL, hệ thống đạt được sự cân bằng tối ưu giữa tính năng nghiệp vụ phong phú, giao diện thân thiện và hiệu năng vận hành vượt trội.

Công trình không chỉ hoàn thành xuất sắc các mục tiêu học thuật đề ra mà còn chứng minh tính khả thi cao trong triển khai thương mại hóa thực tế, mở ra hướng ứng dụng hiệu quả cho các doanh nghiệp bán lẻ trong kỷ nguyên chuyển đổi số.