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

1. Lý do chọn đề tài và bối cảnh thực tiễn

Sự bùng nổ của mạng Internet và tiến bộ của công nghệ thông tin đã tác động sâu sắc đến mọi lĩnh vực đời sống, sinh hoạt và giải trí của con người, thúc đẩy sự phát triển của thương mại điện tử. Trước đây, nhu cầu tiếp cận tri thức chủ yếu thông qua sách giấy tại các hiệu sách truyền thống, khiến người mua gặp khó khăn về việc tìm kiếm các đầu sách hiếm cũng như tiêu tốn thời gian và chi phí đi lại. Hiện nay, các nền tảng thương mại điện tử và ứng dụng di động ra đời đã giải quyết rào cản này.

Theo số liệu khảo sát của nhóm nghiên cứu Picodi công bố vào tháng 3/2019 (thực hiện trên 7.800 người tại 41 quốc gia nhân ngày Sách và Bản quyền Thế giới):

  • 89% người Việt Nam đọc sách và 21% còn lại không đọc.
  • 60% người Việt mua 1 cuốn sách/năm.
  • 29% người Việt mua sách giấy từ các cửa hàng sách trực tuyến.

Số liệu trên cho thấy tiềm năng tiêu thụ và nhu cầu đối với các ứng dụng mua bán sách trực tuyến tại Việt Nam là rất lớn. Xuất phát từ thực tiễn đó, cùng với sự xuất hiện của các ứng dụng thương mại điện tử bán sách trên thị trường như Fahasa, Vinabook, Tiki, đề tài "Xây dựng ứng dụng di động đa nền tảng bán sách sử dụng Framework Flutter" được thực hiện nhằm xây dựng giải pháp mua sắm sách trên thiết bị di động tiện lợi, không bị giới hạn bởi không gian và thời gian.

2. Mục tiêu và nhiệm vụ nghiên cứu

Đề tài xác định các mục tiêu và nhiệm vụ cụ thể sau:

  1. Tìm hiểu ngôn ngữ lập trình Dart, nền tảng Flutter và cơ sở dữ liệu Cloud Firestore (thuộc hệ sinh thái Firebase) để ứng dụng vào phát triển phần mềm.
  2. Phân tích, thiết kế và xây dựng ứng dụng di động hỗ trợ mua sắm sách trực tuyến cùng hệ thống trang web quản trị phục vụ công tác quản lý.
  3. Hiện thực hóa các nhóm chức năng nghiệp vụ:
    • Dành cho khách vãng lai (Guest): xem màn hình giới thiệu, duyệt trang chủ, tra cứu danh mục, xem thông tin chi tiết sách, tìm kiếm sách, thêm sách vào giỏ hàng.
    • Dành cho khách hàng thành viên (Member): các chức năng của khách vãng lai kèm theo bình luận, đánh giá số sao, đặt hàng, áp dụng mã khuyến mãi, thanh toán (trực tiếp hoặc qua ví điện tử MoMo), quản lý tài khoản, quản lý đơn hàng, thêm sách yêu thích, phản hồi và báo lỗi.
    • Dành cho nhà quản trị (Admin): đăng nhập trang quản trị, quản lý danh mục sách, quản lý quảng cáo/banner, quản lý người dùng và nhóm quyền, quản lý chi tiết đơn hàng cùng các trạng thái thanh toán và vận chuyển.

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

  • Đối tượng nghiên cứu: Công nghệ phát triển ứng dụng di động đa nền tảng Flutter (ngôn ngữ Dart), giải pháp Backend-as-a-Service Firebase và hệ cơ sở dữ liệu NoSQL Cloud Firestore.
  • Phạm vi không gian và công nghệ: Xây dựng ứng dụng di động đa nền tảng mang tên "Lollipop Book" chạy trên hệ điều hành Android và iOS từ một cơ sở mã nguồn duy nhất, kết hợp một trang web quản trị đơn giản dành cho quản trị viên.
  • Phạm vi thời gian: Đề tài được giao ngày 24/02/2020 và hoàn thành nộp báo cáo vào ngày 01/07/2020 tại Khoa Đào tạo Chất lượng cao, Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh.

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

1. Khung lý thuyết và công nghệ sử dụng

  • Framework Flutter: Là bộ công cụ mã nguồn mở phát triển giao diện (UI Framework) do Google công bố lần đầu vào năm 2015 dưới tên Sky và phát hành bản ổn định từ cuối năm 2018. Flutter cho phép biên dịch mã nguồn viết bằng ngôn ngữ Dart thành mã máy Native chạy trên cả Android, iOS, Web và Desktop.
  • Ngôn ngữ Dart: Ngôn ngữ lập trình hướng đối tượng hỗ trợ cơ chế biên dịch Just-In-Time (JIT) phục vụ tính năng Hot Reload trong quá trình phát triển và Ahead-Of-Time (AOT) khi xuất bản ứng dụng.
  • Kiến trúc Widget trong Flutter: Giao diện được cấu thành hoàn toàn từ các Widget phân cấp (StatelessWidget cho thành phần tĩnh và StatefulWidget kết hợp hàm setState() để cập nhật lại cây giao diện khi trạng thái dữ liệu thay đổi).
  • Cơ sở dữ liệu Firebase Cloud Firestore: Giải pháp cơ sở dữ liệu NoSQL dạng tài liệu (Document) đặt trong các bộ sưu tập (Collection), hỗ trợ đồng bộ dữ liệu thời gian thực (Realtime), hỗ trợ truy vấn ngoại tuyến (Offline support), bảo mật truy cập thông qua Firebase Authentication và Firestore Security Rules.

2. Phương pháp nghiên cứu thực tế

  • Phương pháp phân tích và thiết kế hệ thống: Khảo sát yêu cầu người dùng, mô hình hóa chức năng qua biểu đồ Use Case tổng quan và 29 đặc tả Use Case chi tiết, xây dựng các biểu đồ tuần tự (Sequence Diagram) cho các luồng nghiệp vụ quan trọng (Đăng ký, Đăng nhập, Quên mật khẩu, Tìm kiếm sách, Thanh toán, Sửa thông tin cá nhân, Đăng xuất).
  • Phương pháp so sánh công nghệ: Đối chiếu đặc tính kỹ thuật giữa hai nền tảng phát triển đa nền tảng hàng đầu là Flutter và React Native.
  • Phương pháp thực nghiệm phát triển phần mềm: Tiến hành cài đặt mã nguồn, cấu hình liên kết cơ sở dữ liệu Firebase và kiểm thử chức năng (Functional Testing) trên hệ thống giao diện người dùng.

Thiết kế và triển khai

1. Kiến trúc hệ thống

Hệ thống ứng dụng Flutter được tổ chức theo cấu trúc phân tầng chuẩn gồm:

  • Tầng Platform: Cung cấp Shell để lưu trữ máy ảo Dart VM, cung cấp API truy cập dịch vụ nền tảng gốc (Native Platform) và Embedder API.
  • Tầng Engine: Đóng gói Dart Runtime, thư viện đồ họa 2D Skia Canvas, Platform Channels giúp giao tiếp với hệ điều hành.
  • Tầng Framework: Chứa bộ thư viện giao diện phong phú viết bằng Dart, chia thành hai phong cách chính là Material (chuẩn Android) và Cupertino (chuẩn iOS), đi kèm hệ thống xử lý hoạt ảnh (Animation), vẽ giao diện (Painting) và nhận diện cử chỉ (Gestures).

2. Cấu trúc cơ sở dữ liệu Firestore

Cơ sở dữ liệu NoSQL của ứng dụng Lollipop Book được thiết kế gồm 15 bộ sưu tập (Collections) lưu trữ tài liệu dữ liệu:

STT Tên Collection Mục đích lưu trữ
1 Advertisement Thông tin hình ảnh, liên kết các chương trình quảng cáo
2 DanhMucCollection Danh sách các danh mục phân loại sách
3 SachCollection Chi tiết sách (tên, giá, nhà xuất bản, số lượng, mô tả)
4 ReviewCollection Bình luận và số sao đánh giá của khách hàng
5 FeedbackCollection Danh mục các tiêu đề phản hồi, đóng góp ý kiến
6 FeedbackDetailCollection Nội dung chi tiết các phản hồi và báo lỗi từ người dùng
7 NotificationsCollection Thông tin các thông báo hệ thống gửi tới người dùng
8 SearchCollection Lịch sử và dữ liệu từ khóa tìm kiếm
9 SuggestionBookCollection Danh sách sách gợi ý hiển thị cho người dùng
10 UserCollection Thông tin tài khoản người dùng, email, thông tin định danh
11 FavoriteBookCollection Danh sách các đầu sách được người dùng đánh dấu yêu thích
12 OrderCollection Thông tin chi tiết đơn đặt hàng của từng người dùng
13 BoughtBooksCollection Danh sách các sách đã được khách hàng thanh toán hoàn tất
14 PromotionalCodeCollection Mã giảm giá, điều kiện áp dụng và mức chiết khấu
15 OrderAdminCollection Tổng hợp toàn bộ đơn hàng phục vụ phân quyền xử lý cho Admin

3. Thiết kế giao diện và quy trình nghiệp vụ

Ứng dụng di động thiết kế hơn 26 màn hình chức năng chính, bao gồm: Màn hình khởi động (SplashScreen), Giới thiệu, Chọn danh mục yêu thích, Chào mừng (Welcome), Đăng ký, Đăng nhập (hỗ trợ tài khoản Email, Facebook, Google), Quên mật khẩu, Xác minh số điện thoại/OTP, Trang chủ, Danh mục, Giỏ hàng, Tiêu điểm sách, Trang cá nhân, Chi tiết sách, Đánh giá sách, Địa chỉ nhận hàng, Phương thức thanh toán, Xác nhận đơn hàng, Quản lý đơn hàng, Thông báo, Danh sách yêu thích, Khuyến mãi, Góp ý và báo lỗi.


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

CHƯƠNG 1: TỔNG QUAN

Chương 1 tập trung khảo sát hiện trạng thị trường mua bán sách trực tuyến và làm rõ các yêu cầu của hệ thống. Tác giả phân tích số liệu khảo sát thói quen đọc sách năm 2019 của Picodi và khảo sát các ứng dụng tương tự (Fahasa, Vinabook, Tiki). Từ đó, xác định hệ thống có 3 tác nhân chính: Khách vãng lai (Guest), Khách hàng thành viên (Member) và Quản trị viên (Admin).

Chương này xây dựng lược đồ Use Case tổng quan và cung cấp 29 bảng đặc tả Use Case chi tiết:

  • Phía khách hàng gồm 20 chức năng: Đăng ký, Đăng nhập, Chọn 4 danh mục yêu thích, Xem trang chủ, Xem thông tin sách, Tìm kiếm sách, Thêm vào giỏ hàng, Xem giỏ hàng, Xem danh mục, Xem tiêu điểm, Bình luận & đánh giá, Thanh toán, Sử dụng mã khuyến mãi, Quản lý tài khoản cá nhân, Quản lý đơn hàng, Thêm sách yêu thích, Phản hồi/báo lỗi, Xem thông báo, Quên mật khẩu, Đăng xuất.
  • Phía quản trị gồm 6 chức năng: Đăng nhập web Admin, Đăng xuất web Admin, Quản lý sách, Quản lý quảng cáo, Quản lý người dùng, Quản lý đơn đặt hàng (cập nhật trạng thái thanh toán: Chưa thanh toán, Đã thanh toán; trạng thái giao hàng: Chờ xử lý, Đang xử lý, Đang giao, Hoàn tất, Hủy đơn hàng).

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

Chương 2 trình bày chi tiết về các công nghệ nền tảng được lựa chọn:

  1. Framework Flutter: Trình bày lịch sử phát triển từ dự án Sky (2015) của Eric Seidel đến bản phát hành chính thức năm 2018; phân tích đặc điểm mọi thành phần đều là Widget; làm rõ kiến trúc 3 tầng (Platform, Engine, Framework); đánh giá ưu điểm (mã nguồn mở, giao diện đẹp với Material/Cupertino, tốc độ phát triển nhanh với Hot Reload, hiệu năng Native, dùng chung một codebase) và nhược điểm (kích thước file ứng dụng lớn, hệ thống thư viện mở rộng còn ít hơn Native thuần).
  2. So sánh Flutter và React Native: Phân tích sự khác biệt giữa hai giải pháp cross-platform hàng đầu.
Tiêu chí Flutter React Native
Ngôn ngữ Dart JavaScript
Nhà phát triển Google Facebook
Năm phát hành 2017 (bản thử nghiệm) 2015
Hiệu năng Native Rất tốt (biên dịch trực tiếp mã máy, render qua Skia) Tốt (thông qua cầu nối giao tiếp JavaScript Bridge)
Thời gian ra thị trường Nhanh Chậm hơn Flutter
Tài liệu hướng dẫn Tóm lược, rõ ràng và liên tục cập nhật Không tóm lược, được cập nhật
Ứng dụng tiêu biểu Alibaba, Reflectly, Google Greentea, Tencent, Google App, App Tree Facebook, Instagram, Pinterest, Uber, Tesla, Walmart, Baidu Mobile
  1. Tổng quan Firebase và Cloud Firestore: Giới thiệu lịch sử hình thành từ dịch vụ Envolve (2011) do James Tamplin và Andrew Lee sáng lập, tái cấu trúc thành Firebase năm 2012 và được Google mua lại năm 2014. Làm rõ mô hình lưu trữ NoSQL theo Collection/Document/Subcollection, khả năng đồng bộ thời gian thực, hạn ngạch gói miễn phí và cơ chế xác thực Authentication.

CHƯƠNG 3: THIẾT KẾ PHẦN MỀM

Chương 3 trình bày toàn bộ quá trình thiết kế hệ thống phần mềm:

  • Xây dựng 7 lược đồ Sequence chi tiết cho các tiến trình: Đăng ký, Đăng nhập, Quên mật khẩu, Tìm kiếm sách, Thanh toán, Sửa thông tin cá nhân và Đăng xuất.
  • Thiết kế chi tiết cấu trúc dữ liệu cho 15 Collection trong Cloud Firestore, xác định cụ thể kiểu dữ liệu và ý nghĩa của từng trường thuộc tính (như Advertisement, SachCollection, OrderCollection, PromotionalCodeCollection,...).
  • Thiết kế chi tiết giao diện người dùng và lập bảng mô tả thành phần điều khiển (UI Controls/Objects) cho hơn 25 màn hình ứng dụng trên thiết bị di động.

CHƯƠNG 4: KẾT QUẢ SO SÁNH, THỰC NGHIỆM, PHÂN TÍCH, TỔNG HỢP

Chương 4 ghi nhận kết quả triển khai cài đặt ứng dụng trên môi trường thực tế:

  • Hoàn thiện cài đặt ứng dụng di động đa nền tảng Flutter và triển khai trang web quản trị đơn giản.
  • Tiến hành kiểm thử chức năng (Functional Testing) cho toàn bộ các màn hình và luồng thao tác của người dùng (từ khâu đăng ký, đăng nhập tài khoản, duyệt danh mục, tìm kiếm, đưa sách vào giỏ, nhập mã giảm giá, chọn phương thức thanh toán đến hủy đơn hàng ở trạng thái cho phép). Kết quả kiểm thử chức năng được tổng hợp chi tiết theo bảng kiểm thử.

CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

Chương 5 đúc kết các kết quả đạt được, đánh giá ưu điểm và hạn chế trong quá trình thực hiện đồ án, đồng thời vạch ra lộ trình hoàn thiện và mở rộng đề tài trong tương lai.


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

1. Kết quả chính đạt được

  • Xây dựng thành công ứng dụng di động đa nền tảng "Lollipop Book" viết bằng ngôn ngữ Dart trên nền tảng Flutter, hoạt động đồng bộ với hệ thống cơ sở dữ liệu đám mây Firebase Firestore.
  • Xây dựng hệ thống web quản trị đơn giản hỗ trợ quản trị viên thực hiện đầy đủ các tác vụ quản lý sách, quản lý người dùng, quản lý quảng cáo và theo dõi, cập nhật tiến độ đơn đặt hàng.
  • Hiện thực hóa đầy đủ 20 chức năng người dùng di động và 6 nhóm chức năng quản trị đúng theo mục tiêu thiết kế ban đầu; hỗ trợ tích hợp phương thức thanh toán ví điện tử MoMo bên cạnh hình thức thanh toán khi nhận hàng (COD).

2. Đóng góp về mặt kỹ thuật và thực tiễn

  • Kiểm chứng tính khả thi và hiệu quả của Framework Flutter trong việc phát triển ứng dụng thương mại điện tử di động với một cơ sở mã nguồn duy nhất cho cả Android và iOS, giúp rút ngắn thời gian và chi phí phát triển so với lập trình Native riêng biệt.
  • Áp dụng thành công mô hình cơ sở dữ liệu NoSQL đám mây Cloud Firestore vào việc quản lý dữ liệu phân cấp, danh mục sách, đơn hàng và xử lý đồng bộ dữ liệu người dùng theo thời gian thực.

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

1. Hạn chế

  • Do thời điểm thực hiện (năm 2020), hệ sinh thái thư viện ngoài của Flutter SDK còn hạn chế hơn so với Native SDK truyền thống.
  • Kích thước tệp cài đặt ứng dụng Flutter còn tương đối lớn vì phải tích hợp các thành phần thư viện và Engine hỗ trợ đa nền tảng.
  • Cơ sở dữ liệu NoSQL Firestore tổ chức theo dạng cây phân cấp (Tree/Parent-Children) không theo cấu trúc bảng quan hệ (Table) truyền thống, đòi hỏi xử lý cấu trúc truy vấn đặc thù để tránh phát sinh chi phí đọc/ghi dữ liệu.

2. Hướng phát triển

  • Tối ưu hóa hiệu năng và dung lượng gói cài đặt ứng dụng khi triển khai thực tế.
  • Mở rộng thêm các cổng thanh toán điện tử khác ngoài MoMo và tích hợp sâu hơn hệ thống thông báo đẩy (Push Notification) qua Firebase Cloud Messaging.
  • Tận dụng năng lực đa nền tảng mở rộng của Flutter để phát triển phiên bản Web và Desktop hoàn chỉnh cho hệ thống quản trị.

Giá trị tham khảo

Đồ án là tài liệu 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: Tham khảo quy trình phân tích thiết kế hệ thống hoàn chỉnh từ khảo sát yêu cầu, xây dựng bảng đặc tả Use Case, thiết kế biểu đồ tuần tự (Sequence Diagram) đến thiết kế dữ liệu NoSQL trên Cloud Firestore.
  • Lập trình viên ứng dụng di động: Cung cấp tài liệu tổng quan, bảng so sánh trực quan giữa Flutter và React Native, cùng cấu trúc tổ chức mã nguồn giao diện dựa trên Widget và quản lý trạng thái (StatefulWidget, setState) trong Flutter.

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

1. Theo khảo sát được trích dẫn trong đề tài, tỷ lệ mua và đọc sách của người Việt Nam như thế nào?

Theo số liệu khảo sát tháng 3/2019 của tổ chức Picodi trên 7.800 người tại 41 quốc gia được tác giả trích dẫn: 89% người Việt Nam có đọc sách (21% không đọc), 60% người Việt mua 1 cuốn sách trong 1 năm và 29% mua sách giấy thông qua các kênh cửa hàng sách trực tuyến.

2. Kiến trúc của Flutter bao gồm những tầng nào và vai trò của từng tầng là gì?

Kiến trúc Flutter gồm 3 tầng:

  • Tầng Platform: Cung cấp Shell lưu trữ Dart VM, cấp quyền truy cập API gốc của nền tảng Native và cung cấp Embedder API.
  • Tầng Engine: Chứa Dart Runtime, công cụ kết xuất đồ họa 2D Skia Canvas và Platform Channel để giao tiếp với hệ thống.
  • Tầng Framework: Chứa bộ điều khiển UI (Widget) theo phong cách Material/Cupertino, hệ thống quản lý hoạt ảnh, vẽ đồ họa và nhận diện tương tác cử chỉ.

3. Cơ sở dữ liệu của ứng dụng Lollipop Book được tổ chức như thế nào trên Firestore?

Cơ sở dữ liệu được tổ chức dưới dạng NoSQL Cloud Firestore gồm 15 Collection chính: Advertisement, DanhMucCollection, SachCollection, ReviewCollection, FeedbackCollection, FeedbackDetailCollection, NotificationsCollection, SearchCollection, SuggestionBookCollection, UserCollection, FavoriteBookCollection, OrderCollection, BoughtBooksCollection, PromotionalCodeCollection và OrderAdminCollection.

4. Ứng dụng hỗ trợ những phương thức thanh toán nào cho khách hàng?

Ứng dụng Lollipop Book hỗ trợ hai phương thức thanh toán gồm: thanh toán trực tiếp khi nhận hàng (COD) và thanh toán trực tuyến thông qua ví điện tử MoMo.

5. Người dùng thành viên có thể hủy đơn hàng trong trạng thái nào?

Theo tài liệu đặc tả chức năng (Bảng 1.26), khách hàng thành viên có quyền thực hiện hủy đơn hàng khi đơn hàng đang ở trạng thái "Đã tiếp nhận" (hoặc đơn có trạng thái chưa thanh toán, chưa giao hàng và chờ xử lý).


Kết luận

Đồ án tốt nghiệp "Xây dựng ứng dụng di động đa nền tảng bán sách sử dụng Framework Flutter" của sinh viên Đào Ngọc Hùng và Nguyễn Thị Vân Anh (Trường Đại học Sư phạm Kỹ thuật TP.HCM) đã hoàn thành trọn vẹn mục tiêu nghiên cứu và xây dựng phần mềm thương mại điện tử bán sách Lollipop Book. Đề tài đã phân tích chi tiết cơ sở lý thuyết về kiến trúc Flutter, ngôn ngữ Dart và hệ cơ sở dữ liệu đám mây Cloud Firestore, đồng thời so sánh toàn diện với giải pháp React Native. Kết quả của đề tài khẳng định tính khả thi, tiện ích và hiệu quả của việc ứng dụng Flutter trong việc phát triển ứng dụng di động đa nền tảng hiện đại.