Bối cảnh và vấn đề nghiên cứu
Khóa luận tốt nghiệp "Xây dựng website bán sách online sử dụng công nghệ MERN stack" được thực hiện bởi sinh viên Lưu Đình Chuẩn (MSSV: 18110085) và Phan Thị Thu Trang (MSSV: 18110217), dưới sự hướng dẫn của TS. Huỳnh Xuân Phụng, thuộc Khoa Đào tạo Chất lượng cao, ngành Công nghệ Thông tin, Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh (khóa học 2018–2022, hoàn thành ngày 16 tháng 06 năm 2022).
Bối cảnh thực tiễn của đề tài xuất phát từ việc tri thức nhân loại được lưu giữ chủ yếu qua sách báo và nhu cầu phân phối ấn phẩm đến người đọc là thiết yếu. Dưới sự phát triển của công nghệ 4.0 và lượng người dùng truy cập internet tăng cao, nhu cầu mua bán trực tuyến ngày càng phổ biến. Việc kết hợp phát hành sách với thương mại điện tử giúp tối ưu hóa hoạt động kinh doanh cho các cửa hàng, nhà bán lẻ lẫn cá nhân. Đồng thời, trong bối cảnh dịch bệnh, mô hình bán sách trực tuyến bảo đảm an toàn giao dịch, tiết kiệm thời gian đi lại cho độc giả và mở rộng tệp khách hàng tiềm năng ở xa.
Mục tiêu trọng tâm của đề tài là nghiên cứu công nghệ MERN Stack và ứng dụng mô hình này để xây dựng hoàn chỉnh một website bán sách trực tuyến. Các nhiệm vụ nghiên cứu cụ thể được đánh số theo đề cương luận văn gồm:
- Nghiên cứu về MERN stack.
- Nghiên cứu về cách viết REST API và cách ứng dụng.
- Sử dụng thư viện Mongoose để tạo Model cho dữ liệu trong MongoDB.
- Sử dụng ExpressJS để làm các công việc về phía server-side.
- Viết các REST API để thao tác dữ liệu giữa ExpressJS và MongoDB.
- Dùng ReactJS để làm front-end theo kiểu Single Page Application (SPA).
- Kết hợp 4 thành phần lại để xây dựng website bán sách trên nền tảng MERN stack.
- Hướng dẫn cài đặt và kiểm thử phần mềm.
Đối tượng nghiên cứu của đề tài gồm hai nhóm chính:
- Nhóm đối tượng kiến thức công nghệ: Hệ quản trị cơ sở dữ liệu MongoDB, framework ExpressJS, thư viện ReactJS, nền tảng NodeJS, cùng các thư viện bổ trợ như JSON Web Token (JWT), thư viện mã hóa bcrypt, thư viện quản lý trạng thái Redux.
- Nhóm đối tượng nghiệp vụ: Khách hàng có nhu cầu tìm kiếm, mua sách trực tuyến và các nhà bán lẻ, cửa hàng phát hành sách.
Phạm vi nghiên cứu được xác định ở mức độ tổng quát nhằm ứng dụng công nghệ vào sản phẩm thực tế, hoàn thành chu trình phân tích, thiết kế, hiện thực hóa hệ sinh thái MERN và kiểm thử ứng dụng trong mốc thời gian từ tháng 03/2022 đến tháng 06/2022.
Các giả thiết, ràng buộc và rủi ro của dự án được tổng hợp theo văn bản như sau:
| STT |
Hạng mục |
Nội dung chi tiết |
| 1 |
Các giả thiết của dự án |
Luôn có nhân sự thay thế khi thành viên bận đột xuất; hoàn thành dự án sớm hơn kế hoạch; sản phẩm vận hành không phát sinh lỗi. |
| 2 |
Các ràng buộc của dự án |
Chịu toàn bộ trách nhiệm khắc phục lỗi trong thời gian bảo trì; xóa toàn bộ dữ liệu thử nghiệm sau khi hoàn tất; khách hàng không nghiệm thu nếu trễ hạn quá 10 ngày hoặc không đạt yêu cầu; chi phí phát sinh khi có yêu cầu mới. |
| 3 |
Rủi ro và hướng xử lý |
Khách hàng không chịu trách nhiệm về rủi ro kỹ thuật và nhân sự; kinh phí có thể gia tăng do sự trì hoãn từ khách hàng; thành viên nghỉ đột xuất; khách hàng thay đổi yêu cầu đột ngột cần điều chỉnh kế hoạch và tính toán lại chi phí. |
Cơ sở lý thuyết và phương pháp
Khung lý thuyết của đề tài tập trung vào bộ công nghệ MERN Stack và các nguyên lý kỹ thuật liên quan:
- MongoDB: Hệ quản trị cơ sở dữ liệu NoSQL định dạng tài liệu (Document Database), phát triển từ năm 2007 bởi MongoDB Inc. Dữ liệu được lưu trữ linh hoạt dưới dạng collection mà không ràng buộc toàn vẹn quan hệ. Mỗi document có định danh duy nhất qua trường
_id tự động lập chỉ mục (index). MongoDB sử dụng cơ chế đệm trên RAM và đồng bộ xuống đĩa cứng sau mỗi 60 giây. Các tính năng cốt lõi gồm: truy vấn ad hoc, nhân rộng bản sao (Replication), cân bằng tải theo chiều ngang (Sharding), hệ thống tệp GridFS và quản lý kích thước collection.
- NodeJS: Nền tảng thực thi JavaScript phía máy chủ chạy trên môi trường V8 JavaScript Runtime của Chrome, do Ryan Lienhart Dahl phát triển năm 2009. Cơ chế hoạt động dựa trên mô hình đơn luồng (Single Thread), xử lý bất đồng bộ không chặn (Non-Blocking I/O) kết hợp cùng Callbacks, Event Table, hàng đợi Event Queue (hoạt động theo nguyên tắc vào trước ra trước - FIFO) và vòng lặp sự kiện Event Loop tương tác cùng Thread Pool.
- ExpressJS: Framework tối giản xây dựng trên nền tảng NodeJS, đảm nhiệm cấu hình định tuyến (routing), tiếp nhận và điều phối các yêu cầu HTTP (Request/Response), tích hợp các middleware như body-parser, cors, timeout và hỗ trợ kết xuất mẫu dữ liệu.
- ReactJS: Thư viện JavaScript mã nguồn mở do Facebook phát triển, hỗ trợ xây dựng giao diện người dùng đơn trang (Single Page Application). Kiến trúc bao gồm cú pháp mở rộng JSX, trình chuyển đổi mã (React transformer như Babel/TypeScript) và cơ chế DOM ảo (Virtual DOM) giúp so sánh đối soát các thay đổi trạng thái trước khi cập nhật lên cây DOM của trình duyệt (Browser DOM).
- Kiểm thử phần mềm và tự động hóa: Lý thuyết về kiểm thử hộp trắng (White box), kiểm thử hộp đen (Black box), kiểm thử hộp xám (Grey box) và quy trình 5 bước (lập kế hoạch, thiết kế kịch bản kiểm thử, phát triển tập lệnh kiểm thử, thực thi và đánh giá). Công cụ kiểm thử tự động Selenium WebDriver được lựa chọn nhờ khả năng tương tác trực tiếp với trình duyệt trên nhiều hệ điều hành và hỗ trợ đa ngôn ngữ lập trình.
Phương pháp nghiên cứu thực tế bao gồm:
- Phương pháp khảo sát, phân tích hiện trạng các hệ thống thương mại điện tử thực tế: Khảo sát cấu trúc giao diện, quy trình mua sắm, chính sách vận chuyển và hạn chế của các nền tảng Tiki.vn, Fahasa.com, Vinabook.com, Shopee.vn và Newshop.vn.
- Phương pháp khảo sát thực tế tại các điểm bán sách lẻ, tổng hợp nhu cầu hai chiều giữa người mua và người bán.
- Phương pháp phân tích và thiết kế phần mềm hướng đối tượng: Xây dựng biểu đồ use case tổng quát và chi tiết, biểu đồ tuần tự (Sequence Diagram), biểu đồ hoạt động (Activity Diagram), biểu đồ lớp (Class Diagram) và quy tắc nghiệp vụ (Business Rules).
- Phương pháp lập trình và kiểm thử: Xây dựng API theo chuẩn RESTful, quản lý trạng thái tập trung với Redux, kiểm thử chức năng thủ công và viết tập lệnh kiểm thử tự động với Selenium WebDriver.
Nguồn dữ liệu của nghiên cứu bắt nguồn từ tài liệu kỹ thuật chuyên ngành về MERN stack, thông tin thu thập qua khảo sát thị trường sách trực tuyến và dữ liệu danh mục sách mô phỏng được nhập vào hệ thống.
Thiết kế và triển khai
Hệ thống được thiết kế theo kiến trúc 3 tầng chuẩn dựa trên nền tảng JavaScript đồng nhất:
- Tầng giao diện (Frontend): Ứng dụng Single Page Application viết bằng ReactJS kết hợp thư viện quản lý trạng thái Redux (được chuyển đổi từ GlobalState theo kế hoạch thực hiện). Giao diện chia thành các thành phần độc lập: Header, Footer, Trang chủ, Trang sản phẩm, Chi tiết sách, Giỏ hàng, Quản lý tài khoản, Đánh giá - bình luận, Thống kê, Quản lý danh mục, Quản lý khuyến mãi.
- Tầng logic xử lý và ứng dụng (Backend): Máy chủ ExpressJS chạy trên môi trường NodeJS, tiếp nhận các yêu cầu HTTP, xử lý xác thực bảo mật với JSON Web Token (JWT) và mã hóa mật khẩu bằng bcrypt. Tầng này kết nối với cơ sở dữ liệu qua thư viện Mongoose.
- Tầng cơ sở dữ liệu (Database): Cơ sở dữ liệu MongoDB lưu trữ thông tin dưới dạng các Collection độc lập:
User: Lưu trữ thông tin người dùng và phân quyền quản trị.
Products: Lưu trữ thông tin chi tiết về sách (tiêu đề, tác giả, giá, hình ảnh, mô tả).
Categories: Lưu trữ danh mục phân loại sách.
Oders và DetailOders: Lưu thông tin đơn đặt hàng và chi tiết các mặt hàng trong đơn.
Carts và DetailCart: Lưu trạng thái giỏ hàng và danh sách sản phẩm trong giỏ của người dùng.
Comment: Lưu trữ bình luận, nội dung đánh giá và phản hồi bình luận.
Promotion: Quản lý các mã khuyến mãi, voucher giảm giá.
Hệ thống cung cấp danh sách REST API phục vụ trao đổi dữ liệu:
- Phương thức
POST: Đăng ký tài khoản, Đăng nhập, Tạo người dùng mới, Thêm sản phẩm, Thêm danh mục sách.
- Phương thức
GET: Lấy thông tin sản phẩm, Lấy thông tin chi tiết đơn hàng.
- Phương thức
PUT: Chỉnh sửa thông tin người dùng, Chỉnh sửa thông tin sản phẩm.
Hệ thống tích hợp cổng thanh toán trực tuyến gồm hai phương thức: thanh toán quốc tế qua PayPal (xác thực tài khoản, mật khẩu và xác nhận giao dịch) và thanh toán nội địa qua VNPay (chọn ngân hàng, nhập thông tin thẻ/tài khoản và xác thực mã OTP).
Quy trình kiểm thử được triển khai kết hợp giữa kiểm thử thủ công và kiểm thử tự động bằng Selenium WebDriver. Kịch bản kiểm thử bao phủ các chức năng then chốt: Đăng ký tài khoản, Đăng nhập hệ thống, Quản lý giỏ hàng, Quản lý thông tin sản phẩm, Quản lý người dùng và Quản lý đơn hàng.
Nội dung chính theo từng chương
Chương 1: Tổng quan về đề tài
Chương này phân tích tính cấp thiết của đề tài trong bối cảnh công nghệ thông tin phát triển, xác định mục đích tạo dựng môi trường mua bán sách an toàn, tiện lợi cho độc giả và đơn vị kinh doanh. Tác giả xác lập 8 nhiệm vụ nghiên cứu cụ thể, chỉ rõ hai nhóm đối tượng nghiên cứu (công nghệ MERN Stack và khách hàng/người bán sách), đồng thời xây dựng bảng kế hoạch giả thiết, ràng buộc và rủi ro kỹ thuật trong triển khai dự án.
Chương 2: Cơ sở lý thuyết
Nội dung chương trình bày chi tiết về cấu trúc MERN Stack và cơ chế luân chuyển dữ liệu JSON xuyên suốt 3 tầng kiến trúc. Tác giả phân tích chuyên sâu về NodeJS (bộ máy V8, cơ chế Non-Blocking, Event Loop, Thread Pool), ExpressJS (middleware, định tuyến URL), ReactJS (JSX, Virtual DOM, Browser DOM) và MongoDB (cơ chế đệm RAM 60 giây, trường khóa _id, kỹ thuật Sharding, Replication, GridFS). Cuối chương giới thiệu tổng quan về kiểm thử phần mềm, so sánh các bộ công cụ trong hệ sinh thái Selenium và làm rõ ưu thế tương tác trực tiếp của Selenium WebDriver.
Chương 3: Khảo sát hiện trạng và xác định yêu cầu
Chương 3 tổng hợp kết quả khảo sát từ 5 website thương mại điện tử lớn tại Việt Nam nhằm đúc kết ưu và nhược điểm thực tế:
| Tên website |
Ưu điểm ghi nhận trong khảo sát |
Nhược điểm ghi nhận trong khảo sát |
| Tiki.vn |
Giao diện đẹp, danh mục đa dạng; miễn phí vận chuyển từ 150.000đ; cập nhật trạng thái đơn hàng liên tục; gửi hóa đơn điện tử qua email; nhiều khuyến mãi. |
Tốn phí cố định và phí hoa hồng bán hàng; thanh toán thẻ chưa tối ưu; thời gian giao hàng phía Bắc từ 6–10 ngày (trung bình 4–10 ngày). |
| Fahasa.com |
Có các mục "Flash Sale", "Fahasa deals"; hỗ trợ 2 ngôn ngữ; bộ lọc đa dạng (giá, thể loại, lứa tuổi); chính sách điều khoản rõ ràng; thanh toán đa dạng. |
Phí vận chuyển chưa cạnh tranh (chỉ miễn phí từ 140.000đ hoặc từ 600.000đ toàn quốc); thời gian giao hàng tỉnh từ 3–10 ngày (nội thành 1–4 ngày). |
| Vinabook.com |
Chuyên biệt về sách, cập nhật sách mới nhanh; đóng gói thân thiện môi trường; hỗ trợ chăm sóc khách hàng 24/7; giao diện dễ dùng. |
Danh mục chưa thực sự phong phú; cập nhật tình trạng tồn kho chưa kịp thời; một số hình thức thanh toán có phí giao dịch cao; phí vận chuyển cao. |
| Shopee.vn |
Giao diện thu hút, tải nhanh, bộ lọc thông minh; lượng khuyến mãi và mã vận chuyển lớn; có gian hàng chính hãng Shopee Mall; tích hợp mini game giải trí. |
Tồn tại hàng kém chất lượng làm giảm uy tín; chưa kiểm soát giá bán giữa các gian hàng; quy trình đổi trả lâu; mức độ cạnh tranh nội sàn rất gay gắt. |
| Newshop.vn |
Định hướng như blog review sách chuyên sâu; tuyển chọn tựa sách kỹ lưỡng; mô tả sản phẩm chi tiết; giao diện đơn giản, bắt mắt; nhiều ưu đãi. |
Danh mục sách chưa phong phú đa dạng (tập trung vào một số mảng nhất định); phí giao dịch ở một số kênh thanh toán còn cao. |
Từ khảo sát điểm bán lẻ thực tế (ghi chép hóa đơn tay, nhận tiền mặt, quản lý thủ công khó khăn) và khảo sát nhu cầu người mua/người bán, tác giả xác định ma trận phân quyền (Permission Matrix), các yêu cầu phi chức năng và môi trường vận hành của hệ thống.
Chương 4: Phân tích và thiết kế hệ thống
Chương 4 là phần trọng tâm với việc phân tích 22 ca sử dụng (use case) chức năng: Đăng ký (hỗ trợ Google, Facebook), Đăng nhập, Đổi mật khẩu, Quên mật khẩu, Quản lý thông tin, Tìm kiếm sản phẩm, Xem chi tiết sách, Lọc sản phẩm, Giỏ hàng, Đặt hàng, Thanh toán, Đánh giá - bình luận, Quản trị người dùng, Quản trị danh mục, Quản trị sản phẩm, Quản trị đơn hàng, Quản lý mã khuyến mãi và Thống kê. Mỗi chức năng đều được đặc tả đi kèm biểu đồ tuần tự (Sequence Diagram), biểu đồ hoạt động (Activity Diagram), quy tắc nghiệp vụ (Business Rules). Tác giả thiết kế chi tiết cấu trúc 9 Collection cơ sở dữ liệu, sơ đồ lớp đối tượng và thiết kế giao diện kèm đặc tả xử lý logic cho từng màn hình.
Chương 5: Cài đặt và kiểm thử ứng dụng
Chương này trình bày quá trình cài đặt hệ thống, hiện thực hóa các màn hình chức năng và hướng dẫn quy trình tích hợp hai cổng thanh toán PayPal và VNPay. Tác giả lập bảng kế hoạch kiểm thử, tiến hành kiểm thử thủ công và xây dựng các ca kiểm thử tự động bằng Selenium WebDriver cho các chức năng đăng ký, đăng nhập, giỏ hàng, quản lý đơn hàng, người dùng, sản phẩm. Cuối chương công bố danh mục và cấu trúc chi tiết các endpoint REST API phục vụ truyền tải dữ liệu giữa client và server.
Chương 6: Kết luận
Chương cuối tóm tắt các kết quả đạt được về mặt nắm vững kiến thức công nghệ MERN Stack và hoàn thiện sản phẩm website bán sách. Tác giả đồng thời nhìn nhận các điểm hạn chế còn tồn tại do giới hạn về mặt thời gian và kinh nghiệm, từ đó đề ra các định hướng hoàn thiện hệ thống trong tương lai.
Kết quả và đóng góp
Về mặt sản phẩm, đồ án đã hoàn thành việc xây dựng ứng dụng website bán sách trực tuyến với đầy đủ các thành phần kỹ thuật của mô hình MERN Stack:
- Xây dựng hoàn chỉnh kiến trúc 3 tầng: Tầng cơ sở dữ liệu với 9 Collection trên MongoDB (
User, Products, Categories, Oders, DetailOders, Carts, DetailCart, Comment, Promotion); tầng backend với ExpressJS và NodeJS xử lý logic, định tuyến và phân quyền; tầng frontend tương tác với ReactJS và Redux.
- Hiện thực hóa đầy đủ hệ thống chức năng nghiệp vụ gồm 22 nhóm use case, đáp ứng các tương tác từ đăng ký/đăng nhập (tích hợp mạng xã hội), tìm kiếm, lọc sách theo danh mục, quản lý giỏ hàng, viết bình luận, đánh giá sao, cho đến quản trị doanh thu, người dùng, sản phẩm và khuyến mãi.
- Tích hợp thành công hai cổng thanh toán trực tuyến là PayPal và VNPay.
- Thiết lập hệ thống kiểm thử tự động sử dụng Selenium WebDriver để thực thi kiểm thử chức năng tự động bên cạnh kiểm thử thủ công.
- Xây dựng danh mục các REST API tiêu chuẩn (POST, GET, PUT) phục vụ kết nối dữ liệu client - server.
Đóng góp của đồ án thể hiện ở việc cụ thể hóa mô hình ngăn xếp MERN Stack vào bài toán thương mại điện tử thực tế, giải quyết được các bất cập của mô hình bán sách thủ công truyền thống (loại bỏ hóa đơn giấy, tự động hóa quản lý kho và đơn hàng, không phụ thuộc vào không gian địa lý).
Hạn chế và hướng nghiên cứu tiếp
Hạn chế của đề tài được tác giả tự xác định bao gồm:
- Đề tài được thực hiện trong khoảng thời gian tương đối ngắn (kế hoạch triển khai từ tháng 03/2022 đến tháng 06/2022).
- Kiến thức và kinh nghiệm thực tế của nhóm sinh viên trong việc quản lý, triển khai một dự án phần mềm hoàn chỉnh còn hạn chế, dẫn đến việc hệ thống khó tránh khỏi những thiếu sót về mặt kỹ thuật.
- Cơ sở dữ liệu MongoDB không hỗ trợ ràng buộc toàn vẹn khóa ngoại/khóa chính như SQL, dẫn đến việc toàn bộ logic toàn vẹn dữ liệu phải đẩy sang xử lý ở tầng server của ứng dụng, đòi hỏi tài nguyên tính toán lớn hơn.
Hướng phát triển tiếp theo được đề ra là tiếp tục sửa lỗi, tối ưu hóa mã nguồn, bổ sung các chức năng nâng cao và hoàn thiện trải nghiệm hệ thống trong các giai đoạn phát triển tiếp theo.
Giá trị tham khảo
Báo cáo khóa luận là tài liệu tham khảo phù hợp cho sinh viên chuyên ngành Công nghệ thông tin, Kỹ thuật phần mềm đang thực hiện đồ án tốt nghiệp hoặc xây dựng ứng dụng web toàn diện:
- Sinh viên có thể tham khảo phương pháp kết nối và cấu trúc dự án theo mô hình MERN Stack đồng nhất bằng ngôn ngữ JavaScript.
- Phần phân tích và thiết kế hệ thống tại Chương 4 có giá trị thực tiễn cao nhờ cung cấp hệ thống tài liệu chi tiết: biểu đồ use case, biểu đồ tuần tự, biểu đồ hoạt động, quy tắc nghiệp vụ và lược đồ cơ sở dữ liệu NoSQL (MongoDB Collections).
- Chương 5 cung cấp tài liệu hữu ích về việc tích hợp cổng thanh toán trực tuyến (PayPal, VNPay) và quy trình thiết lập kịch bản kiểm thử tự động với Selenium WebDriver.
Câu hỏi thường gặp
1. Khóa luận sử dụng công nghệ nào để xây dựng hệ thống website?
Hệ thống sử dụng bộ công nghệ MERN Stack làm chủ đạo, bao gồm MongoDB (cơ sở dữ liệu NoSQL), ExpressJS (framework backend), ReactJS (thư viện frontend) và NodeJS (môi trường thực thi phía máy chủ). Ngoài ra, hệ thống sử dụng thêm JSON Web Token (JWT) để xác thực, bcrypt để mã hóa, Redux để quản trị trạng thái và Selenium WebDriver cho kiểm thử tự động.
2. Cơ sở dữ liệu của website gồm những Collection nào?
Cơ sở dữ liệu MongoDB trong đồ án được thiết kế gồm 9 Collection chính: User, Products, Categories, Oders, DetailOders, Carts, DetailCart, Comment và Promotion.
3. Tác giả đã khảo sát những website bán sách nào trên thị trường trước khi thiết kế hệ thống?
Tác giả đã tiến hành khảo sát giao diện, ưu điểm và nhược điểm của 5 website thương mại điện tử: Tiki (tiki.vn), Fahasa (fahasa.com), Vinabook (vinabook.com), Shopee (shopee.vn) và Newshop (newshop.vn).
4. Website tích hợp những cổng thanh toán trực tuyến nào?
Hệ thống tích hợp hai cổng thanh toán trực tuyến là cổng thanh toán quốc tế PayPal và cổng thanh toán nội địa VNPay (hỗ trợ xác thực qua tài khoản ngân hàng và mã OTP).
5. Danh mục REST API của hệ thống bao gồm những phương thức nào?
Văn bản đồ án công bố danh mục API sử dụng ba phương thức HTTP cơ bản: phương thức POST (đăng nhập, đăng ký, tạo user, thêm sản phẩm, thêm danh mục), phương thức GET (lấy thông tin sản phẩm, lấy thông tin đơn hàng) và phương thức PUT (chỉnh sửa user, chỉnh sửa sản phẩm).
Kết luận
Khóa luận tốt nghiệp "Xây dựng website bán sách online sử dụng công nghệ MERN stack" của sinh viên Lưu Đình Chuẩn và Phan Thị Thu Trang đã hoàn thành mục tiêu nghiên cứu và hiện thực hóa một ứng dụng thương mại điện tử chuyên ngành sách hoàn chỉnh. Đề tài vận dụng hiệu quả ngăn xếp công nghệ JavaScript toàn diện kết hợp cùng các giải pháp thanh toán điện tử PayPal, VNPay và quy trình kiểm thử tự động với Selenium WebDriver. Mặc dù còn một số hạn chế do kinh nghiệm thực tế và thời gian thực hiện, công trình đã đáp ứng đầy đủ các yêu cầu kỹ thuật của một đồ án tốt nghiệp kỹ sư công nghệ thông tin.