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

Trong đời sống và môi trường làm việc hiện đại, khối lượng công việc ngày càng gia tăng đòi hỏi mỗi cá nhân phải duy trì sự tập trung cao độ và sắp xếp lịch trình khoa học. Việc không có công cụ hỗ trợ theo dõi công việc thường dẫn đến tình trạng chồng chéo lịch trình, trì hoãn và bỏ lỡ các thời hạn quan trọng. Trước nhu cầu thực tiễn đó, đề tài đồ án tốt nghiệp "Xây Dựng Ứng Dụng Nhắc Nhở Trên Nền Tảng iOS" được sinh viên Đinh Thị Huyền thực hiện dưới sự hướng dẫn của ThS. Nguyễn Thái Cường tại Trường Đại học Công nghiệp Hà Nội (năm 2022).

Nhiệm vụ và mục tiêu nghiên cứu của đề tài được xác định cụ thể:

  1. Phân tích và nắm bắt bài toán nghiệp vụ quản lý công việc và nhắc nhở cá nhân trong thực tế.
  2. Nghiên cứu công nghệ phát triển ứng dụng di động trên nền tảng iOS của Apple.
  3. Xây dựng hoàn chỉnh một ứng dụng nhắc việc trên nền tảng iOS đáp ứng các yêu cầu chức năng và phi chức năng đã đề ra.
  4. Đảm bảo tính cơ động, trực quan cho người dùng trong việc quản lý và theo dõi thông tin các mốc thời gian nhắc nhở.

Đối tượng nghiên cứu:

  • Ngôn ngữ lập trình Swift.
  • Môi trường phát triển tích hợp Xcode.
  • Kiến trúc phần mềm Model - View - ViewModel (MVVM).
  • Hệ quản trị cơ sở dữ liệu di động Realm Mobile Database.

Phạm vi nghiên cứu: Đề tài tập trung vào việc thiết kế, xây dựng và kiểm thử ứng dụng di động chạy trên hệ điều hành iOS với 6 nhóm chức năng chính:

  • Quản lý nhắc nhở (thêm, sửa, xóa, tìm kiếm, xem danh sách theo ngày/hôm nay/tất cả).
  • Quản lý loại nhắc nhở (phân loại công việc theo danh mục).
  • Thống kê tỷ lệ hoàn thành công việc.
  • Đăng nhập tài khoản qua hệ thống xác thực.
  • Đồng bộ dữ liệu giữa thiết bị cục bộ và máy chủ từ xa.
  • Hệ thống thông báo nhắc việc.

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

Đồ án tiếp cận bài toán phát triển phần mềm di động thông qua sự kết hợp giữa nghiên cứu lý thuyết công nghệ và thực nghiệm kỹ thuật phần mềm:

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

Tác giả đã tổng hợp và so sánh các mô hình phát triển phần mềm di động, cơ chế lưu trữ NoSQL và mô hình kiến trúc:

Tiêu chí Native App Hybrid App Web App
Ngôn ngữ phát triển Ngôn ngữ đặc thù nền tảng (Swift/Objective-C trên iOS, Java/Kotlin trên Android) HTML, CSS, JavaScript bọc trong Native Container HTML, CSS, JavaScript chạy trên trình duyệt web
Hiệu năng thực thi Rất cao, mã nguồn thực thi trực tiếp trên phần cứng Chậm hơn, phụ thuộc vào quá trình dịch của framework Phụ thuộc vào tốc độ trình duyệt và đường truyền mạng
Truy cập phần cứng Toàn diện (Camera, GPS, Notification, cảm biến) Tận dụng được một phần thông qua cầu nối plugin Hạn chế, khó can thiệp sâu vào phần cứng và cảm biến
Khả năng hoạt động Offline Tốt, xử lý cơ sở dữ liệu cục bộ độc lập Có hỗ trợ chạy offline Hạn chế, phần lớn yêu cầu kết nối trực tuyến liên tục

Bên cạnh đó, tác giả phân tích sâu về các công nghệ trong hệ sinh thái của Apple và cơ sở dữ liệu:

  • Ngôn ngữ Swift: Ngôn ngữ lập trình hướng đối tượng và hướng giao thức (Protocol-Oriented Programming) được Apple giới thiệu tại WWDC 2014, sử dụng trình biên dịch LLVM, có mã nguồn mở theo giấy phép Apache 2.0 (từ phiên bản 2.2 năm 2015), tối ưu hiệu năng và an toàn bộ nhớ (tránh lỗi null pointer, tránh lỗi array-out-of-bounds).
  • Các Frameworks hỗ trợ: UIKit (quản lý giao diện và tương tác chạm, tích hợp UIDynamics cho các hiệu ứng vật lý), Core Graphics (xử lý đồ họa 2D mức thấp), Core Animation (hiệu ứng trực quan chuyển động dựa trên Quartz Core), Core Data (quản lý mô hình dữ liệu).
  • Cơ sở dữ liệu Realm Mobile Database (RMD): Hệ quản trị cơ sở dữ liệu NoSQL lưu trữ hướng đối tượng viết bằng C++, hỗ trợ tiếp cận theo hướng Offline-first, cung cấp tốc độ truy vấn vượt trội so với SQLite truyền thống khi thao tác với lượng bản ghi lớn, hỗ trợ ánh xạ đối tượng trực tiếp và cơ chế di chuyển lược đồ (RealmMigration).

2. Phương pháp nghiên cứu

  • Phương pháp nghiên cứu lý thuyết: Thu thập, phân tích và chọn lọc tài liệu kỹ thuật từ Apple Developer Documentation, tài liệu kiến trúc phần mềm và tài liệu Realm Mobile Database.
  • Phương pháp khảo sát người dùng: Thu thập ý kiến qua bảng hỏi 6 câu tập trung vào khó khăn trong quản lý công việc, thói quen ghi chú, các công cụ đã từng sử dụng (Google Calendar, Trello, ứng dụng ghi chú mặc định) và các kỳ vọng về chức năng thông báo, giao diện.
  • Phương pháp phân tích - thiết kế hệ thống: Sử dụng ngôn ngữ mô hình hóa UML để xây dựng sơ đồ ca sử dụng (Use Case), mô tả kịch bản ca sử dụng, sơ đồ trình tự (Sequence Diagram) và sơ đồ lớp (Class Diagram).
  • Phương pháp thực nghiệm: Cài đặt môi trường phát triển (Xcode, Homebrew, CocoaPods), lập trình ứng dụng trên ngôn ngữ Swift và tiến hành kiểm thử chức năng trên thiết bị giả lập (Simulator).

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

1. Kiến trúc phần mềm MVVM

Ứng dụng được tổ chức theo mô hình Model - View - ViewModel nhằm phân tách rõ ràng giữa giao diện hiển thị và logic xử lý nghiệp vụ:

  • View: Thành phần giao diện người dùng nhận tương tác và hiển thị dữ liệu; sử dụng cơ chế Data Binding để lắng nghe thay đổi trạng thái từ ViewModel mà không can thiệp trực tiếp vào logic xử lý dữ liệu.
  • ViewModel: Đóng vai trò cầu nối trung gian, nắm giữ logic trình diễn (presentation logic), trạng thái ứng dụng, thực thi các lệnh (commands) và đồng bộ dữ liệu từ Model lên View thông qua cơ chế Data Binding và mô hình quan sát (Observer pattern).
  • Model: Định nghĩa các đối tượng dữ liệu, quy tắc ràng buộc toàn vẹn và giao tiếp với tầng lưu trữ Realm Database.

2. Thiết kế cơ sở dữ liệu và lưu trữ

Hệ thống sử dụng Realm Mobile Database với cấu trúc lưu trữ dạng Object. Ứng dụng hỗ trợ cơ chế lưu trữ cục bộ cho phép hoạt động không cần mạng và tích hợp chức năng đồng bộ:

  • Lưu trữ cục bộ: Các thực thể công việc, danh mục nhắc nhở và mốc thời gian được lưu dưới dạng các lớp kế thừa từ Object của Realm.
  • Cơ chế đồng bộ hóa:
    • Backup (Máy lên Server): Đẩy toàn bộ dữ liệu cục bộ lên máy chủ và ghi đè trạng thái mới nhất.
    • Pull from Server (Server về Máy): Tải dữ liệu từ máy chủ và thực hiện gộp (merge) dữ liệu giữa máy chủ và thiết bị.

3. Phân rã chức năng và luồng xử lý chính

Hệ thống Ứng dụng Nhắc nhở iOS
  • Xử lý ngoại lệ trong ca sử dụng Quản lý nhắc nhở: Khi người dùng nhập thiếu dữ liệu bắt buộc, hệ thống tự động vô hiệu hóa (disable) nút xác nhận nhằm ngăn ngừa dữ liệu lỗi (Luồng rẽ A1).
  • Xử lý ràng buộc trong Quản lý loại nhắc nhở: Hệ thống kiểm tra trùng lặp tên loại nhắc nhở (Luồng rẽ A1/A2); cảnh báo xác nhận khi người dùng thao tác xóa một danh mục đang chứa các công việc con (Luồng rẽ A4).
  • Xác thực và phân quyền: Chức năng đồng bộ chỉ được kích hoạt sau khi người dùng hoàn tất đăng nhập thành công qua Google SDK hoặc Apple SDK.

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

Mở đầu

Trình bày tính cấp thiết của việc xây dựng công cụ quản lý lịch trình cá nhân trong bối cảnh công việc hiện đại. Xác định mục tiêu xây dựng ứng dụng nhắc nhở chuyên dụng trên hệ điều hành iOS, định hình phạm vi nghiên cứu bao gồm 6 khối chức năng chính, đồng thời nêu rõ phương pháp tiếp cận từ nghiên cứu lý thuyết đến triển khai thực nghiệm.

Chương 1. Tổng quan về nội dung nghiên cứu

Chương này cung cấp bức tranh toàn diện về các nền tảng kỹ thuật:

  • Đánh giá ưu và nhược điểm của 3 kiến trúc phát triển ứng dụng di động: Native App, Web App và Hybrid App.
  • Giới thiệu công cụ lập trình Xcode (IDE chính thức của Apple phát hành từ 2003, phiên bản 12.1 năm 2021).
  • Khái quát lịch sử phát triển, đặc điểm cú pháp và hiệu năng của ngôn ngữ Swift cùng các framework nền tảng trong hệ sinh thái iOS như UIKit, Core Graphics, Core Animation và Core Data.
  • Phân tích sự ra đời của cơ sở dữ liệu NoSQL (thuật ngữ từ năm 1998, Eric Evans định hình lại năm 2009) với các mô hình: Key-Value, Column-Oriented (Cassandra, HBase), Graph Database, Document-Oriented (MongoDB, CouchDB).
  • Phân tích chi tiết Realm Mobile Database: kiến trúc C++, khả năng lưu trữ hướng đối tượng, hỗ trợ Offline-first, bảng so sánh tốc độ truy vấn vượt trội so với SQLite, cơ chế chống lỗi Null Pointer Exception qua đối tượng RealmResults, cùng những hạn chế như không hỗ trợ trường tự tăng giá trị làm khóa chính hoặc không thể ghi đè (override) getter/setter.
  • Trình bày kiến trúc MVVM, phân tích chi tiết vai trò của View, Model, ViewModel và cơ chế Data Binding hai chiều.

Chương 2. Phân tích và thiết kế hệ thống

Chương 2 tập trung vào việc hiện thực hóa bài toán nghiệp vụ thành tài liệu kỹ thuật:

  • Kết quả khảo sát người dùng: Phân tích thực trạng quản lý công việc của người dùng (tình trạng quên việc, thói quen dùng sổ tay hoặc ứng dụng có sẵn), lý do gặp trục trặc khi dùng app khác (thông báo không ổn định, giao diện rối rắm) và các mong muốn thực tế (thông báo kiên trì, giao diện trực quan, hỗ trợ phân loại linh hoạt).
  • Yêu cầu hệ thống: Xác định chi tiết các yêu cầu chức năng (Quản lý nhắc nhở, Quản lý loại nhắc nhở, Thống kê, Đăng nhập, Đồng bộ, Thông báo) và yêu cầu phi chức năng (giao diện đồ họa, hiệu năng, độ tin cậy, tính tương thích ngôn ngữ).
  • Mô hình hóa UML: Xây dựng biểu đồ ca sử dụng tổng quát và phân rã chi tiết cho từng phân hệ; lập bảng đặc tả kịch bản sự kiện (luồng chính, luồng rẽ nhánh A1-A4) và biểu đồ trình tự (Sequence Diagram) tương ứng.
  • Thiết kế kiến trúc và giao diện: Xây dựng biểu đồ lớp hệ thống (Class Diagram); thiết kế chi tiết 12 màn hình giao diện chính (Trang chủ, Hiển thị tất cả danh sách nhắc nhở, Danh sách theo ngày, Thêm nhắc nhở, Chi tiết/Sửa/Xóa nhắc nhở, Tìm kiếm, Hiển thị theo loại, Thêm/Sửa loại nhắc nhở, Thống kê, Đăng nhập, Đồng bộ dữ liệu, Thông báo); thiết kế lược đồ cơ sở dữ liệu Realm.
  • Cài đặt và kiểm thử: Trình bày các bước thiết lập môi trường phát triển (cài đặt Xcode từ App Store, cài đặt Homebrew, tích hợp thư viện CocoaPods vào file .xcodeproj), biên dịch ứng dụng thành công trên iOS Simulator và tổng hợp kết quả kiểm thử chức năng (trang 66).

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

1. Kết quả kỹ thuật đạt được

  • Xây dựng thành công ứng dụng nhắc nhở hoàn chỉnh trên nền tảng iOS sử dụng ngôn ngữ Swift và công cụ Xcode.
  • Hiện thực hóa thành công mô hình kiến trúc MVVM, giúp mã nguồn được phân tách module rõ ràng, giảm phụ thuộc giữa giao diện hiển thị và logic nghiệp vụ.
  • Ứng dụng thành công cơ sở dữ liệu Realm Mobile Database, đảm bảo khả năng vận hành mượt mà ở chế độ offline, tối ưu hóa tốc độ truy xuất dữ liệu so với mô hình SQLite truyền thống.
  • Cài đặt đầy đủ các luồng chức năng: quản lý nhắc nhở, phân loại danh mục, tính toán thống kê mức độ hoàn thành công việc, tích hợp xác thực qua Google SDK/Apple SDK và đồng bộ dữ liệu hai chiều (Backup/Pull) với server.
  • Đạt kết quả kiểm thử thành công trên toàn bộ các ca kiểm thử chức năng đặt ra trên môi trường giả lập iOS.

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

  • Đóng góp một giải pháp ứng dụng di động có tính ứng dụng thực tế cao, hỗ trợ cá nhân hóa việc lập kế hoạch và quản lý thời gian trên thiết bị iOS.
  • Cung cấp tài liệu phân tích, thiết kế hệ thống chi tiết từ khảo sát người dùng, biểu đồ Use Case, biểu đồ Sequence đến biểu đồ Class cho bài toán phát triển ứng dụng di động theo mô hình MVVM và cơ sở dữ liệu NoSQL cục bộ.

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

Dựa trên phạm vi và nội dung được trình bày trong đồ án, một số hạn chế và hướng phát triển có thể ghi nhận:

  • Hạn chế:
    • Ứng dụng mới chỉ tập trung trên nền tảng iOS (Native App), chưa mở rộng sang các hệ điều hành khác như Android.
    • Cơ sở dữ liệu Realm có một số đặc tính kỹ thuật hạn chế được tác giả chỉ ra như không hỗ trợ trường tự tăng giá trị trực tiếp để làm khóa chính, không thể tùy biến hàm khởi tạo (custom initializer) và không thể ghi đè phương thức getter/setter.
  • Hướng nghiên cứu tiếp:
    • Hoàn thiện và nâng cấp các cơ chế đồng bộ hóa dữ liệu thời gian thực phức tạp hơn.
    • Nghiên cứu mở rộng ứng dụng đa nền tảng hoặc tích hợp sâu hơn với các dịch vụ điện toán đám mây.

Giá trị tham khảo

Đồ án là tài liệu tham khảo hữu ích cho:

  • Sinh viên ngành Kỹ thuật phần mềm và Công nghệ thông tin: Làm tài liệu mẫu về quy trình phân tích, thiết kế và hiện thực hóa một đồ án tốt nghiệp xây dựng ứng dụng di động Native iOS.
  • Lập trình viên iOS mới bắt đầu: Tham khảo cách áp dụng mô hình kiến trúc MVVM với ngôn ngữ Swift, phương pháp tích hợp thư viện qua CocoaPods và cách sử dụng Realm Mobile Database thay thế cho SQLite/Core Data trong các ứng dụng hướng Offline-first.
  • Người nghiên cứu thiết kế hệ thống: Tham khảo cách xây dựng tài liệu đặc tả ca sử dụng, phân rã luồng sự kiện chính/rẽ nhánh và thiết kế biểu đồ trình tự UML cho ứng dụng di động.

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

1. Đề tài lựa chọn mô hình kiến trúc nào để phát triển ứng dụng và có ưu điểm gì?
Đề tài sử dụng mô hình MVVM (Model - View - ViewModel). Ưu điểm chính của mô hình này là tạo sự phân tách độc lập giữa giao diện người dùng (View) và logic xử lý (ViewModel), giúp việc viết Unit Testing dễ dàng hơn, nâng cao khả năng tái sử dụng thành phần và giúp mã nguồn dễ bảo trì, nâng cấp.

2. Tại sao tác giả lựa chọn Realm Mobile Database thay vì SQLite truyền thống?
Theo phân tích của tác giả trong Chương 1, SQLite gặp hạn chế về tốc độ truy vấn khi dữ liệu tăng lớn hoặc khi thực hiện các phép nối (JOIN), đồng thời việc cấu hình tốn nhiều công sức. Realm Mobile Database là hệ quản trị NoSQL hướng đối tượng, hoạt động tối ưu theo hướng Offline-first, tốc độ truy vấn nhanh hơn, tiết kiệm bộ nhớ, hỗ trợ di chuyển lược đồ thuận tiện và chống lỗi Null Pointer Exception hiệu quả.

3. Cơ chế đồng bộ dữ liệu giữa thiết bị và máy chủ trong đồ án được thiết kế như thế nào?
Theo đặc tả Use Case Đồng bộ (Bảng 2.5), hệ thống cung cấp 2 cơ chế sau khi người dùng đăng nhập:

  • Đồng bộ từ máy lên server (Backup): Gửi toàn bộ dữ liệu từ thiết bị lên server và ghi đè dữ liệu trên server.
  • Đồng bộ từ server về máy (Pull from server): Tải dữ liệu từ server về thiết bị và thực hiện gộp (merge) dữ liệu giữa hai nguồn.

4. Ứng dụng xử lý các trường hợp ngoại lệ nhập liệu trong chức năng Quản lý nhắc nhở và Loại nhắc nhở như thế nào?

  • Trong ca sử dụng Quản lý nhắc nhở (Bảng 2.1), nếu người dùng nhập thiếu thông tin bắt buộc, hệ thống chuyển sang luồng rẽ A1 và tự động vô hiệu hóa (disable) nút xác nhận.
  • Trong ca sử dụng Quản lý loại nhắc nhở (Bảng 2.2), nếu tên loại nhắc nhở bị trùng lặp, hệ thống sẽ chuyển sang luồng A1/A2 để thông báo yêu cầu nhập lại; nếu danh mục đang chứa các nhắc nhở con mà người dùng thao tác xóa, hệ thống chuyển sang luồng A4 để hiển thị cảnh báo xác nhận.

Kết luận

Đồ án tốt nghiệp "Xây Dựng Ứng Dụng Nhắc Nhở Trên Nền Tảng iOS" của sinh viên Đinh Thị Huyền đã giải quyết thành công bài toán quản lý và nhắc nhở công việc cá nhân thông qua việc phát triển một ứng dụng Native iOS hoàn chỉnh. Bằng việc kết hợp ngôn ngữ Swift, môi trường Xcode, mô hình kiến trúc MVVM và cơ sở dữ liệu Realm Mobile Database, tác giả đã xây dựng được một hệ thống có hiệu năng ổn định, hỗ trợ vận hành ngoại tuyến và đồng bộ dữ liệu linh hoạt. Công trình phản ánh đầy đủ quy trình kỹ thuật phần mềm chuẩn mực từ khảo sát nhu cầu, mô hình hóa UML, thiết kế giao diện đến cài đặt và kiểm thử thực nghiệm.