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

Trong hơn một thập kỷ qua, sự thống trị của hai hệ điều hành di động Android và iOS đã thúc đẩy sự phát triển mạnh mẽ của ngành công nghiệp phần mềm ứng dụng. Tuy nhiên, việc phát triển ứng dụng di động truyền thống (Native) đòi hỏi các ngôn ngữ và bộ công cụ riêng biệt: Android sử dụng Java/Kotlin, trong khi iOS sử dụng Objective-C/Swift. Sự phân mảnh này dẫn đến việc phải duy trì hai cơ sở mã nguồn độc lập, làm tăng chi phí, thời gian và độ phức tạp trong quản lý dự án. Nhằm giải quyết rào cản trên, các bộ công cụ phát triển đa nền tảng (cross-platform) đã ra đời, tiêu biểu là Flutter do Google công bố năm 2015 và chính thức phát hành năm 2017.

Song song với sự phát triển công nghệ, ngành du lịch và lưu trú ghi nhận sự chuyển dịch mạnh mẽ từ phương thức truyền thống sang thương mại điện tử và đặt phòng trực tuyến:

  • Theo báo cáo từ Statista, sau giai đoạn suy giảm năm 2020 do tác động của đại dịch COVID-19, ngành du lịch đã phục hồi 50% tổng doanh thu vào năm 2021 (chủ yếu nhờ đặt phòng trực tuyến) và ước tính đạt mức phục hồi 85% vào cuối năm 2022.
  • Dữ liệu từ Techreport ghi nhận hơn 700 triệu người sử dụng dịch vụ đặt chỗ trực tuyến vào năm 2023.
  • Số liệu của App Annie cho thấy số lượt tải xuống ứng dụng đặt phòng toàn cầu năm 2021 đã vượt mốc 36 tỷ lượt.
  • Báo cáo từ Tripplo năm 2023 chỉ ra rằng 83% người trưởng thành ưu tiên đặt phòng du lịch trực tuyến thay vì phương thức trực tiếp.

Từ bối cảnh thực tiễn và công nghệ trên, đề tài khóa luận "Xây dựng ứng dụng thương mại điện tử trên nền tảng Flutter" được thực hiện nhằm xây dựng hệ thống đặt phòng khách sạn đa nền tảng (Web và Android).

Mục tiêu nghiên cứu cụ thể bao gồm:

  1. Phân tích yêu cầu hệ thống: Xác định các yêu cầu chức năng (tìm kiếm, đặt phòng, thanh toán, quản lý đơn đặt phòng, tương tác và đánh giá) cùng các yêu cầu phi chức năng (tính bảo mật dữ liệu, tính tương thích đa thiết bị, tốc độ và hiệu suất xử lý).
  2. Thiết kế kiến trúc và giao diện: Xây dựng giao diện người dùng đồng nhất, trực quan trên cả môi trường Web và Android; tối ưu hóa tải trọng và thời gian phản hồi.
  3. Phát triển và tích hợp thuật toán: Sử dụng ngôn ngữ Dart và framework Flutter để lập trình ứng dụng; tích hợp các thuật toán tìm kiếm (Binary Search), lọc khuyến nghị (Collaborative Filtering, Content-based Filtering) và định vị đường đi (Depth-First Search).

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

  • Đối tượng nghiên cứu: Ứng dụng thương mại điện tử phục vụ đặt phòng khách sạn (Booking Hotel) tương thích nền tảng Web và Android.
  • Phạm vi và giới hạn: Nghiên cứu tập trung vào việc hiện thực hóa các chức năng cơ bản và vận hành thuật toán trong môi trường mô phỏng cục bộ (Local). Hệ thống chưa tiến hành thử nghiệm với người dùng thực địa và chưa phát hành trên các kho ứng dụng trực tuyến do giới hạn thời gian và tài nguyên kiểm duyệt.

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

Khung lý thuyết và công nghệ nền tảng

Nghiên cứu ứng dụng các công nghệ và mô hình kỹ thuật sau:

  • Framework Flutter: Bộ công cụ phát triển phần mềm giao diện nguồn mở của Google, hỗ trợ xuất bản ứng dụng đa nền tảng từ một cơ sở mã nguồn. Flutter sử dụng công cụ kết xuất đồ họa Skia để vẽ giao diện trực tiếp, cung cấp hai bộ widget chuẩn là Material Design và Cupertino.
  • Ngôn ngữ lập trình Dart: Hỗ trợ cơ chế biên dịch kép: Just-In-Time (JIT) giúp thực hiện tính năng Tải lại nóng (Hot Reload) để cập nhật thay đổi mã nguồn tức thì trong quá trình phát triển, và Ahead-Of-Time (AOT) biên dịch mã nguồn thành mã máy gốc nhằm tối ưu hiệu năng vận hành.
  • Hệ quản trị cơ sở dữ liệu MongoDB: Cơ sở dữ liệu NoSQL dạng tài liệu (document-oriented), cung cấp khả năng mở rộng linh hoạt, đánh chỉ mục và truy vấn dữ liệu theo cấu trúc JSON/BSON.
  • Google Maps API: Giao diện lập trình ứng dụng phục vụ định vị vị trí hiện tại của người dùng, quét tìm kiếm các cơ sở lưu trú trong bán kính 3 km và trực quan hóa bản đồ dẫn đường.
+-------------------------------------------------------------+
|               Giao diện người dùng (Flutter UI)             |
|              (Material Design & Cupertino Widgets)          |
+-------------------------------------------------------------+
|              Tầng logic ứng dụng (Dart / Skia Engine)       |
|    - Binary Search        - Collaborative Filtering         |
|    - Depth-First Search   - Content-based Filtering         |
+------------------------------+------------------------------+
|       Dịch vụ tích hợp       |      Cơ sở dữ liệu NoSQL     |
|      (Google Maps API)       |           (MongoDB)          |
+------------------------------+------------------------------+

Các thuật toán kỹ thuật áp dụng

  1. Thuật toán tìm kiếm nhị phân (Binary Search): Độ phức tạp thời gian đạt $O(\log n)$, áp dụng để tra cứu thông tin phòng dựa trên danh sách đã sắp xếp theo tên hoặc mức giá.
  2. Thuật toán Lọc cộng tác (Collaborative Filtering): Dựa trên ma trận đánh giá (User-Item Matrix) giữa người dùng và phòng nghỉ, tính toán độ tương đồng thông qua các chỉ số như Cosine Similarity hoặc Pearson Correlation để gợi ý phòng dựa trên hành vi của các người dùng có sở thích tương tự.
  3. Thuật toán Lọc dựa trên nội dung (Content-based Filtering): Trích xuất đặc trưng của phòng (giá cả, tiện ích, vị trí) và hồ sơ người dùng để đề xuất các phòng gần nhất và có mức giá thấp nhất phù hợp với tiêu chí lọc.
  4. Thuật toán tìm kiếm theo chiều sâu (Depth-First Search - DFS): Mô hình hóa danh sách phòng và các tuyến đường thành đồ thị; sử dụng ngăn xếp (stack) để duyệt qua các đỉnh nhằm xác định lộ trình di chuyển và hỗ trợ tính toán khoảng cách giữa các điểm.

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

  • Phương pháp phân tích - tổng hợp: Khảo cứu tài liệu kỹ thuật, số liệu thống kê từ Statista, App Annie, Techreport, Tripplo và so sánh đặc tính kỹ thuật giữa Flutter với Native, React Native và Xamarin.
  • Phương pháp mô hình hóa và thiết kế: Thiết kế sơ đồ quan hệ dữ liệu cho 4 thực thể chính; xây dựng luồng nghiệp vụ (user workflow) cho khách hàng và quản trị viên.
  • Phương pháp thực nghiệm phần mềm: Thiết lập môi trường phát triển cục bộ với Flutter SDK, Android Studio và MongoDB; nạp tập dữ liệu giả lập (synthetic data) để kiểm chứng tính đúng đắn của các thuật toán và đo lường độ phản hồi của giao diện.

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

So sánh nền tảng phát triển

Tác giả đã tổng hợp các đặc tính kỹ thuật giữa Flutter và các giải pháp phát triển ứng dụng phổ biến hiện nay:

Tiêu chí Flutter Native (Java/Kotlin/Swift) React Native Xamarin
Ngôn ngữ Dart Java, Kotlin, Swift, Obj-C JavaScript C#
Cơ chế đồ họa Skia Engine tự vẽ Thành phần UI gốc của OS Cầu nối (Bridge) gọi UI gốc Thành phần UI gốc của OS
Hiệu năng Cao (Biên dịch AOT) Rất cao (Mã máy gốc) Trung bình (Phụ thuộc Bridge) Khá (Biên dịch qua Mono/.NET)
Tái sử dụng mã Cao (Một mã nguồn cho Web, Android, iOS) Thấp (Phải viết riêng từng nền tảng) Cao (Tái sử dụng đa nền tảng) Khá (Chia sẻ logic qua C#)
Cơ chế cập nhật Hot Reload (JIT) Biên dịch lại toàn bộ Fast Refresh Hot Reload hạn chế

Thiết kế cơ sở dữ liệu MongoDB

Hệ thống sử dụng MongoDB làm cơ sở dữ liệu lưu trữ với 4 bảng (collection) trọng tâm:

Tên bảng Số lượng trường Danh sách các trường dữ liệu Chức năng chính
user 11 _id, name, email, phone, password, sex, birthday, status, type, Role, create_at Quản lý thông tin định danh, bảo mật, vai trò và trạng thái tài khoản của người dùng.
danh sách phòng (room) 15 _id, name, room_code, avatar, status, floors, price, size, bed, room_content, category_id, albums, created_at, total_star, total_vote Lưu trữ thông tin chi tiết về phòng: mã phòng, tiện nghi, số giường, số tầng, giá niêm yết, hình ảnh và điểm đánh giá.
danh sách đặt phòng (bookings) 19 _id, user_id, room_id, discount_id, discount, status, status_payment, price, total_money, amount_of_people, payment_type, note, check_in, check_out, customer_name, customer_email, customer_phone, room, created_at Ghi nhận thông tin giao dịch đặt phòng, thời gian lưu trú (check-in/check-out), trạng thái thanh toán và thông tin khách hàng.
danh sách đánh giá (vote) 6 _id, vote_content, vote_number, user_id, room_id, created_at Lưu trữ phản hồi đánh giá, số sao chấm điểm của khách hàng cho từng phòng cụ thể.

Thiết kế giao diện và luồng chức năng

Ứng dụng được xây dựng với các chức năng chi tiết cho hai nhóm tác nhân:

  1. Phân hệ khách hàng (Mobile App & Web):

    • Tìm kiếm phòng: Lọc phòng theo tên, mức giá, tiện ích và vị trí.
    • Giữ phòng (Hold): Cho phép người dùng giữ chỗ tạm thời khi chưa chốt lịch trình với 4 mức đặt cọc linh hoạt: 0%, 30%, 50% và 100%.
    • Đặt phòng và thanh toán: Điền thông tin lưu trú, chọn hình thức thanh toán (thẻ tín dụng, chuyển khoản, ví điện tử). Giao diện thanh toán thu thập các trường: số thẻ, ngày hết hạn, mã bảo mật (CVV) và tên in trên thẻ.
    • Bản đồ vị trí (Google Maps API): Quét và hiển thị các khách sạn lân cận trong bán kính 3 km quanh vị trí GPS của người dùng dưới dạng các Marker tương tác.
    • Quản lý lịch sử đặt phòng: Xem lại lịch sử các giao dịch, trạng thái đơn đặt và gửi phản hồi đánh giá kèm số sao.
  2. Phân hệ quản trị viên (Web Management):

    • Quản lý danh sách phòng: Xem, thêm mới, sửa đổi thông tin hoặc xóa phòng khỏi hệ thống.
    • Quản lý đơn đặt phòng: Theo dõi trạng thái đơn hàng theo các mức phân loại: "Đang xử lý", "Chấp nhận", "Từ chối", "Hoàn thành", "Hủy".
    • Kiểm soát thanh toán: Cập nhật trạng thái thanh toán của khách hàng và điều chỉnh trạng thái phòng khi khách hoàn tất thủ tục trả phòng.

Triển khai và môi trường thực nghiệm

Quá trình triển khai thực tế được thực hiện trong môi trường nội bộ (Local) bao gồm:

  • Cài đặt và cấu hình Flutter SDK trên nền tảng Android Studio.
  • Thiết lập cơ sở dữ liệu MongoDB Local, khởi tạo 4 collections và nạp dữ liệu mẫu (dummy data).
  • Kiểm thử các ca sử dụng trực tiếp trên máy ảo Android và trình duyệt Web.
  • Tác giả không triển khai hệ thống lên máy chủ thực tế (Production Server) hoặc Google Play Store (CH Play) do gặp phải các rào cản về kiểm duyệt ứng dụng, yêu cầu cấu hình phiên bản hệ điều hành phức tạp và hạn chế về tài nguyên.

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

Chương 1: Giới thiệu

Chương 1 mở đầu bằng việc phân tích nhu cầu cấp thiết của việc phát triển ứng dụng đa nền tảng trong bối cảnh bùng nổ thương mại điện tử và dịch vụ đặt phòng trực tuyến. Tác giả dẫn chứng các báo cáo định lượng từ Statista, App Annie, Techreport và Tripplo để chứng minh tiềm năng thương mại của ngành dịch vụ lưu trú.

Tiếp đó, chương giới thiệu tổng quan về framework Flutter, giải thích lý do lựa chọn dựa trên 6 đặc tính kỹ thuật: mã nguồn mở, hỗ trợ đa nền tảng, tính năng Tải lại nóng (Hot Reload), khả năng truy cập SDK gốc, viết mã tối thiểu (nhờ Dart JIT/AOT) và hệ thống widget phong phú. Chương 1 cũng phân tích chi tiết sự khác biệt giữa Flutter với Native, React Native, Xamarin, đồng thời xác lập mục tiêu, yêu cầu chức năng/phi chức năng, phạm vi và bố cục khóa luận.

Chương 2: Thiết kế hệ thống

Chương 2 tập trung vào việc thiết kế chi tiết kiến trúc phần mềm và cơ sở dữ liệu:

  • Thiết kế UI/UX: Trình bày 7 nguyên tắc thiết kế bao gồm tính thân thiện, tính đồng nhất đa nền tảng, tối ưu hóa kích thước cho thiết bị di động, thiết kế tương tác với animation/transition, đơn giản hóa quy trình đặt phòng, tích hợp hình ảnh chất lượng cao và bộ lọc tìm kiếm linh hoạt.
  • Thiết kế cơ sở dữ liệu: Mô tả cấu trúc dữ liệu của 4 bảng quan trọng (user, room, bookings, vote) trên hệ quản trị MongoDB.
  • Đặc tả thuật toán: Phân tích nguyên lý hoạt động, ưu/nhược điểm và phương thức ứng dụng của 4 thuật toán: Binary Search ($O(\log n)$), Collaborative Filtering (lập ma trận người dùng - phòng để gợi ý theo sở thích nhóm), Content-based Filtering (khuyến nghị phòng gần nhất và rẻ nhất theo hồ sơ đặc trưng), và Depth-First Search (duyệt đồ thị tìm đường đi).

Chương 3: Kết quả phát triển ứng dụng trên Flutter

Chương 3 trình bày kết quả thực nghiệm và giao diện của hệ thống:

  • Thực thi thuật toán: Chạy thử nghiệm các thuật toán trên tập dữ liệu mẫu. Kết hợp đồng thời 3 thuật toán (Content-based, Collaborative Filtering và DFS) để tạo ra bộ gợi ý đa chiều: gợi ý khách sạn gần nhất (theo vị trí và khoảng cách DFS), gợi ý phòng rẻ nhất (theo giá Content-based kết hợp lọc cộng tác) và gợi ý phòng có đánh giá tốt nhất (theo lịch sử đánh giá sao).
  • Hiện thực hóa giao diện chức năng: Minh họa chi tiết quy trình đặt phòng, màn hình thanh toán thẻ tín dụng, màn hình giữ phòng theo các mức đặt cọc (0%, 30%, 50%, 100%), màn hình Google Maps hiển thị phòng trong bán kính 3 km, cùng các giao diện quản trị (danh sách đặt phòng, cập nhật trạng thái phòng, thêm/sửa/xóa phòng).
  • Đánh giá ưu điểm và thách thức: Phân tích các ưu điểm về thời gian phát triển, tính đồng nhất giao diện và hiệu năng AOT, đồng thời chỉ ra các thách thức về dung lượng file cài đặt lớn, kho thư viện/plugin còn hạn chế và các vấn đề tương thích hiển thị.

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

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

  • Xây dựng thành công ứng dụng đa nền tảng: Phát triển hoàn chỉnh giao diện và nghiệp vụ đặt phòng khách sạn chạy song song trên môi trường Web và di động Android từ một cơ sở mã nguồn Dart duy nhất.
  • Ứng dụng thành công hệ thống thuật toán:
    • Thuật toán Binary Search cho kết quả tìm kiếm chính xác với độ phức tạp $O(\log n)$, giảm thời gian duyệt danh sách phòng.
    • Mô hình kết hợp 3 thuật toán (Collaborative Filtering, Content-based Filtering và Depth-First Search) tạo ra cơ chế gợi ý phòng tự động dựa trên 3 tiêu chí: khoảng cách gần nhất, giá thành rẻ nhất và điểm đánh giá cao nhất.
  • Hoàn thiện các luồng nghiệp vụ đặc thù: Xây dựng cơ chế giữ phòng theo tỷ lệ đặt cọc linh hoạt (0% - 100%), tích hợp thanh toán thẻ mô phỏng và hiển thị vị trí cơ sở lưu trú trong bán kính 3 km qua Google Maps API.

Đóng góp của đề tài

  • Về mặt học thuật và kỹ thuật: Đề tài đóng góp tài liệu nghiên cứu và triển khai thực tế về việc ứng dụng framework Flutter vào bài toán thương mại điện tử; cung cấp mô hình mẫu trong việc kết hợp cơ sở dữ liệu phi quan hệ MongoDB với các thuật toán xử lý dữ liệu và hệ thống khuyến nghị trên nền tảng di động.
  • Về mặt thực tiễn: Chứng minh tính khả thi của việc giảm thiểu chi phí và thời gian phát triển phần mềm cho doanh nghiệp vừa và nhỏ trong lĩnh vực lưu trú thông qua giải pháp đa nền tảng mã nguồn mở.

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

Hạn chế được ghi nhận trong văn bản

  • Môi trường thử nghiệm cục bộ: Ứng dụng mới chỉ dừng lại ở việc triển khai và chạy thử trên môi trường ảo / máy tính cục bộ (Local), chưa tiến hành thử nghiệm trực tiếp với người dùng thực tế trên diện rộng.
  • Chưa phát hành thực tế: Do giới hạn thời gian và tài nguyên, hệ thống chưa được đưa lên máy chủ dịch vụ (Production Server) cũng như chưa hoàn tất quy trình kiểm duyệt để đẩy lên kho ứng dụng Google Play Store (CH Play).
  • Hạn chế kỹ thuật từ Flutter: Ứng dụng gặp phải một số thách thức nội tại của nền tảng như: dung lượng ứng dụng sau khi đóng gói lớn hơn so với Native; kho plugin/thư viện hỗ trợ còn hạn chế so với các nền tảng lâu năm; xuất hiện một số vấn đề nhỏ về độ tương thích hiển thị và tương tác trên một số dòng thiết bị cụ thể.

Hướng phát triển tiếp theo

  • Hoàn thiện quy trình tối ưu hóa mã nguồn, giảm kích thước gói cài đặt ứng dụng.
  • Đăng ký tài khoản nhà phát triển và tiến hành triển khai ứng dụng lên các kho ứng dụng trực tuyến chính thức (CH Play, App Store) và triển khai máy chủ backend trên đám mây.
  • Mở rộng thu thập dữ liệu người dùng thực tế để nâng cao độ chính xác cho mô hình khuyến nghị Collaborative Filtering.

Giá trị tham khảo

Tài liệu khóa luận có giá trị tham khảo hữu ích đối với các nhóm đối tượng sau:

  • Sinh viên ngành Kỹ thuật Điện tử - Viễn thông, Công nghệ Thông tin, Kỹ thuật Phần mềm: Nguồn tư liệu tham khảo cụ thể về phương pháp xây dựng đồ án tốt nghiệp ứng dụng Flutter kết hợp cơ sở dữ liệu MongoDB và Google Maps API.
  • Lập trình viên mới tiếp cận Flutter: Cung cấp tài liệu tổng quan, bảng so sánh đối chuẩn giữa Flutter với các công nghệ Native/React Native/Xamarin, cùng cách thức tổ chức cấu trúc dữ liệu NoSQL cho ứng dụng thương mại điện tử.
  • Người nghiên cứu hệ thống khuyến nghị cơ bản: Cung cấp phương pháp hiện thực hóa và phối hợp các thuật toán cổ điển (Binary Search, DFS) và thuật toán gợi ý (Lọc cộng tác, Lọc dựa trên nội dung) vào giải quyết bài toán nghiệp vụ đặt phòng.

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

1. Khóa luận sử dụng hệ quản trị cơ sở dữ liệu nào và cấu trúc gồm những bảng nào?
Khóa luận sử dụng hệ quản trị cơ sở dữ liệu phi quan hệ MongoDB. Cấu trúc dữ liệu bao gồm 4 bảng (collection) chính: user (11 trường thông tin người dùng), danh sách phòng / room (15 trường mô tả chi tiết phòng), danh sách đặt phòng / bookings (19 trường quản lý giao dịch đặt phòng) và danh sách đánh giá / vote (6 trường ghi nhận đánh giá của khách hàng).

2. Thuật toán tìm kiếm nhị phân (Binary Search) và DFS được ứng dụng cụ thể vào chức năng nào?
Thuật toán Binary Search được sử dụng để tối ưu hóa việc tìm kiếm thông tin phòng theo tên hoặc mức giá trên danh sách đã sắp xếp với độ phức tạp $O(\log n)$. Thuật toán DFS được sử dụng để duyệt đồ thị biểu diễn các phòng và tuyến đường nhằm tìm đường đi và tính khoảng cách giữa điểm xuất phát với điểm đích.

3. Hệ thống kết hợp những thuật toán nào để đưa ra gợi ý phòng cho người dùng?
Hệ thống kết hợp đồng thời 3 thuật toán: Content-based Filtering (lọc đặc trưng vị trí và giá), Collaborative Filtering (lọc tương đồng giữa người dùng theo lượt đánh giá) và Depth-First Search (tính khoảng cách đường đi) để đưa ra danh sách các phòng gần nhất, có giá rẻ nhất và nhận được đánh giá tốt nhất.

4. Chức năng giữ phòng ("Hold") hoạt động như thế nào và hỗ trợ các mức đặt cọc nào?
Chức năng giữ phòng cho phép người dùng giữ chỗ tạm thời khi chưa xác định chắc chắn lịch trình. Khách hàng nhập thông tin cá nhân, chọn thời gian lưu trú và lựa chọn một trong 4 mức đặt cọc tương ứng: 0%, 30%, 50% hoặc 100% để hoàn tất lệnh giữ phòng.

5. Vì sao tác giả chưa triển khai ứng dụng lên kho ứng dụng CH Play hay máy chủ thực tế?
Tác giả mới triển khai hệ thống tại môi trường cục bộ (Local) do gặp phải khó khăn về tính tương thích trên các phiên bản hệ điều hành khác nhau, quy trình kiểm duyệt kéo dài từ phía kho ứng dụng và các hạn chế về mặt thời gian, tài nguyên nghiên cứu.


Kết luận

Khóa luận "Xây dựng ứng dụng thương mại điện tử trên nền tảng Flutter" đã phân tích và hiện thực hóa thành công một hệ thống đặt phòng khách sạn đa nền tảng trên Web và Android từ một cơ sở mã nguồn duy nhất. Nghiên cứu đã thiết kế cấu trúc cơ sở dữ liệu MongoDB hợp lý và tích hợp hiệu quả bộ thuật toán tìm kiếm nhị phân, lọc cộng tác, lọc nội dung cùng tìm kiếm theo chiều sâu để tối ưu hóa trải nghiệm đặt phòng. Mặc dù còn hạn chế về mặt thử nghiệm thực địa và chưa phát hành trên kho ứng dụng chính thức, công trình đã làm sáng tỏ tiềm năng, tính linh hoạt và hiệu năng của Flutter trong phát triển ứng dụng thương mại điện tử hiện đại.