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

Nhu cầu di chuyển, công tác và du lịch lặp lại giữa nhiều địa phương của nhóm đối tượng người đi làm ngày càng gia tăng. Trong mỗi chuyến đi, người dùng thường có nhu cầu kiểm tra tình hình thời tiết và tìm kiếm các địa điểm đến tại nhiều thành phố khác nhau để chủ động sắp xếp lịch trình. Tuy nhiên, các ứng dụng thời tiết phổ biến trên thị trường tại thời điểm nghiên cứu đa phần chỉ hỗ trợ xem thời tiết ở vị trí hiện tại của thiết bị, thiếu khả năng quản lý danh sách nhiều điểm đến cùng lúc, không lưu trữ được các địa danh nhỏ bên trong thành phố và không tích hợp tính năng chỉ đường trực tiếp, buộc người dùng phải chuyển đổi qua lại giữa nhiều ứng dụng trung gian.

Đề tài "Thiết kế và xây dựng ứng dụng Business Weather" được thực hiện nhằm giải quyết các bất cập trên thông qua việc xây dựng một hệ sinh thái phần mềm gồm ứng dụng di động cho người dùng và trang web quản trị cho người quản lý.

Mục tiêu nghiên cứu:

  1. Mục tiêu về công nghệ: Nghiên cứu ngôn ngữ lập trình Kotlin trên nền tảng Android; nghiên cứu các thư viện mã nguồn mở Room Database, Retrofit, RxJava; nghiên cứu nền tảng đám mây Google Firebase (Firebase Authentication, Realtime Database, Firebase Storage); nghiên cứu các giao diện lập trình ứng dụng (API) gồm Google Maps APIs (Directions API, Geocoding API), Google Places SDK và OpenWeatherMap APIs; nghiên cứu thư viện React JS cho phát triển ứng dụng web.
  2. Mục tiêu về ứng dụng: Xây dựng ứng dụng di động Business Weather trên nền tảng Android hỗ trợ theo dõi thời tiết nhiều địa điểm đồng thời, lưu trữ danh sách địa danh yêu thích, tra cứu và chỉ đường trực tiếp; xây dựng website quản trị bằng React JS để quản lý người dùng, dữ liệu địa điểm, lịch sử hoạt động và thống kê tìm kiếm.

Đố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 Android (Kotlin), cơ chế lưu trữ dữ liệu cục bộ và đám mây (Room, Firebase), các dịch vụ web API (Google APIs, OpenWeatherMap API), công nghệ phát triển web quản trị (React JS) và quy trình nghiệp vụ theo dõi thời tiết, dẫn đường du lịch/công tác.
  • Phạm vi nghiên cứu:
    • Phạm vi thời gian: Đề tài được thực hiện từ ngày 15/03/2019 đến ngày 28/06/2019 (15 tuần).
    • Phạm vi hệ thống: Ứng dụng di động triển khai trên hệ điều hành Android và trang web quản trị chạy trên nền tảng trình duyệt máy tính.

Cơ sở lý thuyết và công nghệ

Đồ án ứng dụng các công nghệ, thư viện và giao diện lập trình ứng dụng sau:

  • Ngôn ngữ Kotlin: Ngôn ngữ lập trình kiểu tĩnh chạy trên máy ảo Java (JVM), phát triển bởi JetBrains và được Google hỗ trợ chính thức trên Android Studio từ phiên bản 3.0 (tháng 10/2017). Kotlin có khả năng tương tác hai chiều với Java, hỗ trợ suy luận kiểu dữ liệu, giảm thiểu mã nguồn trùng lặp và hỗ trợ các tính năng mở rộng (Android Extensions).
  • Google Firebase: Nền tảng đám mây cung cấp hệ thống xác thực (Firebase Authentication) hỗ trợ đăng nhập bằng tài khoản nội bộ và tài khoản Google; dịch vụ lưu trữ tệp (Firebase Storage) trên Google Cloud Platform với cơ chế tải dữ liệu bảo mật, tự động phục hồi kết nối; và cơ sở dữ liệu thời gian thực (Realtime Database) cấu trúc NoSQL định dạng JSON truyền qua giao thức SSL.
  • Room Persistence Library: Thư viện trừu tượng hóa tầng trên của SQLite do Google giới thiệu tại Google I/O 2017. Room quản lý dữ liệu thông qua 3 thành phần chính:
    • Entity: Đại diện cho cấu trúc bảng trong CSDL với các chú thích @Entity, @PrimaryKey, @ColumnInfo, @Embedded, @Index, @Ignore.
    • DAO (Data Access Object): Giao diện định nghĩa các phương thức thao tác dữ liệu (CRUD) thông qua chú thích @Dao.
    • Database: Lớp trừu tượng kế thừa RoomDatabase đóng vai trò là điểm kết nối chính đến CSDL cục bộ.
  • Thư viện RxJava và Retrofit:
    • RxJava: Thư viện mở hiện thực mô hình ReactiveX trên Java, hoạt động dựa trên cơ chế Observable (phát luồng dữ liệu/sự kiện) và Subscriber (lắng nghe, xử lý kết quả onNext, onError, onCompleted).
    • Retrofit: Type-safe HTTP client do Square phát triển, chuyển đổi các REST API thành Java/Kotlin Interface thông qua các chú thích HTTP (@GET, @POST, @PUT, @DELETE, @HEAD, @Path, @Query, @Body).
  • OpenWeatherMap API: Dịch vụ cung cấp dữ liệu khí tượng toàn cầu thu thập từ hơn 40.000 trạm thời tiết, hỗ trợ định dạng JSON/XML cho hơn 200.000 thành phố. Các dịch vụ sử dụng gồm: dữ liệu thời tiết hiện tại (Current Weather Data), dự báo 5 ngày theo chu kỳ mỗi 3 giờ, dự báo 16 ngày, dữ liệu lịch sử và cơ chế kích hoạt cảnh báo thời tiết.
  • Google APIs & SDKs:
    • Directions API: Tính toán tuyến đường, khoảng cách, thời gian di chuyển theo các phương thức lái xe (driving), đi bộ (walking), xe đạp (cycling), phương tiện công cộng (transit) và hỗ trợ điểm trung gian (waypoints).
    • Places SDK for Android: Cung cấp tính năng tìm kiếm địa điểm, thông tin doanh nghiệp và tiện ích gợi ý tự động (Autocomplete).
    • Geocoding API: Dịch vụ chuyển đổi giữa địa chỉ văn bản và tọa độ địa lý (kinh độ/vĩ độ) theo hai chiều (Geocoding và Reverse Geocoding).
  • React JS: Thư viện JavaScript mã nguồn mở do Jordan Walke (Facebook) phát triển, xử lý tầng giao diện (View) cho ứng dụng web đơn trang (Single Page Application - SPA) dựa trên cú pháp JSX, cấu trúc luồng dữ liệu một chiều (Unidirectional data flow / Flux architecture) và cơ chế Virtual DOM.

Nguồn dữ liệu:

  • Dữ liệu khí tượng: Thu nhận trực tiếp qua giao thức RESTful từ máy chủ OpenWeatherMap.
  • Dữ liệu địa lý và bản đồ: Khai thác từ cơ sở dữ liệu địa điểm của Google Maps Platform.
  • Dữ liệu người dùng và hệ thống: Lưu trữ trên đám mây Firebase Realtime Database và lưu trữ tạm thời/ngoại tuyến tại bộ nhớ cục bộ thiết bị qua Room SQLite.

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

Hệ thống được thiết kế theo mô hình Client-Server kết hợp Backend-as-a-Service (BaaS) và các dịch vụ API bên thứ ba.

+-------------------------------------------------------------+
|                     HỆ THỐNG PHẦN MỀM                       |
|                                                             |
|  [Ứng dụng Android (Kotlin)]    [Web Quản trị (React JS)]   |
|         |              |                     |              |
|         v              v                     v              |
|   (Room SQLite)   (Retrofit/RxJava)          |              |
|   [Bộ nhớ đệm]         |                     |              |
|                        v                     v              |
|             +---------------------+---------------------+   |
|             | Google Firebase     | Các dịch vụ API     |   |
|             | - Authentication    | - OpenWeatherMap    |   |
|             | - Realtime Database | - Directions API    |   |
|             | - Storage (NoSQL)   | - Places SDK        |   |
|             +---------------------+---------------------+   |
+-------------------------------------------------------------+

Kiến trúc dữ liệu và các thực thể cơ sở dữ liệu

Cơ sở dữ liệu hệ thống được mô tả qua các bảng thuộc tính quản lý cấu trúc thông tin:

Tên bảng/thực thể Mục đích sử dụng Phạm vi lưu trữ
users Lưu trữ hồ sơ người dùng (họ tên, email, mật khẩu, số điện thoại, avatar) Firebase / Room
places Lưu danh sách các địa điểm theo dõi thời tiết do người dùng thêm Firebase / Room
favoriteplace Lưu danh sách các địa danh yêu thích kèm hình ảnh, đánh giá, địa chỉ Firebase / Room
history Lưu trữ nhật ký và lịch sử các địa điểm đã tìm kiếm Firebase / Room
tempplace Lưu trữ danh sách địa điểm thời tiết tạm thời trong phiên làm việc Firebase / Room
tempfavplace Lưu trữ danh sách địa điểm yêu thích tạm thời Firebase / Room
admin Lưu trữ tài khoản và thông tin phân quyền của quản trị viên Firebase
statistics Tổng hợp số liệu thống kê về tần suất tìm kiếm các thành phố Firebase

Các phân hệ giao diện và chức năng triển khai

  1. Phân hệ ứng dụng di động (Android Client):

    • Giao diện Intro, Login, Sign up: Xử lý đăng nhập tài khoản hệ thống, đăng nhập Google qua Firebase Authentication, đăng ký tài khoản mới với 4 trường thông tin (họ tên, username, số điện thoại, mật khẩu).
    • Giao diện Home (Thời tiết hiện tại): Bố cục 3 phần gồm thông tin tổng quan (thành phố, nhiệt độ hiện tại, trạng thái, nhiệt độ Max/Min), danh sách dự báo theo chu kỳ 3 giờ trong ngày/3 ngày tới dạng danh sách cuộn ngang, và các thông số chi tiết (lượng mây trung bình, tốc độ gió, độ ẩm).
    • Giao diện Weather Place Management: Quản lý danh sách các thành phố đã thêm, hỗ trợ chuyển đổi giữa các màn hình thời tiết bằng thao tác vuốt ngang hoặc xóa thành phố khỏi danh sách.
    • Giao diện Favorite Place & Detail Place: Hiển thị danh sách địa danh kèm ảnh đại diện lấy từ Places API; màn hình chi tiết hiển thị tên địa điểm, điểm đánh giá (rating), địa chỉ chi tiết và liên kết web (weburi).
    • Giao diện Direction: Tích hợp bản đồ dẫn đường, tìm kiếm điểm xuất phát (origin) và điểm đến (destination), hiển thị khoảng cách, thời gian và lộ trình chi tiết từng chặng (Step-by-step).
    • Giao diện History: Quản lý danh sách lịch sử tìm kiếm địa điểm, cho phép xóa từng phần tử hoặc xóa toàn bộ lịch sử.
    • Giao diện Profile & Edit Profile: Xem và cập nhật thông tin cá nhân của người dùng.
  2. Phân hệ trang web quản trị (Web Admin - React JS):

    • Trang Login: Xác thực quyền truy cập của quản trị viên.
    • Trang User Management: Quản lý danh sách người dùng, xem thông tin chi tiết dạng modal, sửa đổi hoặc xóa tài khoản.
    • Trang Weather Place Management: Quản lý và xóa các bản ghi địa điểm thời tiết trên toàn hệ thống.
    • Trang Favorite Place Management: Quản lý và xóa danh sách các địa danh yêu thích.
    • Trang Activity Log Management: Quản lý và xóa dữ liệu lịch sử tìm kiếm của các tài khoản.
    • Trang Searched City Statistics: Hiển thị biểu đồ và số liệu thống kê các thành phố được người dùng tra cứu nhiều nhất.

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

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

Chương này trình bày chi tiết về các nền tảng kỹ thuật và thư viện phục vụ xây dựng phần mềm:

  • Phân tích ưu điểm của Kotlin (tính ngắn gọn, khả năng tương tác với Java, hỗ trợ lập trình hàm và thủ tục, tích hợp sẵn trong Android Studio) và các điểm hạn chế (làm tăng kích thước tệp APK khoảng 800KB, cộng đồng hỗ trợ nhỏ hơn Java với 4.600 câu hỏi trên Stack Overflow so với hơn 1.000.000 bài viết Java tại thời điểm khảo sát).
  • Cấu trúc thư viện Room với ba thành phần Entity, DAO, Database; cơ chế đánh chỉ mục (@Index), ràng buộc duy nhất (unique = true) và nhúng đối tượng (@Embedded).
  • Nguyên lý hoạt động của kiến trúc hướng sự kiện RxJava (Observable, Subscriber) và cấu hình kết nối mạng bằng Retrofit thông qua các phương thức HTTP.
  • Cấu trúc và các gói dịch vụ của OpenWeatherMap API, Google Directions API, Google Places SDK, Geocoding API.
  • Các khái niệm cốt lõi trong React JS: cú pháp JSX, kiến trúc điều phối dữ liệu Flux, vòng đời component và cơ chế xử lý của Virtual DOM.

Chương 2: Khảo sát hiện trạng và xác định yêu cầu

Chương này tiến hành khảo sát và đánh giá 4 ứng dụng thời tiết hiện hành trên thị trường:

Tên ứng dụng Ưu điểm ghi nhận Hạn chế ghi nhận
Weather Forecast Cung cấp đầy đủ thông số (nhiệt độ, gió, độ ẩm, điểm sương, lượng mưa, bình minh/hoàng hôn); có radar; hỗ trợ xem nhiều địa điểm; cho phép tùy chỉnh thông báo. Quá nhiều quảng cáo; mật độ thông tin quá dày đặc gây rối mắt; tính năng mang tính tổng quát, không chuyên biệt.
Best Weather Giao diện màn hình chính đẹp, dễ nhìn; dự báo 7 ngày; hỗ trợ đổi chủ đề (theme); chi tiết nhiệt độ, độ ẩm, tầm nhìn, áp suất. Chỉ xem được thời tiết của 1 thành phố duy nhất; không thể xóa/cài đặt thông báo; giao diện cài đặt không đồng bộ màu sắc; ít chức năng mở rộng.
Word weather forecast Dự báo chi tiết chỉ số tia UV, nhiệt độ Max/Min; dự báo theo giờ và theo tuần; hỗ trợ đa ngôn ngữ. Giao diện không bắt mắt; chữ màu trắng trên nền hình ảnh trắng gây khó đọc; biểu tượng không trực quan; phải bấm tải lại (reload) thủ công; dung lượng lớn gây giật lag.
Thời tiết Việt Nam Thông tin dự báo đa dạng đến 9 ngày tiếp theo; tự động cập nhật dữ liệu; thiết kế hình ảnh trực quan, dễ sử dụng. Chỉ hỗ trợ tiếng Việt; không hỗ trợ xem cùng lúc nhiều địa điểm; xuất hiện quảng cáo tự động; hạn chế tính năng phụ trợ.

Từ kết quả khảo sát, chương xác định hệ thống yêu cầu chức năng bao gồm 4 nhóm nghiệp vụ: Lưu trữ, Tra cứu, Tính toán, Kết xuất; phân định 21 ca sử dụng (Use Case) cho phía người dùng (User) và 6 ca sử dụng cho phía quản trị viên (Admin). Chương cũng xác định các yêu cầu phi chức năng về tính tiến hóa, tính tiện dụng, tính hiệu quả, tính tương thích và tính tái sử dụng mã nguồn.

Chương 3: Phân tích yêu cầu và thiết kế CSDL

Chương này hiện thực hóa các yêu cầu thành mô hình kỹ thuật chi tiết:

  • Xây dựng 2 lược đồ ca sử dụng tổng quát (Use Case Diagram) cho User và Admin.
  • Đặc tả chi tiết các Use Case chính: Add weather place, Add favorite place, Giving directions, Remove activity log, Edit profile.
  • Xây dựng 13 biểu đồ tuần tự (Sequence Diagram) mô tả luồng thông tin giữa người dùng, giao diện, bộ xử lý logic và cơ sở dữ liệu (các luồng: thêm/xóa/xem thời tiết, quản lý địa điểm yêu thích, tìm đường, xem/sửa profile, thêm địa điểm tạm thời, đếm thành phố tìm kiếm nhiều nhất, quản lý người dùng và lịch sử nhật ký).
  • Thiết kế chi tiết cấu trúc các bảng thuộc tính trong CSDL: users, places, favoriteplace, history, tempplace, tempfavplace, admin, statistics.

Chương 4: Thiết kế giao diện và xử lý

Chương này mô tả chi tiết bố cục giao diện (UI layout) và kịch bản xử lý tương tác (UX):

  • Thiết kế 11 màn hình ứng dụng di động: Intro, Login, Sign up, Home, Favorite Place, Weather Place Management, Direction, History, Detail Place, Profile, Edit Profile. Chi tiết các thông số kích thước giao diện, tỉ lệ phân chia diện tích (ví dụ màn hình Home chia tỉ lệ 40-20-40 cho các khối thông tin), mã màu đen xám chủ đạo, khoảng cách lề (padding 4-16dp) và các nút điều hướng.
  • Thiết kế 6 trang giao diện quản trị trên nền web: Login, User Management (kèm modal thông tin chi tiết), Weather Place Management, Favorite Place Management, Activity Log Management và Searched City Statistics.

Chương 5: Cài đặt

Chương này trình bày môi trường triển khai thực tế và tiến hành kiểm thử giao diện, chức năng:

  • Môi trường cài đặt: Android Studio cho ứng dụng di động (ngôn ngữ Kotlin), React JS cho website quản trị, hệ quản trị cơ sở dữ liệu Firebase kết hợp Room Database.
  • Thực hiện kiểm thử (Testing) trên 8 màn hình chức năng chính của ứng dụng di động: màn hình Home, Weather Place Management, Favorite Place, Detail Place, Direction, History, Profile, Edit Profile nhằm xác nhận tính chính xác của các luồng xử lý và sự đồng bộ dữ liệu.

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

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

  • Hoàn thành ứng dụng di động Business Weather trên hệ điều hành Android đáp ứng đầy đủ các chức năng theo đúng tiến độ đề ra (15 tuần, từ 15/03/2019 đến 28/06/2019).
  • Tích hợp thành công cơ chế lưu trữ hai tầng: lưu trữ đám mây qua Firebase (hỗ trợ xác thực người dùng, bảo mật SSL) và lưu trữ cục bộ qua Room SQLite, cho phép người dùng truy cập dữ liệu thời tiết và địa điểm ngoại tuyến khi thiết bị mất kết nối mạng.
  • Triển khai thành công việc kết nối đa API: khai thác dữ liệu khí tượng từ OpenWeatherMap (thời tiết hiện tại, dự báo chu kỳ 3 giờ, dự báo dài ngày), định vị và gợi ý địa danh qua Google Places SDK, chuyển đổi tọa độ qua Geocoding API và vẽ tuyến đường dẫn đường trực tiếp qua Google Directions API.
  • Xây dựng hoàn chỉnh trang web quản trị bằng React JS cho phép theo dõi, quản lý tài khoản người dùng, quản lý dữ liệu địa điểm, nhật ký hoạt động và thống kê tần suất tìm kiếm các thành phố.
  • Hoàn thành quy trình kiểm thử trên 8 màn hình giao diện chính của ứng dụng.

Giải pháp đề xuất trong đồ án:

  • Đề xuất mô hình tích hợp đồng thời giữa dịch vụ dự báo thời tiết và dịch vụ bản đồ/chỉ đường trong cùng một giao diện ứng dụng để loại bỏ thao tác chuyển đổi ứng dụng trung gian cho người đi công tác/du lịch.
  • Áp dụng cấu trúc lưu trữ NoSQL trên Firebase kết hợp kiến trúc thực thể Room để tối ưu hóa khả năng phản hồi dữ liệu và duy trì tính khả dụng khi offline.

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

  • Khắc phục hạn chế của các ứng dụng thời tiết thông thường (vốn chỉ hỗ trợ xem 1 vị trí hiện tại hoặc hiển thị quá nhiều quảng cáo) bằng cách cung cấp giải pháp quản lý danh sách nhiều thành phố song song kèm theo danh mục các địa danh chi tiết bên trong thành phố đó.
  • Cung cấp tài liệu hoàn chỉnh về quy trình phân tích, thiết kế Use Case, Sequence Diagram, thiết kế dữ liệu và cài đặt thực nghiệm một hệ thống phần mềm di động kết hợp web quản trị.

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

Hạn chế của đồ án:

  • Thư viện tiêu chuẩn và thời gian chạy (runtime) của Kotlin làm tăng kích thước tệp cài đặt .apk thêm khoảng 800KB.
  • Tính năng tự động hoàn tác và biên dịch trong Android Studio khi làm việc với Kotlin còn chậm hơn so với Java tại thời điểm triển khai.
  • Các tính năng nâng cao do OpenWeatherMap cung cấp như quản lý trạm thời tiết cá nhân (Weather Stations) và phân tích chuyên sâu dữ liệu lịch sử nhiều năm chưa được tích hợp hoàn toàn vào ứng dụng.
  • Dữ liệu địa điểm và chỉ đường phụ thuộc hoàn toàn vào hạn mức và kết nối đến các dịch vụ của Google APIs và OpenWeatherMap API.
  • Hệ thống mới chỉ được xây dựng và triển khai trên nền tảng Android, chưa hỗ trợ nền tảng iOS.

Hướng nghiên cứu và phát triển tiếp theo:

  • Tối ưu hóa kích thước gói cài đặt ứng dụng và nâng cao hiệu năng xử lý tác vụ nền.
  • Nâng cấp thuật toán tự động gợi ý địa điểm thời tiết và địa điểm yêu thích dựa trên thói quen tìm kiếm của người dùng.
  • Phát triển phiên bản ứng dụng đa nền tảng cho hệ điều hành iOS để mở rộng đối tượng sử dụng.
  • Khai thác sâu hơn các dịch vụ cảnh báo thời tiết tự động (Weather triggers) theo thời gian thực và mở rộng hệ thống báo cáo thống kê chuyên sâu trên trang web quản trị.

Giá trị tham khảo

Khóa luận là tài liệu tham khảo phù hợp cho sinh viên và các lập trình viên thuộc ngành Công nghệ Thông tin, chuyên ngành Công nghệ Phần mềm hoặc Kỹ thuật Phần mềm.

Các nội dung có giá trị tham khảo cụ thể gồm:

  • Phương pháp tích hợp công nghệ: Cách thức kết hợp ngôn ngữ Kotlin với thư viện trừu tượng hóa CSDL Room (SQLite), thư viện mạng Retrofit và lập trình phản ứng RxJava trên Android.
  • Quy trình kết nối API bên thứ ba: Hướng dẫn cấu hình, xác thực và xử lý dữ liệu trả về từ Google Maps Directions API, Google Places SDK for Android, Geocoding API và OpenWeatherMap RESTful API.
  • Khai thác nền tảng đám mây BaaS: Kỹ thuật tích hợp Firebase Authentication cho đăng nhập tài khoản thường và Google Sign-In, cấu hình Firebase Storage và phân quyền trên Firebase Realtime Database.
  • Tài liệu phân tích thiết kế phần mềm: Hệ thống bảng yêu cầu nghiệp vụ, bảng quy định/công thức, đặc tả Use Case, biểu đồ tuần tự (Sequence Diagram) và bảng thuộc tính CSDL có cấu trúc rõ ràng, chuẩn mực cho một đồ án tốt nghiệp kỹ sư CNTT.
  • Phát triển web quản trị: Cấu trúc ứng dụng quản trị dữ liệu sử dụng thư viện React JS với JSX và luồng dữ liệu một chiều.

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

1. Ứng dụng Business Weather giải quyết vấn đề cốt lõi nào so với các ứng dụng thời tiết thông thường?
Các ứng dụng thời tiết hiện nay đa phần chỉ hiển thị thời tiết ở vị trí hiện tại của thiết bị, không hỗ trợ lưu trữ nhiều điểm đến lặp lại, không quản lý các địa danh nhỏ bên trong thành phố và thiếu tính năng chỉ đường. Business Weather giải quyết vấn đề này bằng cách cho phép theo dõi thời tiết nhiều thành phố cùng lúc, lưu các địa danh yêu thích và tích hợp chỉ đường trực tiếp qua Google Directions API mà không cần dùng ứng dụng trung gian.

2. Room Persistence Library đóng vai trò gì trong kiến trúc của ứng dụng?
Room đóng vai trò là một tầng trừu tượng hóa (abstract layer) trên nền SQLite cục bộ của thiết bị. Room cho phép lưu trữ và tạo bộ nhớ đệm (cache) cho các thực thể dữ liệu (người dùng, địa điểm thời tiết, địa điểm yêu thích, lịch sử), giúp người dùng có thể mở và xem lại dữ liệu ngay cả khi thiết bị không có kết nối Internet (offline), sau đó đồng bộ với Firebase khi có kết nối trở lại.

3. Cơ sở dữ liệu của hệ thống gồm những thực thể nào và được triển khai ở đâu?
Cơ sở dữ liệu hệ thống gồm 8 bảng/thực thể chính: users (thông tin người dùng), places (địa điểm thời tiết), favoriteplace (địa điểm yêu thích), history (lịch sử tìm kiếm), tempplace (địa điểm thời tiết tạm), tempfavplace (địa điểm yêu thích tạm), admin (tài khoản quản trị) và statistics (thống kê tìm kiếm). CSDL được triển khai trên nền tảng đám mây Google Firebase Realtime Database (NoSQL JSON) và đồng bộ cục bộ qua SQLite bằng thư viện Room.

4. Hệ thống web quản trị (Admin Dashboard) được xây dựng bằng công nghệ gì và cung cấp những tính năng nào?
Trang web quản trị được xây dựng bằng thư viện React JS (sử dụng JSX và Virtual DOM). Hệ thống quản trị bao gồm các phân hệ: Đăng nhập quản trị viên, Quản lý người dùng (User Management - xem thông tin dạng modal, sửa, xóa), Quản lý địa điểm thời tiết (Weather Place Management), Quản lý địa điểm yêu thích (Favorite Place Management), Quản lý lịch sử tìm kiếm (Activity Log Management) và Trang thống kê các thành phố được tìm kiếm nhiều nhất (Searched City Statistics).

5. Những giao diện lập trình ứng dụng (API) và SDK nào của Google và bên thứ ba được tích hợp trong đồ án?
Đồ án tích hợp 4 nhóm API/SDK chính: OpenWeatherMap API (lấy dữ liệu thời tiết hiện tại, dự báo 5 ngày theo chu kỳ 3 giờ, dự báo 16 ngày, cảnh báo thời tiết), Google Directions API (tính toán lộ trình và chỉ đường đa phương thức), Google Places SDK for Android (tìm kiếm địa điểm và tự động hoàn thành - Autocomplete), và Google Geocoding API (chuyển đổi qua lại giữa địa chỉ văn bản và tọa độ địa lý).


Kết luận

Đồ án tốt nghiệp "Thiết kế và xây dựng ứng dụng Business Weather" của sinh viên Lâm Quang Lịch và Lưu Quang Trung (ngành Công nghệ Thông tin, Đại học Sư phạm Kỹ thuật TP.HCM, năm 2019) đã hoàn thành toàn diện việc xây dựng giải pháp phần mềm hỗ trợ theo dõi thời tiết và dẫn đường cho người thường xuyên di chuyển công tác, du lịch. Đề tài đã kết hợp hiệu quả các công nghệ hiện đại gồm ngôn ngữ Kotlin, thư viện Room, Retrofit, RxJava trên Android, hệ thống đám mây Firebase, thư viện web React JS cùng các dịch vụ OpenWeatherMap và Google Maps APIs. Toàn bộ quy trình từ khảo sát hiện trạng, phân tích yêu cầu, thiết kế hệ thống, lập trình cài đặt đến kiểm thử chức năng đều được thực hiện đầy đủ, logic và có giá trị ứng dụng thực tiễn cao trong lĩnh vực phát triển phần mềm di động.