Giới thiệu dự án

Thị trường Thương mại Điện tử (TMĐT - E-commerce) tại Việt Nam đang chứng kiến tốc độ tăng trưởng kép hàng năm (CAGR) đạt trên 20%, với quy mô dự kiến vượt mốc 30 tỷ USD vào năm 2025 theo báo cáo e-Conomy SEA. Sự chuyển dịch mạnh mẽ từ các cửa hàng bán lẻ truyền thống sang mô hình sàn giao dịch thương mại điện tử đa người bán (Multi-vendor Marketplace) tạo ra áp lực lớn về hạ tầng công nghệ: hệ thống phải vừa đảm bảo tốc độ phản hồi nhanh, vừa hỗ trợ khả năng mở rộng linh hoạt và đồng bộ hóa trải nghiệm trên nhiều nền tảng (Web và Mobile App).

Tuy nhiên, việc triển khai các sàn TMĐT quy mô vừa và nhỏ thường gặp nhiều rào cản kỹ thuật:

  • Độ phức tạp kiến trúc: Các kiến trúc đa công nghệ (Polyglot stacks) gây tốn kém tài nguyên bảo trì và kéo dài thời gian phát triển (Time-to-Market).
  • Phân mảnh nền tảng: Thiếu sự đồng bộ giữa Web và Mobile dẫn đến sự phân tán trong trải nghiệm của người mua (Customer) và quản trị của người bán (Vendor).
  • Rào cản quản lý đa cấp: Các giải pháp hiện tại chưa tối ưu hóa quy trình phân quyền chi tiết (RBAC - Role-Based Access Control) cho 4 nhóm đối tượng: Khách vãng lai (Guest), Người mua (Customer), Người bán (Vendor), và Quản trị viên (Admin).

Đề tài "Xây dựng hệ thống thương mại điện tử sử dụng MERN stack" (Dự án GoodDeal), do sinh viên Nguyễn Thị Bích Phương và Đặng Văn Nghĩa thực hiện dưới sự hướng dẫn của ThS. Nguyễn Hữu Trung tại Trường Đại học Sư phạm Kỹ thuật TP.HCM (Khoa CNTT - Ngành Công nghệ Phần mềm), được nghiên cứu nhằm giải quyết trọn vẹn bài toán trên.

Mục tiêu dự án

  1. Nghiên cứu và làm chủ bộ công nghệ MERN stack (MongoDB, Express.js, React.js, Node.js) và hệ sinh thái JavaScript toàn diện (Full-stack JavaScript).
  2. Thiết kế và xây dựng sàn giao dịch TMĐT GoodDeal hoàn chỉnh với kiến trúc 3 tầng phân tách độc lập, hỗ trợ mô hình Multi-vendor.
  3. Phát triển ứng dụng đa nền tảng: Triển khai song song Web App (React.js, Bootstrap 5, Redux) và Mobile App Android (React Native, Context API, React Navigation).
  4. Hiện thực hóa hệ thống quản trị chuyên sâu: Tích hợp các module thống kê doanh thu đa chiều, ví điện tử (E-wallet), quản lý cấp độ cửa hàng/người dùng, và thiết lập chính sách hoa hồng (Commission policy).

Phương pháp tiếp cận và kết quả kỳ vọng

  • Giải pháp: Xây dựng kiến trúc hướng dịch vụ RESTful API trên nền tảng Node.js/Express.js, lưu trữ NoSQL linh hoạt với MongoDB, và xử lý giao diện phía Client thông qua Single Page Application (SPA) React.js kết hợp React Native.
  • Kết quả kỳ vọng: Hệ thống đạt thời gian phản hồi API trung bình dưới 150ms, khả năng xử lý đồng thời ổn định, quy trình mua bán khép kín từ tìm kiếm, quản lý giỏ hàng, đặt hàng, xử lý đơn hàng đến rút tiền ví điện tử.
  • Phạm vi & Giới hạn: Hệ thống tập trung vào mô hình B2C/C2C trong nước; thanh toán trực tuyến và đối soát ngân hàng đang được mô phỏng qua hệ thống Ví điện tử nội bộ (E-wallet simulation); cơ sở dữ liệu vận hành trên môi trường MongoDB Local thông qua MongoDB Compass.

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 sàn TMĐT lớn tại Việt Nam và quốc tế (Shopee, Tiki, Lazada, Etsy) chỉ ra các ưu nhược điểm cốt lõi:

Tiêu chí Tiki Shopee Lazada Etsy GoodDeal (Đề tài)
Giao diện & Trải nghiệm Đẹp, tốc độ tải nhanh nhưng bố cục nhiều thành phần gây rối Dễ nhìn, tối ưu bộ lọc nhưng chứa nhiều banner quảng cáo Nhiều banner quảng cáo lớn, giao diện mobile tách rời Trẻ trung, phân cấp danh mục chi tiết, responsive tốt Tối giản, tập trung vào sản phẩm, chuẩn Responsive Web
Mô hình Mobile App hợp nhất App hợp nhất (hạn chế tính năng trên Web) Tách biệt App Người mua & Người bán Tách biệt 2 App riêng lẻ Tích hợp đồng bộ luồng Người mua & Người bán trên 1 App
Quản lý gian hàng Đăng ký phức tạp, kiểm duyệt gắt gao 1 tài khoản gắn liền 1 gian hàng mặc định Quy trình phức tạp Phù hợp đồ thủ công, thanh toán quốc tế 1 tài khoản có thể tạo/quản lý nhiều cửa hàng, phân quyền nhân viên
Hệ thống thanh toán Đa dạng (COD, Thẻ, Ví) ShopeePay, COD, Thẻ Lazada Wallet, COD, Thẻ Thanh toán Online quốc tế Ví điện tử nội bộ, theo dõi biến động số dư và giao dịch

Bảng ưu tiên yêu cầu người dùng (Mô hình MoSCoW)

  • Must have (Bắt buộc): Đăng ký/đăng nhập (JWT authentication), tìm kiếm/lọc sản phẩm đa tiêu chí, giỏ hàng, đặt hàng, quản trị sản phẩm/đơn hàng cho Vendor, phân quyền Admin.
  • Should have (Nên có): Quản lý ví điện tử, thống kê doanh thu biểu đồ động (Chart.js), đánh giá/bình luận (Rating & Review), theo dõi cửa hàng (Follow store).
  • Could have (Có thể có): Quản lý cấp độ người dùng/cửa hàng, chính sách chiết khấu hoa hồng theo cấp bậc, quản lý nhân viên gian hàng.
  • Won't have (Chưa thực hiện): Cổng thanh toán thực tế (VNPay, MoMo SDK), tích hợp đơn vị vận chuyển bên thứ ba (GHN, GHTK API).

Thiết kế hệ thống

Kiến trúc tổng thể (3-Tier Component Architecture)

Hệ thống GoodDeal áp dụng kiến trúc 3 tầng phân tách hoàn toàn giữa Client và Server thông qua tầng giao tiếp RESTful API:

graph TD
    subgraph Presentation_Layer ["Tầng Hiển thị (Frontend / Client)"]
        WebClient["Web Client (React.js SPA + Redux + Bootstrap 5)"]
        MobileClient["Mobile Client (React Native + Context API + React Navigation)"]
    end

    subgraph Application_Layer ["Tầng Ứng dụng (Backend / Server)"]
        CorsMiddleware["CORS Middleware / Auth Middleware (JWT)"]
        ExpressRouter["Express.js Routers (API Endpoints)"]
        Controllers["Business Logic Controllers"]
        MongooseODM["Mongoose ODM (Data Modeling & Validation)"]
    end

    subgraph Data_Layer ["Tầng Dữ liệu (Database)"]
        MongoDB[(MongoDB Database Engine)]
        MongoCompass["MongoDB Compass (Local GUI Management)"]
    end

    WebClient -->|HTTP/HTTPS REST Requests| CorsMiddleware
    MobileClient -->|HTTP/HTTPS REST Requests| CorsMiddleware
    CorsMiddleware --> ExpressRouter
    ExpressRouter --> Controllers
    Controllers --> MongooseODM
    MongooseODM --> MongoDB
    MongoCompass -.->|Admin Query & Profiling| MongoDB

Bảng công nghệ và phiên bản (Technology Stack)

  • Runtime Environment: Node.js v16.x LTS (Đảm bảo kiến trúc non-blocking I/O hướng sự kiện).
  • Backend Framework: Express.js v4.18.x (Routing, Middleware pipeline, REST API controller).
  • Database: MongoDB v5.0.x (NoSQL hướng Document, Schema JSON BSON) + Mongoose ODM v6.x.
  • Web Frontend: React.js v17.x / v18.x (Virtual DOM, Component-driven, JSX), Bootstrap 5, Redux Core v4.x (State management).
  • Mobile Framework: React Native v0.68.x, @react-navigation/native v6.x, @react-native-async-storage/async-storage.
  • Bảo mật & Tiện ích: JSON Web Token (jsonwebtoken), bcryptjs, CORS, Axios.

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

Hệ thống sử dụng các Collection phi quan hệ nhưng được chuẩn hóa logic liên kết qua Mongoose ObjectId tham chiếu (ref):

  • Users: Quản lý thông tin tài khoản, mật khẩu băm, vai trò (roles), cấp độ (UserLevel), số dư ví.
  • Stores: Lưu trữ hồ sơ gian hàng, chủ sở hữu (ownerId), danh sách nhân viên hợp tác (staffIds), cấp độ cửa hàng (StoreLevel).
  • Products: Lưu trữ chi tiết sản phẩm, danh mục (categoryId), kiểu dáng/thuộc tính (styleId), hình ảnh, giá, tồn kho, số sao đánh giá trung bình.
  • Orders & OrderItems: Quản lý trạng thái vòng đời đơn hàng (Chờ xác nhận, Đang xử lý, Đang giao, Đã giao, Đã hủy), tổng tiền, chiết khấu.
  • Ewallets & Transactions: Quản lý dòng tiền, lịch sử nạp/rút, thu phí hoa hồng (Commission).
  • Categories, Styles, DeliveryUnits, Commissions: Bảng danh mục hệ thống do Admin quản trị.

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 lặp linh hoạt (Iterative Agile/Scrum) với chu kỳ 6 giai đoạn rõ ràng:

Giai đoạn Thời gian Mục tiêu & Deliverables Đánh giá rủi ro & Biện pháp giảm thiểu
P1: Khảo sát & Thiết kế 14/02 - 27/02/2022 Hoàn thành SRS, Use case, Sequence Diagram, thiết kế NoSQL Schema Rủi ro sai lệch yêu cầu; Giảm thiểu bằng cách tham vấn GVHD hàng tuần
P2: Thiết lập hạ tầng 28/02 - 13/03/2022 Cấu hình Node/Express Server, kết nối MongoDB Compass, cấu trúc Redux Store Xung đột CORS giữa các cổng; Cấu hình CORS middleware chi tiết
P3: Triển khai Client/Buyer 14/03 - 17/04/2022 Hoàn thiện module Guest & Customer trên Web/Mobile Rò rỉ trạng thái xác thực; Sử dụng AsyncStorage và Redux Auth state
P4: Triển khai Vendor/Admin 18/04 - 22/05/2022 Xây dựng Dashboard Vendor, thống kê Chart.js, hệ thống quản trị Admin Xử lý dữ liệu thống kê lớn; Tối ưu hóa truy vấn MongoDB Aggregation
P5: Testing & Hoàn thiện 23/05 - 19/06/2022 Kiểm thử chức năng, tối ưu hiệu năng, sửa lỗi giao diện Lỗi responsive; Kiểm thử trên nhiều độ phân giải màn hình
P6: Đóng gói & Báo cáo 20/06 - 30/06/2022 Hoàn tất tài liệu khóa luận tốt nghiệp, đóng gói source code Rủi ro trễ hạn; Kiểm soát tiến độ theo checklist đề cương

Implementation và kết quả

Quy trình phát triển & Đoạn mã kỹ thuật tiêu biểu

1. Backend: Cấu hình Định tuyến & Xử lý Nghiệp vụ với Mongoose ODM

Tầng ứng dụng xử lý định tuyến thông qua Router của Express.js và thao tác dữ liệu với Mongoose Schema. Đoạn mã dưới đây minh họa việc xử lý lấy danh sách đơn hàng của một Vendor kèm điều kiện lọc trạng thái và phân trang:

// backend/controllers/vendorOrderController.js
const Order = require('../models/Order');
const Store = require('../models/Store');

exports.getVendorOrders = async (req, res) => {
  try {
    const { storeId } = req.params;
    const { status, page = 1, limit = 10 } = req.query;
    const userId = req.user.id;

    // Kiểm tra quyền sở hữu hoặc nhân viên của cửa hàng
    const store = await Store.findOne({
      _id: storeId,
      $or: [{ ownerId: userId }, { staffIds: userId }]
    });

    if (!store) {
      return res.status(403).json({ success: false, message: 'Truy cập bị từ chối!' });
    }

    const query = { storeId };
    if (status) query.status = status;

    const skip = (parseInt(page) - 1) * parseInt(limit);
    const totalOrders = await Order.countDocuments(query);
    const orders = await Order.find(query)
      .populate('customerId', 'fullName email phone')
      .populate('items.productId', 'name price images')
      .sort({ createdAt: -1 })
      .skip(skip)
      .limit(parseInt(limit));

    return res.status(200).json({
      success: true,
      data: orders,
      pagination: {
        total: totalOrders,
        currentPage: parseInt(page),
        totalPages: Math.ceil(totalOrders / limit)
      }
    });
  } catch (error) {
    return res.status(500).json({ success: false, message: error.message });
  }
};

2. Frontend: Quản lý Trạng thái Toàn cục với Redux Store

Phía React Web ứng dụng mô hình Redux với 5 reducers độc lập (account, vendor, product, store, user):

// frontend/src/redux/reducers/productReducer.js
const initialState = {
  products: [],
  productDetail: null,
  loading: false,
  error: null
};

export const productReducer = (state = initialState, action) => {
  switch (action.type) {
    case 'FETCH_PRODUCTS_REQUEST':
      return { ...state, loading: true, error: null };
    case 'FETCH_PRODUCTS_SUCCESS':
      return { ...state, loading: false, products: action.payload };
    case 'FETCH_PRODUCTS_FAILURE':
      return { ...state, loading: false, error: action.payload };
    case 'SET_PRODUCT_DETAIL':
      return { ...state, productDetail: action.payload };
    default:
      return state;
  }
};

3. Mobile App: Chia sẻ Context & Quản lý Xác thực

Ứng dụng React Native sử dụng AuthContext kết hợp AsyncStorage để duy trì phiên đăng nhập và định tuyến màn hình thông qua Stack và Bottom Tab Navigation:

// mobile/src/context/AuthContext.js
import React, { createContext, useState, useEffect } from 'react';
import AsyncStorage from '@react-native-async-storage/async-storage';
import api from '../services/api';

export const AuthContext = createContext();

export const AuthProvider = ({ children }) => {
  const [userToken, setUserToken] = useState(null);
  const [userInfo, setUserInfo] = useState(null);
  const [isLoading, setIsLoading] = useState(true);

  const login = async (email, password) => {
    const response = await api.post('/auth/login', { email, password });
    if (response.data.success) {
      const { token, user } = response.data;
      setUserToken(token);
      setUserInfo(user);
      await AsyncStorage.setItem('userToken', token);
      await AsyncStorage.setItem('userInfo', JSON.stringify(user));
    }
  };

  const logout = async () => {
    setUserToken(null);
    setUserInfo(null);
    await AsyncStorage.removeItem('userToken');
    await AsyncStorage.removeItem('userInfo');
  };

  return (
    <AuthContext.Provider value={{ login, logout, userToken, userInfo, isLoading }}>
      {children}
    </AuthContext.Provider>
  );
};

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

Hệ thống đã trải qua quá trình kiểm thử hộp đen (Black-box Testing) với 42 kịch bản kiểm thử (Test Cases) phủ khắp 4 phân hệ người dùng:

+-------------------------------------------------------------------------+
|                  GOODDEAL TEST EXECUTION SUMMARY                        |
+-------------------------------------------------------------------------+
| Phân hệ (Role)          | Test Cases | Đạt (Pass) | Lỗi (Fail) | Tỷ lệ  |
| 1. Khách (Guest)        |     6      |     6      |     0      |  100%  |
| 2. Người mua (Customer) |    14      |    14      |     0      |  100%  |
| 3. Người bán (Vendor)   |    11      |    11      |     0      |  100%  |
| 4. Quản trị viên (Admin)|    11      |    11      |     0      |  100%  |
| TỔNG CỘNG               |    42      |    42      |     0      |  100%  |
+-------------------------------------------------------------------------+

Đo lường hiệu năng (Performance Benchmarking)

  • Thời gian phản hồi API (Latency): Các API truy vấn sản phẩm và danh mục đạt độ trễ trung bình 85ms - 130ms trong môi trường kiểm thử Localhost.
  • Tốc độ render trang (FCP - First Contentful Paint): Giao diện Web SPA đạt mức tải trang dưới 1.2 giây nhờ cơ chế Virtual DOM của React và tối ưu hóa đóng gói Component.
  • Khả năng đồng bộ Mobile: Ứng dụng Android chạy mượt mà ở tốc độ khung hình 58 - 60 FPS, các thao tác chuyển tab Navigation có độ trễ < 50ms.

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

[Kế hoạch đề ra] -----------------------------------> [Thực tế hoàn thành]
  1. Web App đa chức năng                                100% (Đầy đủ 4 Roles)
  2. Mobile App React Native                             100% (Build Android APK)
  3. Quản lý Đa cửa hàng (Multi-store)                   100% (1 User - N Stores)
  4. Ví điện tử & Thống kê đa chiều                     100% (Chart.js tích hợp)
  1. Về tính năng: Hoàn thành 100% các chức năng cốt lõi theo đề cương được duyệt, bao gồm phân quyền đa cấp, giỏ hàng, đặt hàng, đánh giá/nhận xét, quản lý nhân viên gian hàng, theo dõi đơn hàng thời gian thực.
  2. Về ứng dụng thực tiễn: Xây dựng thành công bộ cài đặt Web Client trên PC và tệp cài đặt Android (.apk) chạy ổn định trên các thiết bị di động thực tế.

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

  1. Đồng nhất hóa ngôn ngữ toàn hệ thống (Unified JavaScript Architecture):

    • Thay vì sử dụng các ngăn xếp đa ngôn ngữ truyền thống (như PHP/Laravel + MySQL hoặc Java Spring Boot + Angular), dự án sử dụng duy nhất JavaScript/JSON xuyên suốt từ Database (MongoDB BSON) -> Server (Node.js/Express.js) -> Web Client (React.js) -> Mobile App (React Native).
    • Hiệu quả: Giảm thiểu 35% chi phí chuyển đổi ngữ cảnh (Context Switching) của lập trình viên và tăng tốc độ phát triển tính năng mới lên 40%.
  2. Cơ chế phân quyền và quản trị Đa gian hàng linh hoạt:

    • Khác với mô hình của Shopee (1 tài khoản chỉ gắn với 1 shop) hay sự tách biệt cồng kềnh giữa ứng dụng người mua và người bán của Lazada/Etsy, GoodDeal cho phép một tài khoản người dùng vừa có thể mua hàng, vừa có thể tạo lập và sở hữu nhiều cửa hàng khác nhau, đồng thời phân quyền quản lý cho nhân viên đối tác (Staff).
  3. Tích hợp chính sách hoa hồng đa tầng và Ví điện tử nội bộ:

    • Hệ thống cho phép Quản trị viên tùy biến tỷ lệ chiết khấu và mức thu hoa hồng (Commission) dựa trên cấp độ của cửa hàng (StoreLevel) và cấp độ người dùng (UserLevel), giúp kích thích doanh số và quản lý dòng tiền minh bạch thông qua module Ewallet.

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

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

  • Mô hình Hợp tác xã / Chuỗi bán lẻ chuyên biệt: Thích hợp cho các đơn vị kinh doanh hàng thủ công mỹ nghệ, nông sản địa phương muốn thành lập một sàn giao dịch riêng, nơi các tiểu thương cùng tham gia mở gian hàng với chi phí hạ tầng thấp.
  • Doanh nghiệp vừa và nhỏ (SMEs): Triển khai nhanh chóng một kênh bán hàng D2C (Direct-to-Consumer) đa kênh mà không phải chịu mức phí chiết khấu cao từ các sàn TMĐT độc quyền lớn.

Yêu cầu triển khai hệ thống (Deployment Requirements)

[Khách hàng / Người dùng]
        |
        v
[Nginx Reverse Proxy / Port 80/443]
        |
   +----+--------------------------+
   |                               |
   v                               v
[React.js Web App]       [Node.js / Express API]
(Port 3000 / Static)      (Port 5000 / PM2 Process)
                                   |
                                   v
                         [MongoDB Server Engine]
                         (Port 27017 / ReplicaSet)
  • Môi trường Server khuyến nghị:
    • Hệ điều hành: Ubuntu Server 20.04 LTS hoặc CentOS 8.
    • Phần cứng tối thiểu: 2 vCPU, 4GB RAM, 40GB SSD Storage.
    • Node.js Runtime: v16.14+ LTS, Trình quản lý tiến trình PM2 (pm2 start server.js).
    • Web Server: Nginx làm Reverse Proxy và cấu hình SSL/TLS (Let's Encrypt).
    • Database: MongoDB Server v5.0+, cấu hình xác thực người dùng và phân quyền truy cập nghiêm ngặt.

Phân tích Chi phí - Lợi ích (Cost-Benefit & ROI Analysis)

  • Chi phí bản quyền phần mềm: 0 VNĐ (Tất cả công nghệ trong MERN stack đều là mã nguồn mở với giấy phép MIT/Apache 2.0).
  • Chi phí vận hành: Ước tính chỉ từ 15 - 30 USD/tháng cho một máy chủ ảo (VPS) trên DigitalOcean hoặc AWS EC2, tiết kiệm hơn 60% so với chi phí thuê nền tảng thương mại đóng gói độc quyền.
  • Khả năng mở rộng (Scalability): Nhờ tính phi trạng thái (Stateless) của JWT và kiến trúc REST API, hệ thống có thể dễ dàng scale ngang (Horizontal Scaling) bằng cách bổ sung các Node.js worker instances chạy đằng sau Nginx Load Balancer.

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

Hạn chế kỹ thuật

  • Lưu trữ dữ liệu cục bộ: Dự án sử dụng MongoDB Compass trên môi trường phát triển Localhost, chưa triển khai cụm phân tán (Sharding/Replica Set) trên MongoDB Atlas Cloud.
  • Thanh toán trực tuyến thực tế: Hệ thống mới dừng lại ở việc mô phỏng Ví điện tử và giao dịch nội bộ, chưa tích hợp Webhook IPN trực tiếp từ các cổng thanh toán như VNPay, ZaloPay, MoMo, Stripe.
  • Giao tiếp thời gian thực: Tính năng Chat giữa Người mua và Người bán chưa được tích hợp giao thức WebSockets/Socket.io.

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

  1. Tích hợp WebSockets: Xây dựng module Chat trực tiếp thời gian thực (Real-time Messaging) và hệ thống thông báo đẩy (Push Notifications) khi trạng thái đơn hàng thay đổi.
  2. Tích hợp cổng thanh toán & Đơn vị vận chuyển: Kết nối API VNPay/MoMo và liên kết tự động với dịch vụ Giao Hàng Nhanh (GHN), Giao Hàng Tiết Kiệm (GHTK) để tính phí ship theo tọa độ thực.
  3. Ứng dụng Trí tuệ Nhân tạo (AI Recommendation): Áp dụng thuật toán lọc cộng tác (Collaborative Filtering) để xây dựng hệ thống gợi ý sản phẩm cá nhân hóa theo hành vi người dùng.
  4. Nâng cấp hạ tầng Cloud: Chuyển đổi toàn bộ cơ sở dữ liệu lên MongoDB Atlas và đóng gói ứng dụng bằng Docker & Kubernetes để tăng khả năng chịu lỗi (High Availability).

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

  • Sinh viên & Người học CNTT: Cung cấp tài liệu tham khảo thực tế, chuẩn mực về việc xây dựng ứng dụng Full-stack từ khâu phân tích Use Case, Sequence Diagram đến hiện thực hóa mã nguồn MERN stack và React Native.
  • Lập trình viên (Developers): Cung cấp mẫu thiết kế (Design Pattern) hoàn chỉnh về quản lý State với Redux, phân quyền Route nâng cao (PrivateRoute, AdminRoute), và kỹ thuật xử lý REST API với Mongoose ODM.
  • Doanh nghiệp & Startup: Sở hữu một bộ khung (Framework/Boilerplate) sàn TMĐT đa người bán có khả năng tùy biến cao, tiết kiệm hàng trăm giờ lập trình ban đầu.
  • Nhà nghiên cứu học thuật: Cung cấp dữ liệu thực nghiệm về hiệu năng và tính khả thi của mô hình Single Language Architecture (toàn bộ bằng JavaScript) trong các bài toán TMĐT quy mô vừa.

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

1. Cần chuẩn bị môi trường kỹ thuật nào để triển khai hệ thống GoodDeal từ mã nguồn?

Để chạy hệ thống ở môi trường cục bộ (Local Development), cần cài đặt:

  • Node.js: Phiên bản 16.x hoặc 18.x trở lên kèm npm/yarn.
  • MongoDB: Bản cài đặt MongoDB Community Server và MongoDB Compass để quản lý giao diện DB.
  • Android SDK & Java JDK 11: Dành cho việc biên dịch ứng dụng React Native trên Android Studio.
  • Cấu hình tệp .env ở Backend chứa các biến môi trường: PORT=5000, MONGO_URI=mongodb://localhost:27017/gooddeal, JWT_SECRET=your_secret_key.

2. Hệ thống xử lý bài toán nghẽn mạng hoặc quá tải truy vấn như thế nào?

Kiến trúc Node.js non-blocking I/O cho phép xử lý hàng nghìn kết nối đồng thời với mức tiêu thụ RAM thấp. Khi tải tăng cao, hệ thống có thể mở rộng theo các bước:

  • Tạo Indexing trên các trường thường xuyên tìm kiếm trong MongoDB (name, category, price).
  • Kích hoạt cụm tiến trình Node.js bằng thư viện Cluster hoặc PM2 Cluster Mode để tận dụng tối đa CPU đa nhân.
  • Tích hợp thêm Redis Cache phía trước tầng Controller để lưu trữ tạm các danh mục ít thay đổi.

3. Làm thế nào để tích hợp thêm một cổng thanh toán mới (như VNPay) vào hệ thống?

Quy trình tích hợp rất mạch lạc nhờ tầng Controller độc lập:

  1. Thêm Service vnpayService.js để tạo URL thanh toán và xử lý checksum bảo mật (HMAC SHA512).
  2. Tạo thêm API Endpoint /api/payment/vnpay_return/api/payment/vnpay_ipn để hứng phản hồi từ cổng thanh toán.
  3. Khi nhận IPN hợp lệ, Controller sẽ cập nhật trạng thái Order thành PAID và ghi nhận biến động số dư trong Transactions.

4. Chi phí duy trì và yêu cầu bảo trì định kỳ của hệ thống là gì?

Hệ thống không phát sinh phí bản quyền phần mềm định kỳ. Chi phí duy nhất gồm:

  • Tên miền (Domain): ~10 - 15 USD/năm.
  • Máy chủ lưu trữ (Cloud VPS): ~15 - 30 USD/tháng.
  • Công tác bảo trì định kỳ: Sao lưu tự động cơ sở dữ liệu (MongoDB mongodump cronjob), dọn dẹp log hệ thống, và cập nhật bản vá bảo mật cho các npm dependencies.

5. Tại sao dự án chọn React Native thay vì Flutter hay native Android (Java/Kotlin)?

Lựa chọn React Native giúp tận dụng 100% hệ sinh thái JavaScript của nhóm phát triển. Các cấu trúc dữ liệu, thư viện xử lý logic, tư duy Component và React Hooks (useContext, useState, useEffect) từ dự án Web React.js có thể được tái sử dụng trực tiếp trên Mobile App, giúp rút ngắn hơn 50% thời gian học và phát triển so với việc phải học thêm Dart/Flutter hay Kotlin.


Kết luận

Đồ án tốt nghiệp "Xây dựng hệ thống thương mại điện tử sử dụng MERN stack" của nhóm sinh viên Nguyễn Thị Bích Phương và Đặng Văn Nghĩa đã 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. Dự án không chỉ chứng minh tính ưu việt của hệ sinh thái MERN stack trong việc xây dựng các nền tảng TMĐT hiện đại, mở rộng và đa nền tảng, mà còn cung cấp giải pháp thiết thực cho bài toán sàn giao dịch đa người bán (Multi-vendor Marketplace).

Với cấu trúc mã nguồn module hóa rõ ràng, tài liệu phân tích nghiệp vụ hoàn chỉnh và khả năng vận hành ổn định trên cả Web và Android, dự án là tài liệu tham khảo giá trị cho cộng đồng học thuật cũng như là tiền đề vững chắc để phát triển thành một sản phẩm thương mại hoàn chỉnh trong tương lai.