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

Sự phát triển của công nghệ thông tin và truyền thông số đã tác động trực tiếp đến văn hóa đọc – một trong những trụ cột tiếp nhận tri thức của xã hội trong bối cảnh công nghiệp hóa, hiện đại hóa và cuộc cách mạng công nghiệp 4.0. Tuy nhiên, số lượng người đọc thực tế có xu hướng sụt giảm do sự cạnh tranh từ các nền tảng mạng xã hội và phương tiện truyền thông nghe nhìn. Bên cạnh đó, sự bùng nổ của xuất bản số tạo ra khối lượng thông tin lớn, đặt ra yêu cầu cá nhân hóa nội dung theo trình độ, nghề nghiệp và nhu cầu của từng đối tượng độc giả. Để giải quyết các thách thức trên, đề tài "Xây dựng App Ebook sử dụng NodeJS và Flutter" được thực hiện bởi nhóm tác giả Trần Thị Trà My và Nguyễn Thị Quỳnh Như 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 Thành phố Hồ Chí Minh (khoá 2020 – 2024).

Đề tài xác định 3 mục đích cụ thể:

  1. Xây dựng ứng dụng đọc sách cung cấp các tính năng tiện ích, cải thiện trải nghiệm đọc, tiết kiệm thời gian, chi phí và mang lại hiệu quả cao.
  2. Thiết kế giao diện đơn giản, thẩm mỹ, thuận tiện trong sử dụng và thân thiện với người dùng.
  3. Cung cấp các tính năng tiện lợi, độc đáo nhằm hỗ trợ và duy trì thói quen đọc sách trên thiết bị di động.

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

  • Đối tượng nghiên cứu:
    • Người sử dụng cuối (end-user): Bao gồm khách vãng lai và người dùng đã đăng ký tài khoản, tập trung chủ yếu vào đối tượng độc giả trẻ tuổi.
    • Quản trị viên hệ thống (administrator): Người có thẩm quyền quản trị toàn bộ dữ liệu nền tảng gồm sách, danh mục, tác giả, nhiệm vụ, lịch sử đọc và các giao dịch.
  • Phạm vi nghiên cứu:
    • Phạm vi công nghệ: Nền tảng di động đa nền tảng Flutter và ngôn ngữ Dart cho ứng dụng khách; môi trường máy chủ Node.js để xây dựng hệ thống API; dịch vụ đám mây Firebase (Firestore, Authentication, Storage) và thư viện lưu trữ cục bộ SharedPreferences.
    • Phạm vi thời gian: Đề tài được triển khai thực hiện từ ngày 01/03/2024 đến ngày 11/07/2024.

Cơ sở lý thuyết và phương pháp

Khóa luận kết hợp nghiên cứu lý thuyết kỹ thuật phần mềm với phương pháp khảo sát thực nghiệm và mô hình hóa hệ thống. Các công nghệ và nền tảng chính được tác giả phân tích và ứng dụng bao gồm:

  • Flutter SDK: Bộ công cụ phát triển phần mềm mã nguồn mở do Google công bố ngày 04/12/2018, hỗ trợ xây dựng ứng dụng di động cho cả iOS và Android từ một cơ sở mã (codebase) duy nhất. Nền tảng ứng dụng cơ chế Hot Reload, hệ thống thành phần giao diện (Widget) xây dựng dựa trên hai bộ tiêu chuẩn Material Design và Cupertino.
  • Ngôn ngữ Dart: Ngôn ngữ lập trình hướng đối tượng dựa trên lớp do Google phát triển (phát hành ổn định tháng 06/2017), hỗ trợ hai cơ chế biên dịch: AOT (Ahead of Time) và JIT (Just-In-Time). Dart cung cấp cơ chế kiểm tra kiểu an toàn (type safe) và xử lý bất đồng bộ, đa luồng thông qua cơ chế Isolates không chia sẻ bộ nhớ.
  • Nền tảng Firebase: Nền tảng dịch vụ đám mây phụ trợ của Google, cung cấp các dịch vụ cốt lõi: cơ sở dữ liệu thời gian thực (Real-time Database / Cloud Firestore), xác thực người dùng (Firebase Authentication) qua email và mạng xã hội (Google, Facebook, Twitter, GitHub), dịch vụ thông báo Firebase Cloud Messaging (FCM) và Google Analytics.
  • Môi trường chạy Node.js: Môi trường thực thi JavaScript phía máy chủ xây dựng trên nền tảng Chrome V8 JavaScript Engine, áp dụng kiến trúc hướng sự kiện, mô hình vào/ra bất đồng bộ phi khối (non-blocking I/O) và mô hình đơn luồng (single-thread) kết hợp vòng lặp sự kiện (Event Loop).

Phương pháp nghiên cứu thực tiễn bao gồm:

  1. Khảo sát dữ liệu thứ cấp về thị trường sách điện tử: Dữ liệu thống kê từ Nielsen Book Research (2016) cho thấy tỷ lệ chia sẻ sách điện tử tăng từ 20% lên 33% trong giai đoạn 2012 – 2014; báo cáo của PwC (2014) chỉ ra doanh số bán lẻ ebook toàn cầu tăng từ khoảng 2 tỷ USD năm 2009 lên 12 tỷ USD năm 2014 (tăng trưởng bình quân 50%/năm) và dự báo đạt khoảng 20 tỷ USD vào năm 2018.
  2. Khảo sát hiện trạng phần mềm: So sánh điểm mạnh và điểm yếu của hai ứng dụng thực tế trên thị trường là Amazon Kindle và Tủ Sách - Read Ebook.
  3. Kỹ thuật phần mềm: Phân tích yêu cầu chức năng, phi chức năng; xây dựng biểu đồ Use Case, Lược đồ tuần tự (Sequence Diagram), lược đồ cơ sở dữ liệu và thiết kế ca kiểm thử (Test Cases).
Ứng dụng khảo sát Điểm mạnh Điểm yếu
Amazon Kindle Kho sách lớn; giao diện đơn giản, trực quan; đồng bộ tiến trình đọc xuyên suốt giữa các thiết bị; chế độ đọc linh hoạt (chế độ ban đêm, tùy chỉnh cỡ chữ/phông chữ); hỗ trợ chia sẻ trích dẫn. Phụ thuộc vào hệ sinh thái Amazon; nguồn sách miễn phí bị giới hạn, phần lớn tác phẩm mới phải trả phí.
Tủ Sách - Read Ebook Giao diện thân thiện; kho sách đa dạng; chế độ đọc linh hoạt (xoay ngang/dọc, nền tối giảm ánh sáng xanh); hỗ trợ nhiều định dạng ebook; cho phép chia sẻ trích dẫn và đánh dấu. Xuất hiện quảng cáo gây gián đoạn; không hỗ trợ đồng bộ hóa với máy đọc sách chuyên dụng; yêu cầu nâng cấp tài khoản để đọc ngoại tuyến.

Thiết kế và triển khai

Hệ thống được thiết kế theo mô hình phân tầng hướng dịch vụ, kết hợp giữa ứng dụng di động phía người dùng và giao diện quản trị web:

[Flutter Mobile Client] <---> [Node.js REST API] <---> [Cloud Firestore / Firebase Storage]
       |                                                         |
       +---> [Local Storage: SharedPreferences]                  +---> [Payment Gateways: PayPal, VNPay]
  • Kiến trúc phía Client: Ứng dụng di động xây dựng bằng Flutter áp dụng mô hình quản lý trạng thái BLoC (Business Logic Component) nhằm tách biệt logic xử lý khỏi giao diện hiển thị. Dữ liệu cấu hình và trạng thái đọc cục bộ được lưu trữ tại thiết bị thông qua SharedPreferences.
  • Kiến trúc phía Backend: Xây dựng hệ thống API bằng Node.js làm trung gian tiếp nhận và xử lý các yêu cầu nghiệp vụ, kết nối cơ sở dữ liệu đám mây Cloud Firestore và lưu trữ tệp tin đa phương tiện (hình ảnh bìa, tệp âm thanh sách nói) trên Firebase Storage.
  • Cơ chế xác thực và bảo mật: Tích hợp Firebase Authentication hỗ trợ định danh qua Email, Facebook và Google. Chức năng gửi mã OTP phục vụ đăng ký và khôi phục mật khẩu được điều hướng qua dịch vụ Google Gmail.
  • Tích hợp cổng thanh toán: Hệ thống kết nối API với hai cổng thanh toán trực tuyến là VNPay và PayPal, cho phép người dùng nạp tiền vào ví ứng dụng để mua sách có bản quyền.
  • Xử lý tài nguyên và trạng thái: Để đảm bảo tính toàn vẹn của dữ liệu quan hệ, hệ thống áp dụng cơ chế xóa mềm (soft delete) bằng cách cập nhật cờ trạng thái false đối với các bản ghi dữ liệu và tài nguyên vô hiệu hóa, thay vì xóa trực tiếp khỏi cơ sở dữ liệu.

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

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

Nội dung chương trình bày tổng quan kỹ thuật về các nền tảng sử dụng trong đề tài:

  • Khảo sát Flutter SDK và các thuộc tính: kiến trúc đa nền tảng, tính năng Hot Reload, mã nguồn mở, khả năng truy cập tính năng gốc (Native SDKs), nguyên lý tối ưu mã nguồn qua Dart và hệ thống Widget chuyên biệt.
  • Phân tích ngôn ngữ Dart: lịch sử hình thành, cơ chế chạy độc lập nền tảng qua Dart VM, tính chất hướng đối tượng, hỗ trợ lập trình bất đồng bộ bằng Isolates, các thư viện mở rộng và hai cơ chế biên dịch AOT/JIT.
  • Phân tích dịch vụ Firebase: các dịch vụ Real-time Database, hệ thống xác thực người dùng, giải pháp truyền tin FCM và công cụ đo lường Google Analytics.
  • Trình bày về môi trường Node.js: cơ chế chạy mã trên V8 Engine, mô hình lập trình không chặn (non-blocking), khả năng mở rộng xử lý đồng thời, luồng đơn kết hợp Event Loop và giấy phép phát hành MIT.

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

  • Phân tích bối cảnh phát triển của thị trường sách điện tử dựa trên số liệu thứ cấp của Nielsen (2012 – 2014) và PwC (2009 – 2018).
  • Phân tích chi tiết hiện trạng trải nghiệm trên hai ứng dụng Kindle và Tủ Sách qua 16 màn hình chức năng.
  • Xác định bảng yêu cầu chức năng nghiệp vụ gồm 3 tác nhân:
    • Khách: 6 chức năng (Đăng ký tài khoản, Tìm kiếm, Xem thông tin sách, Xem bình luận, Xem danh sách nhiệm vụ, Chuyển đổi giao diện sáng/tối).
    • Người dùng: 21 chức năng (Đăng nhập, Quên mật khẩu, Đăng xuất, Đặt lại mật khẩu, Quản lý thông tin cá nhân, Đọc sách, Nghe sách nói, Đánh dấu trang, Ghi chú, Tra từ điển, Đổi cỡ chữ, Đánh giá sách, Thực hiện nhiệm vụ nhận thưởng, Xem câu hỏi thường gặp, Phản hồi quản trị viên, Nạp tiền, Mua sách, Xem thống kê hoạt động...).
    • Quản trị viên: 6 chức năng chính (Đăng nhập, Quản lý danh mục sách, Quản lý sách, Quản lý người dùng, Quản lý nhiệm vụ, Quản lý doanh thu).
  • Xác lập 9 yêu cầu chức năng hệ thống và 3 yêu cầu phi chức năng cốt lõi (bảo mật dữ liệu, giao diện trực quan, khả năng nâng cấp mở rộng).

Chương 3: Mô hình hóa các yêu cầu

  • Xây dựng sơ đồ Use Case chi tiết cho 3 phân hệ: Phân hệ khách (6 use cases), Phân hệ người dùng (18 use cases thành phần), Phân hệ quản trị viên (5 use cases quản trị).
  • Đặc tả luồng sự kiện cơ bản (Basic flow) và luồng rẽ nhánh (Alternative flow) cho các ca sử dụng chính: Đăng ký, Tìm kiếm, Xem thông tin sách, Xem bình luận, Xem nhiệm vụ, Đổi giao diện, Đăng nhập, Quên/Đặt lại mật khẩu, Quản lý cá nhân, Đọc sách, Nghe sách, Đánh dấu, Ghi chú, Tra từ điển, Mua sách, Nạp tiền.
  • Thiết kế 39 biểu đồ tuần tự (Sequence Diagram) mô tả chi tiết tương tác thời gian thực giữa giao diện người dùng, bộ điều khiển ứng dụng, API server Node.js và cơ sở dữ liệu.
  • Thiết kế cấu trúc cơ sở dữ liệu trên Cloud Firestore phản ánh các thực thể: Người dùng, Sách, Danh mục, Lịch sử đọc, Nhiệm vụ, Giao dịch ví.

Chương 4: Thiết kế giao diện phần mềm

  • Xây dựng lưu đồ luồng người dùng (User Flows in UX).
  • Thiết kế hệ thống màn hình đồ họa hỗ trợ đầy đủ 2 chế độ hiển thị: Giao diện sáng (Light mode) và Giao diện tối (Dark mode) với hơn 90 bản vẽ giao diện mẫu:
    • Phân hệ khách và màn hình chung: Màn hình Splash, Đăng nhập, Đăng ký, Trang chủ (Home), Tìm kiếm (theo từ khóa, tên sách, tên tác giả, thể loại), Chi tiết sách, Bình luận, Thư viện, Nhiệm vụ, Hồ sơ và Cài đặt.
    • Phân hệ người dùng đã đăng nhập: Trình đọc sách (tùy biến cỡ chữ, màu nền, đánh dấu trang), Trình phát sách nói (Audiobook), Trình ghi chú, Giao diện tra cứu từ điển, Giao diện nạp tiền (kết nối cổng thanh toán), Màn hình thống kê thời gian đọc và lịch sử giao dịch.
    • Phân hệ web dành cho quản trị viên: Màn hình Dashboard phân tích số liệu, màn hình CRUD (Thêm, Sửa, Xóa mềm) cho Danh mục sách, Sách, Người dùng, Hệ thống nhiệm vụ.

Chương 5: Cài đặt và kiểm thử

Triển khai cài đặt phần mềm và xây dựng bảng kịch bản kiểm thử chi tiết (Test cases) nhằm đánh giá độ ổn định của hệ thống:

  • Kiểm thử phân hệ khách: Đăng ký, tìm kiếm sách, duyệt danh mục, chuyển đổi theme.
  • Kiểm thử phân hệ người dùng: Kiểm thử ràng buộc logic khi đánh giá sách (chặn đánh giá khi chưa đọc hoặc chưa nghe sách), kiểm thử tra từ điển nội tuyến, lưu tiến trình sách nói, kiểm tra giao dịch nạp tiền qua cổng thanh toán, kiểm thử luồng mua sách bị trừ tiền trong ví, kiểm thử tự động ghi nhận hoàn thành nhiệm vụ đọc sách và bình luận.
  • Kiểm thử phân hệ quản trị viên: Kiểm thử thêm mới/chỉnh sửa danh mục, kiểm thử cập nhật nhiệm vụ, kiểm thử tính năng khóa và chặn người dùng vi phạm.

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

Kết quả chính

  • Xây dựng thành công ứng dụng di động đọc sách điện tử đa nền tảng bằng Flutter, vận hành ổn định trên hệ điều hành Android và iOS.
  • Xây dựng hoàn chỉnh hệ thống quản trị nội dung (Web Admin Dashboard) cho phép quản lý toàn diện cơ sở dữ liệu sách, người dùng và theo dõi hoạt động hệ thống.
  • Hoàn thiện các tính năng nghiệp vụ đọc sách chuyên sâu: đọc sách điện tử, nghe sách nói, tùy chỉnh cỡ chữ, đánh dấu trang, ghi chú văn bản, tra từ điển trực tiếp trên giao diện đọc.
  • Triển khai thành công cơ chế Gamification thông qua hệ thống nhiệm vụ đọc sách (xem sách, bình luận) tích điểm thưởng quy đổi vào số dư ví của tài khoản.
  • Tích hợp thành công 2 cổng thanh toán trực tuyến là PayPal và VNPay, hỗ trợ quy trình nạp tiền và mua sách bản quyền tự động.
  • Triển khai toàn diện 13 kịch bản kiểm thử chuyên sâu cho toàn bộ 3 phân hệ, xác nhận hệ thống vận hành đúng đặc tả thiết kế ban đầu.

Đóng góp thực tiễn của đề tài

  • Đồ án cung cấp một giải pháp tích hợp song song cả hai hình thức đọc sách truyền thống và nghe sách nói trên một ứng dụng duy nhất, khắc phục nhược điểm thiếu vắng tính năng sách nói ở một số ứng dụng nội địa.
  • Hệ thống hỗ trợ chế độ màn hình tối (Dark Theme) đồng bộ xuyên suốt từ giao diện khách, người dùng đến trình đọc, góp phần bảo vệ thị lực và tiết kiệm năng lượng cho thiết bị.
  • Mô hình phân quyền 3 lớp (Khách, Người dùng, Quản trị viên) được thiết kế chặt chẽ, tối ưu trải nghiệm người dùng vãng lai trước khi quyết định đăng ký thành viên chính thức.

Hạn chế và hướng nghiên cứu tiếp

  • Hạn chế:
    • Thời gian thực hiện đồ án có giới hạn (khoảng 4 tháng, từ tháng 03/2024 đến tháng 07/2024), kinh nghiệm thực tế của nhóm sinh viên trong triển khai dự án phần mềm quy mô lớn còn hạn chế.
    • Ứng dụng chưa tích hợp các thuật toán học máy (Machine Learning) để phân tích hành vi độc giả nhằm xây dựng hệ thống gợi ý sách tự động (Recommendation System).
    • Chưa hỗ trợ đồng bộ hóa dữ liệu với các thiết bị đọc sách chuyên dụng sử dụng màn hình E-ink.
  • Hướng phát triển:
    • Bổ sung thuật toán gợi ý tự động các đầu sách tương thích dựa trên thói quen, lịch sử đọc và đánh giá của từng cá nhân.
    • Mở rộng tính năng mạng xã hội: cho phép người dùng kết bạn, tạo nhóm đọc sách, chia sẻ trích dẫn và thảo luận cộng đồng trên ứng dụng.
    • Nghiên cứu tích hợp thêm các định dạng sách điện tử nâng cao (EPUB, MOBI) và mở rộng khả năng tối ưu hóa hiển thị trên nhiều dòng thiết bị đọc sách khác nhau.

Giá trị tham khảo

Đồ án là tài liệu tham khảo thực tiễn có giá trị chuyên môn đối với 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 chuyên ngành hoặc khóa luận tốt nghiệp về lập trình di động. Tài liệu mang lại giá trị tham khảo cụ thể ở các khía cạnh:

  • Tài liệu kiến trúc và công nghệ: Mô hình kết hợp giữa Flutter (quản lý trạng thái bằng BLoC) với backend Node.js và Firebase; phương thức tích hợp dịch vụ bên thứ ba (cổng thanh toán PayPal, VNPay, hệ thống gửi email xác thực của Google).
  • Quy trình phân tích thiết kế phần mềm: Hệ thống lược đồ Use Case chi tiết, 39 biểu đồ tuần tự (Sequence Diagram) chuẩn hóa và danh mục thiết kế màn hình UX/UI hỗ trợ song song hai chế độ sáng/tối.
  • Tài liệu kiểm thử phần mềm: Mẫu thiết kế kịch bản kiểm thử (Test Cases) chi tiết với các điều kiện ràng buộc nghiệp vụ thực tế (chặn đánh giá sách khi chưa trải nghiệm, kiểm thử luồng trừ tiền ví, tự động tích lũy thưởng nhiệm vụ).

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

1. Ứng dụng quản lý trạng thái giao diện và lưu trữ dữ liệu phía client bằng những giải pháp kỹ thuật nào?
Phía ứng dụng di động Flutter sử dụng mô hình BLoC (Business Logic Component) để phân tách logic nghiệp vụ và quản lý trạng thái luồng giao diện. Đối với việc lưu trữ dữ liệu cấu hình cục bộ (như chế độ giao diện sáng/tối, thông tin phiên đăng nhập), hệ thống sử dụng thư viện SharedPreferences.

2. Cơ chế xóa dữ liệu (sách, người dùng, nhiệm vụ) trên hệ thống được thực hiện như thế nào?
Hệ thống không xóa vật lý các bản ghi khỏi cơ sở dữ liệu Cloud Firestore. Thay vào đó, chức năng xóa sử dụng cơ chế xóa mềm: cập nhật cờ trạng thái của dữ liệu sang giá trị false (vô hiệu hóa). Khi đó, các tài nguyên này sẽ tự động bị ẩn khỏi giao diện tìm kiếm và truy cập của khách hàng cũng như người dùng.

3. Khách vãng lai (chưa đăng nhập) được phép sử dụng những chức năng nào trên ứng dụng?
Khách được phép truy cập 6 chức năng cơ bản: Đăng ký tài khoản mới, Tìm kiếm sách (theo tên sách, tác giả, thể loại), Xem thông tin chi tiết của sách, Xem danh sách bình luận/đánh giá, Xem danh sách nhiệm vụ của hệ thống và Chuyển đổi qua lại giữa chế độ giao diện sáng/tối.

4. Hệ thống triển khai những cổng thanh toán nào và cơ chế ghi nhận số dư diễn ra ra sao?
Ứng dụng tích hợp trực tiếp hai cổng thanh toán trực tuyến là PayPal và VNPay. Khi giao dịch nạp tiền trực tuyến được phía cổng thanh toán xác nhận thành công, hệ thống API sẽ tự động xử lý và cập nhật số tiền tương ứng vào ví ảo của tài khoản người dùng trên ứng dụng.

5. Điều kiện ràng buộc để người dùng có thể gửi đánh giá cho một cuốn sách là gì?
Theo kịch bản kiểm thử nghiệp vụ của đồ án (Test case 6.4), hệ thống áp dụng ràng buộc: người dùng chỉ được phép gửi đánh giá và chấm điểm cuốn sách sau khi đã phát sinh hành vi đọc sách hoặc nghe sách nói của cuốn sách đó. Nếu người dùng chưa từng đọc hoặc nghe, hệ thống sẽ chặn thao tác và đưa ra thông báo tương ứng.


Kết luận

Khóa luận tốt nghiệp "Xây dựng App Ebook sử dụng NodeJS và Flutter" của sinh viên Trần Thị Trà My và Nguyễn Thị Quỳnh Như đã hoàn thành việc nghiên cứu, thiết kế và hiện thực hóa một ứng dụng đọc sách điện tử đa nền tảng kết hợp tính năng sách nói. Bằng việc kết hợp các công nghệ Flutter, Node.js, cơ sở dữ liệu Firebase và hệ thống thanh toán trực tuyến kép (VNPay, PayPal), nhóm tác giả đã xây dựng hoàn chỉnh hệ sinh thái gồm ứng dụng di động cho người dùng và bảng điều khiển quản trị web. Đồ án đáp ứng đúng quy trình phát triển phần mềm chuẩn mực từ khảo sát hiện trạng, mô hình hóa use case, thiết kế tuần tự đến kiểm thử chức năng, đóng vai trò là một tài liệu tham khảo kỹ thuật hữu ích cho sinh viên ngành Công nghệ phần mềm.