Bối cảnh và vấn đề nghiên cứu

Thương mại điện tử đang trải qua giai đoạn tăng trưởng mạnh mẽ trên phạm vi toàn cầu, trong đó Việt Nam là một trong những thị trường có tỷ lệ người dân sử dụng thiết bị di động và truy cập Internet ở mức cao. Theo số liệu khảo sát từ tổ chức Picodi vào năm 2019, cứ 10 giao dịch mua sắm thì có khoảng 8 giao dịch được thực hiện qua mạng Internet mỗi ngày. Bên cạnh các mặt hàng tiêu dùng thiết yếu, nhu cầu tìm kiếm, tham khảo thông số kỹ thuật và đặt mua các thiết bị, linh kiện điện tử trực tuyến của người tiêu dùng ngày càng gia tăng.

Trước yêu cầu thực tiễn đó, đề tài "Xây dựng và thiết kế hệ thống cửa hàng bán linh kiện điện tử sử dụng công nghệ MERN Stack" được thực hiện nhằm xây dựng một website bán lẻ linh kiện điện tử trực tuyến có cấu trúc hoàn chỉnh, giao diện thuận tiện cho thao tác của người dùng và tính đóng gói cao.

Mục tiêu và nhiệm vụ nghiên cứu cụ thể của đề tài bao gồm:

  1. Khảo sát hiện trạng thị trường mua sắm trực tuyến, phân tích các yêu cầu nghiệp vụ và yêu cầu chức năng hệ thống; tham khảo mô hình tổ chức của hệ thống bán lẻ phongvu.vn.
  2. Nghiên cứu và áp dụng nền tảng công nghệ mã nguồn mở MERN Stack (MongoDB, ExpressJS, React, NodeJS) để xây dựng ứng dụng web theo mô hình phân tách Client - Server.
  3. Phân tích, thiết kế cơ sở dữ liệu và mô hình hóa các yêu cầu hệ thống bằng biểu đồ Use Case, biểu đồ hoạt động (Activity Diagram).
  4. Thiết kế giao diện chi tiết cho phân hệ người dùng (Khách hàng) và phân hệ quản trị (Admin).
  5. Cài đặt hệ thống, kiểm thử các chức năng trọng yếu và đánh giá kết quả thực hiện.

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Quy trình phân tích, thiết kế, triển khai phần mềm thương mại điện tử chuyên ngành linh kiện điện tử và các công nghệ thuộc MERN Stack.
  • Phạm vi không gian và thời gian: Đề tài tiểu luận chuyên ngành thuộc Bộ môn Hệ thống thông tin, Khoa Công nghệ Thông tin, Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh, thực hiện và bảo vệ vào tháng 7 năm 2020.

Cơ sở lý thuyết và phương pháp phát triển hệ thống

Hệ thống được phát triển dựa trên bộ công nghệ MERN Stack – tập hợp bốn công nghệ mã nguồn mở trên nền tảng ngôn ngữ JavaScript, bao gồm:

  • MongoDB: Hệ quản trị cơ sở dữ liệu NoSQL (Not-Only SQL) mã nguồn mở, được viết bằng C++, hoạt động dựa trên khái niệm Collection và Document với cấu trúc dữ liệu JSON (Key-Value). Hệ thống tận dụng các ưu điểm của MongoDB như: không ràng buộc schema cứng nhắc (schema-less), cấu trúc đối tượng rõ ràng, loại bỏ các phép kết nối bảng (JOIN) phức tạp, hỗ trợ mở rộng thông qua replication và sharding, cùng cơ chế lưu trữ cửa sổ làm việc trên bộ nhớ trong (RAM) giúp tối ưu tốc độ truy xuất và cập nhật dữ liệu tại chỗ (in-place). Đồng thời, tài liệu cũng chỉ rõ các điểm hạn chế: đòi hỏi dung lượng RAM lớn, nguy cơ mất mát dữ liệu tạm thời khi mất điện đột ngột do cơ chế caching trước khi ghi xuống đĩa, và các tính năng bảo mật chưa hoàn thiện như các hệ quản trị cơ sở dữ liệu quan hệ truyền thống.
  • ExpressJS: Framework chạy trên nền tảng NodeJS, cung cấp các phương thức HTTP và middleware để xây dựng các dịch vụ RESTful API. Mô hình này giúp chia tách hệ thống thành hai phần độc lập: Server (xử lý logic, truy vấn CSDL và trả dữ liệu JSON) và Client (hiển thị dữ liệu lên giao diện).
  • React: Thư viện JavaScript mã nguồn mở do Facebook và cộng đồng phát triển, dùng để xây dựng giao diện người dùng (UI) tương tác cho các ứng dụng web dạng đơn trang (Single Page Application - SPA) hoặc React Universal App.
  • NodeJS: Môi trường thực thi JavaScript phía máy chủ chạy trên V8 JavaScript Engine của Google, sử dụng mô hình điều khiển theo sự kiện (event-driven) và cơ chế nhập/xuất không đồng bộ (asynchronous non-blocking I/O) nhằm tối ưu tài nguyên và tăng khả năng mở rộng.

Phương pháp phát triển hệ thống bao gồm:

  • Khảo sát, phân tích quy trình nghiệp vụ bán hàng trực tuyến thực tế.
  • Mô hình hóa hệ thống bằng ngôn ngữ UML: xây dựng bảng tác nhân - chức năng, biểu đồ Use Case tổng quát và phân rã, biểu đồ hoạt động cho từng chức năng chính.
  • Thiết kế cấu trúc dữ liệu dạng Document trong MongoDB.
  • Xây dựng kiến trúc phân tầng: Client giao tiếp với Server thông qua các điểm cuối REST API.
  • Kiểm thử chức năng (Functional Testing) theo các ca kiểm thử mẫu.

Thiết kế và triển khai hệ thống

1. Kiến trúc dữ liệu NoSQL (Collections)

Cơ sở dữ liệu của hệ thống được tổ chức thành 4 collection chính trong MongoDB:

Tên Collection Tên trường (Cột) Kiểu dữ liệu Ý nghĩa
Users _id ObjectID Khóa chính, mã định danh người dùng
Name String Họ và tên người dùng
Email String Địa chỉ thư điện tử
Password String Mật khẩu tài khoản
Addresses String Danh sách địa chỉ giao hàng
Cart Array Mảng chứa thông tin giỏ hàng
isBlock Boolean Trạng thái tài khoản (đang hoạt động / bị khóa)
createdAt Date Thời điểm tạo tài khoản
updatedAt Date Thời điểm cập nhật tài khoản gần nhất
Products _id ObjectID Khóa chính, mã định danh sản phẩm
Title String Tên sản phẩm linh kiện điện tử
Prices Number Đơn giá sản phẩm
Warranty String Thời hạn bảo hành
Brand String Nhãn hiệu sản phẩm
Description String Đoạn mô tả ngắn về sản phẩm
Content String Nội dung chi tiết về thông số kỹ thuật
Images Object Đối tượng chứa đường dẫn hình ảnh
Category String Loại sản phẩm
Quantity Number Số lượng hàng tồn kho
Sold Number Số lượng sản phẩm đã bán ra
isDelete Boolean Trạng thái xóa logic của sản phẩm
createdAt Date Thời điểm tạo sản phẩm
updatedAt Date Thời điểm cập nhật sản phẩm
Categories _id ObjectID Khóa chính, mã định danh loại sản phẩm
Name String Tên loại sản phẩm
createdAt Date Ngày tạo loại sản phẩm
updatedAt Date Ngày cập nhật loại sản phẩm
Checkout _id ObjectID Khóa chính, mã đơn hàng
userId String Mã định danh người mua hàng
Name String Tên người nhận hàng
Email String Email người mua
Address String Địa chỉ nhận hàng
Cart Array Mảng danh sách sản phẩm và số lượng đặt mua
Status Boolean Trạng thái xử lý của đơn hàng
Total Number Tổng giá trị thanh toán của đơn hàng
Payments String Trạng thái/Phương thức thanh toán
Tax Number Thuế đơn hàng
deliveryCharges String Chi phí vận chuyển
createdAt Date Ngày tạo đơn hàng
updatedAt Date Ngày cập nhật trạng thái đơn hàng

2. Phân quyền và mô hình hóa tác nhân

Hệ thống phân định quyền hạn rõ ràng giữa các nhóm tác nhân:

Nhóm tác nhân Chức năng chính
Khách (Guest) Đăng ký tài khoản mới; Xem danh mục sản phẩm, tìm kiếm, lọc theo loại, sắp xếp sản phẩm.
Khách hàng (User) Đăng nhập hệ thống; Quản lý giỏ hàng (thêm, bớt số lượng, xóa); Đặt hàng (chọn địa chỉ, nhập mã giảm giá); Thanh toán online qua PayPal hoặc thanh toán khi nhận hàng (COD); Xem lịch sử giao dịch và hủy đơn khi chưa duyệt; Cập nhật thông tin cá nhân; Đổi mật khẩu và lấy lại mật khẩu qua email.
Quản trị viên (Admin) Đăng nhập bảng điều khiển; Quản lý sản phẩm (thêm, cập nhật, xóa logic, phân trang); Quản lý loại sản phẩm (thêm, sửa, xóa, tìm kiếm); Quản lý đơn hàng (duyệt đơn, xem chi tiết đơn, xuất/in hóa đơn); Quản lý người dùng (xem danh sách, khóa tài khoản BlockAccount); Quản lý khuyến mãi và thống kê doanh thu, số lượng bán ra.
Nhân viên (Staff) Tiếp nhận đơn hàng, cập nhật trạng thái giao nhận và phản hồi thông tin đơn hàng.

3. Quy trình cài đặt và môi trường triển khai

Hệ thống được tổ chức thành hai kho mã nguồn riêng biệt và yêu cầu môi trường cài đặt như sau:

  • Yêu cầu môi trường: Cài đặt Node.js, trình quản lý gói npm, công cụ dòng lệnh Git Bash và môi trường lập trình Visual Studio Code.
  • Mã nguồn:
    • Phía Client: https://github.com/sttinh99/client
    • Phía Server: https://github.com/sttinh99/API-TLCN
  • Quy trình thiết lập:
    1. Tải hoặc sao chép mã nguồn của hai thư mục clientAPI-TLCN.
    2. Cấu hình tệp biến môi trường .env tại thư mục gốc của Server để thiết lập các thông số kết nối cơ sở dữ liệu và cổng dịch vụ.
    3. Mở cửa sổ dòng lệnh tích hợp (Terminal) trong Visual Studio Code tại từng thư mục và thực thi lệnh npm install để tự động tải các gói thư viện phụ thuộc.

Nội dung chính theo từng chương

Chương 1: Khảo sát hiện trạng

Chương 1 trình bày bối cảnh chuyển dịch số của thị trường thương mại điện tử Việt Nam năm 2019 dựa trên khảo sát của Picodi. Tác giả tiến hành phân tích các yêu cầu nghiệp vụ lưu trữ (Người dùng, Sản phẩm, Loại sản phẩm, Đơn hàng), các yêu cầu tra cứu thông tin theo tiêu chuẩn, tính toán tổng tiền thanh toán và thống kê, kết xuất báo cáo doanh thu. Đồng thời, chương này xác định các yêu cầu phân quyền hệ thống cho nhóm quản trị viên và người dùng cuối, lựa chọn website phongvu.vn làm mô hình tham chiếu thực tế.

Chương 2: Cơ sở lý thuyết

Nội dung chương 2 tập trung trình bày chi tiết về kiến trúc MERN Stack. Tác giả đi sâu phân tích cơ chế hoạt động của hệ quản trị cơ sở dữ liệu NoSQL MongoDB, nêu rõ các đặc điểm kỹ thuật về lưu trữ Document JSON, ưu thế truy xuất trên bộ nhớ đệm RAM và các nhược điểm liên quan đến an toàn dữ liệu khi mất nguồn điện. Chương này cũng làm rõ vai trò của framework ExpressJS trong việc xây dựng các điểm cuối REST API, thư viện React trong việc tạo giao diện hiển thị phía Client, và môi trường NodeJS trong việc thực thi mã nguồn JavaScript máy chủ theo mô hình bất đồng bộ.

Chương 3: Phân tích trang web

Chương 3 mô tả cấu trúc phân tách giữa hai thành phần Front-end và Back-end. Tác giả định nghĩa chi tiết các lược đồ dữ liệu (Data Schemas) được cài đặt trong MongoDB, bao gồm cấu trúc bảng Users, Products, CategoriesCheckout với đầy đủ tên trường, kiểu dữ liệu và ý nghĩa nghiệp vụ. Sơ đồ thiết kế dữ liệu tổng thể cũng được hoàn thiện tại chương này.

Chương 4: Mô hình hoá yêu cầu và phân tích hệ thống

Chương 4 thực hiện mô hình hóa toàn diện các luồng nghiệp vụ của hệ thống. Tác giả xây dựng bảng ma trận tác nhân - chức năng, cung cấp các sơ đồ Use Case (Đăng ký, Đăng nhập, Tìm kiếm, Mua hàng, Quản lý đơn hàng, Thống kê) và biểu đồ hoạt động (Activity Diagrams) cho từng tiến trình cụ thể:

  • Đăng ký thành viên và Đăng nhập hệ thống;
  • Quên mật khẩu và Đổi mật khẩu;
  • Tìm kiếm sản phẩm, Xem sản phẩm và Xem thông tin cá nhân;
  • Thao tác giỏ hàng, Xác nhận và Thanh toán đơn hàng;
  • Các thao tác quản trị: Thêm/Sửa/Xóa sản phẩm, Thêm/Sửa/Xóa loại sản phẩm.

Chương 5: Thiết kế giao diện

Chương 5 minh họa và mô tả chi tiết các màn hình giao diện đã được lập trình thực tế, chia thành hai phân hệ:

  • Phân hệ người dùng: Trang chủ (Home), Trang đăng nhập (Login), Trang đăng ký (Register), Trang danh mục sản phẩm (Products có tích hợp bộ lọc Filter và sắp xếp SortBy), Trang chi tiết sản phẩm, Trang danh sách địa chỉ giao hàng, Trang giỏ hàng, Trang đặt hàng (chọn địa chỉ, áp mã giảm giá Discount Code, chọn COD hoặc PayPal), Trang lịch sử giao dịch.
  • Phân hệ quản trị: Trang tổng quan thống kê, Trang quản lý người dùng (hỗ trợ khóa tài khoản qua nút BlockAcount), Trang quản lý sản phẩm (tích hợp tạo mới, sửa, xóa, phân trang Prev/Next), Trang quản lý loại sản phẩm, Trang quản lý đơn hàng (tích hợp Export Bill), Trang chi tiết đơn hàng và Trang xuất hóa đơn bán hàng.

Chương 6: Cài đặt và thử nghiệm

Chương 6 hướng dẫn chi tiết các bước cài đặt hệ sinh thái công cụ hỗ trợ và cách thức cấu hình tệp .env, triển khai mã nguồn trên Visual Studio Code. Tác giả thực hiện kiểm thử chức năng cho các quy trình trọng tâm gồm:

  • Kiểm thử chức năng Đăng ký tài khoản;
  • Kiểm thử chức năng Đăng nhập hệ thống;
  • Kiểm thử chức năng Quên mật khẩu (gửi liên kết qua email);
  • Kiểm thử chức năng Tạo lại / Đổi mật khẩu mới.

Chương 7: Tổng kết

Chương 7 tổng kết toàn bộ kết quả đạt được của hệ thống website bán linh kiện điện tử, đánh giá các ưu điểm về tốc độ phản hồi và giao diện đóng gói, phân tích các điểm hạn chế về mặt hoàn thiện tính năng, rút ra kinh nghiệm thực tế trong quá trình làm việc nhóm với MERN Stack và vạch ra các hướng phát triển mở rộng trong tương lai.


Kết quả và đóng góp

  • Kết quả triển khai: Xây dựng thành công hệ thống website bán linh kiện và thiết bị điện tử với đầy đủ các phân hệ chức năng cho Khách hàng, Quản trị viên và Nhân viên. Hệ thống xử lý thông suốt quy trình từ tìm kiếm, lọc sản phẩm, quản lý giỏ hàng, đặt hàng, tích hợp cổng thanh toán PayPal, đến các tác vụ quản trị danh mục, kiểm soát đơn hàng, khóa tài khoản vi phạm và in hóa đơn.
  • Đóng góp kỹ thuật: Áp dụng hiệu quả mô hình kiến trúc phân tách Client - Server thông qua việc kết hợp ExpressJS REST API và React. Triển khai cấu trúc dữ liệu NoSQL trên MongoDB tối ưu hóa cho ứng dụng thương mại điện tử mà không cần các câu lệnh SQL phức tạp.
  • Tính thực tiễn: Cung cấp tài liệu phân tích thiết kế hệ thống chi tiết, bao gồm toàn bộ lược đồ dữ liệu, đặc tả use case và tài liệu hướng dẫn cài đặt từng bước cho sinh viên và lập trình viên muốn tiếp cận kiến trúc MERN Stack.

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

  • Hạn chế: Do giới hạn về thời gian và phạm vi của một tiểu luận chuyên ngành, hệ thống vẫn còn một số thiếu sót nhất định trong việc tối ưu hóa hiệu năng cơ sở dữ liệu khi mở rộng quy mô lớn, tính năng bảo mật mức cơ sở dữ liệu của MongoDB chưa được cấu hình ở cấp độ doanh nghiệp, và giao diện quản trị còn cần được trau chuốt thêm về mặt trải nghiệm người dùng.
  • Hướng phát triển: Tác giả đề xuất tiếp tục hoàn thiện các cơ chế bảo mật nâng cao, bổ sung các thuật toán gợi ý sản phẩm thông minh dựa trên lịch sử mua hàng, mở rộng tích hợp thêm các cổng thanh toán nội địa và hoàn thiện phân hệ thống kê, báo cáo doanh thu đa chiều.

Giá trị tham khảo

Tài liệu là nguồn tham khảo hữu ích cho:

  • Sinh viên ngành Công nghệ Thông tin, Kỹ thuật Phần mềm và Hệ thống Thông tin đang thực hiện đồ án môn học, tiểu luận chuyên ngành hoặc khóa luận tốt nghiệp về xây dựng ứng dụng web thương mại điện tử.
  • Các nhà phát triển phần mềm muốn tìm hiểu mô hình tổ chức dự án thực tế sử dụng bộ công nghệ MERN Stack (MongoDB, ExpressJS, React, NodeJS) theo kiến trúc Client - Server.
  • Người nghiên cứu có thể tham khảo trực tiếp cấu trúc phân tích đặc tả Use Case, thiết kế Collection NoSQL và phương pháp thiết lập môi trường triển khai thực tế.

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

1. Đề tài lựa chọn mô hình website bán lẻ nào làm tài liệu tham khảo chính?
Nhóm tác giả đã lựa chọn website bán lẻ linh kiện và thiết bị điện tử phongvu.vn làm tài liệu và mô hình tham khảo thực tế để phân tích nghiệp vụ và phát triển hệ thống.

2. Cấu trúc lưu trữ dữ liệu trong MongoDB của hệ thống gồm những collection nào?
Cơ sở dữ liệu của hệ thống được chia thành 4 collection chính: Users (quản lý thông tin tài khoản người dùng), Products (quản lý thông tin, giá cả, bảo hành và số lượng sản phẩm), Categories (quản lý loại sản phẩm) và Checkout (quản lý thông tin đơn hàng và giao dịch thanh toán).

3. Khách hàng có thể thực hiện thanh toán trực tuyến qua phương thức nào trên hệ thống?
Hệ thống tích hợp nút thanh toán trực tuyến liên kết với tài khoản PayPal trên giao diện đặt hàng, bên cạnh hình thức đặt hàng thanh toán tại nhà (COD).

4. Quy trình xử lý khi người dùng quên mật khẩu được thiết kế như thế nào?
Người dùng chọn chức năng "Forgot my password" tại trang đăng nhập và nhập email đã đăng ký. Hệ thống sẽ gửi một đường dẫn (link) xác nhận đến hộp thư điện tử của người dùng để truy cập vào giao diện thay đổi mật khẩu và thiết lập lại mật khẩu mới.

5. Quản trị viên sử dụng chức năng gì để xử lý các tài khoản người dùng vi phạm chính sách cửa hàng?
Tại trang quản lý người dùng của phân hệ quản trị, quản trị viên có thể sử dụng nút chức năng BlockAcount để thay đổi trạng thái và khóa tài khoản của khách hàng vi phạm.


Kết luận

Báo cáo tiểu luận chuyên ngành của sinh viên Ngô Văn Hải và Trương Quang Tịnh (Trường Đại học Sư phạm Kỹ thuật TP.HCM) đã giải quyết trọn vẹn bài toán xây dựng website thương mại điện tử bán linh kiện điện tử bằng công nghệ MERN Stack. Báo cáo thể hiện quy trình công nghệ chuẩn mực từ khảo sát nghiệp vụ, phân tích yêu cầu, thiết kế cơ sở dữ liệu NoSQL đến lập trình giao diện và kiểm thử chức năng. Đây là tài liệu tham khảo có giá trị cao về mặt kỹ thuật cho sinh viên và lập trình viên trong việc ứng dụng hệ sinh thái JavaScript để phát triển các ứng dụng web hướng dịch vụ hiện đại.