CƠ SỞ LÝ THUYẾT
Android
Hình 2.1 Logo Android, bản quyền được nắm giữ bởi Google
Android là một hệ điều hành mã nguồn mở dựa trên nền tảng Linux kernel, được phát triển chủ yếu cho các thiết bị có màn hình cảm ứng (điện thoại thông minh, tablet, đồng hồ thông minh…).
Android được phát triển bởi một hiệp hội các nhà phát triển ứng dụng được gọi là Open Handset Alliance, mặc dù phiên bản được sử dụng rộng rãi nhất chủ yếu do Google phát triển Android được công bố vào tháng 11 năm
2007, với thiết bị Android thương mại đầu tiên, HTC Dream, được ra mắt vào tháng 9 năm 2008.
Android là hệ điều hành phổ biến nhất trên toàn cầu dành cho điện thoại kể từ 2011 đến nay và phổ biến nhất trên máy tính bảng từ năm 2013 đến nay Tính đến tháng 5 năm 2021, Android có hơn 3 tỷ người dùng hoạt động hàng tháng và tính đến tháng 1 năm 2021, Google Play Store có hơn 3 triệu ứng dụng Android 13, phát hành vào ngày 15 tháng 8 năm 2022, là phiên bản mới nhất và Android 12.1/12L mới phát hành gần đây bao gồm nhiều cải tiến dành riêng cho điện thoại gập, máy tính bảng, màn hình desktop rời và Chromebook [ CITATION Wik23 \l 1033 ]
2.1.2 Ngôn ngữ lập trình Kotlin
Hình 2.2 Logo ngôn ngữ lập trình Kotlin (Nguồn: Wikimedia Commons)
Kotlin là ngôn ngữ lập trình high-level, sử dụng static type, có thể phát triển đa nền tảng và được sử dụng cho nhiều mục tiêu khác nhau Kotlin được thiết kế để tương thích hoàn toàn với Java và JVM, nhưng đồng thời cũng có thể biên dịch thành JavaScript (ví dụ: đối với ứng dụng web sử dụng React) hoặc native code thông qua LLVM (ví dụ: đối với ứng dụng iOS) Chi phí phát triển ngôn ngữ Kotlin do JetBrains bỏ ra, còn thương hiệu Kotlin do Kotlin Foundation nắm giữ [ CITATION Wik231 \l 1033 ].
Kể từ ngày 7 tháng 5 năm 2019, Google công bố ngôn ngữ lập trình Kotlin sẽ là ngôn ngữ chính cho việc phát triển ứng dụng Android, và đang dần thay thế trình biên dịch Java tiêu chuẩn.
Jetpack Compose là UI toolkit được đề xuất bởi Android để xây dựng giao diện người dùng Jetpack Compose đơn giản hóa và tăng tốc phát triển giao diện người dùng trên Android bằng cách giảm thiểu lượng code và sử dụng nhiều tính năng mạnh mẽ của Kotlin API Đồng thời Jetpack Compose có rất nhiều công cụ built-in để xây dựng theme, các UI Component, chế độ tối Đồng thời, Jetpack Compose có thể được sử dụng để phát triển giao diện người dùng cho nhiều loại thiết bị di động khác nhau (điện thoại, đồng hồ thông minh, máy tính bảng) [ CITATION And231 \l 1033 ].
2.1.4 Lập trình bất đồng bộ với Flow, Coroutine
2.1.4.1 Lập trình bất đồng bộ
Lập trình bất đồng bộ (hay Asynchronous Programming) là một kĩ thuật lập trình cho phép nhiều tác vụ được thực hiện đồng thời mà không làm ảnh hưởng đến luồng chạy chính của chương trình, điều này tạo cảm tưởng như các tác vụ ấy được chạy song song với luồng chạy chính Khi các tác vụ ấy hoàn thành xong thì sẽ trả về kết quả cho luồng chạy chính, đảm bảo cho việc luồng chạy chính không bị
“block” (bị đông cứng, phải đợi có kết quả của các tác vụ mới được chạy tiếp) Điều này giữ việc thực hiện chương trình được tối ưu và trải nghiệm người dùng được tốt nhất.
Trong lập trình ứng dụng nói chung và lập trình Android nói riêng, lập trình bất đồng bộ là cực kỳ quan trọng vì việc ứng dụng bị đứng trong khi các tác vụ phức tạp, cần nhiều thời gian được thực thi sẽ gây nhiều khó chịu cho người dùng.
Các phương pháp để cài đặt kĩ thuật này bao gồm: Xử lý đa luồng (Multithreading), sử dụng Callback, sử dụng Promise/Future, sử dụng các Reactive Extensions, sử dụng Coroutine…[ CITATION Kot23 \l 1033 ]
Hướng tiếp cận của ngôn ngữ lập trình Kotlin trong lập trình bất đồng bộ là sử dụng Coroutine Coroutine được dựa trên khái niệm suspendable computations - ý tưởng cho rằng một hàm có thể tạm dừng việc thực thi của nó tại một số thời điểm và tiếp tục sau đó Một coroutine có thể coi như một “lightweight thread”.
Một trong những ưu điểm lớn nhất của Coroutines là việc viết non-blocking code (các đoạn code không block luồng chạy chính bằng cách sử dụng lập trình bất đồng bộ) gần tương tự như viết blocking code Chỉ cần sử dụng thêm một số hàm và cú pháp nhất định, thì đoạn code bất đồng bộ nhìn tương tự như đoạn code đồng bộ, và không cần phải tìm hiểu thêm các API hay cú pháp phức tạp nào Đồng thời Coroutine có thể được sử dụng cho nhiều nền tảng, dù là JVM, JavaScript hay nền tảng nào thì vẫn có thể dùng chung một đoạn code, vì bên dưới đã có trình biên dịch xử lý việc chuyển đổi code sang nền tảng tương ứng [ CITATION Kot231 \l 1033 ].
Flow được xây dựng dựa trên Coroutine để lần lượt trả về nhiều giá trị một cách bất đồng bộ, trong khi đó suspend function – cài đặt cơ bản của Coroutine – chỉ có khả năng trả về một giá trị một lần, Một Flow có thể coi như một Iterator duyệt qua từng phần tử trong một nhóm dữ liệu và lần lượt trả về từng giá trị một bằng cách sử dụng suspend function ở bên dưới để có thể đảm bảo tính bất đồng bộ[ CITATION And23 \l 1033 ].
Firebase
Hình 2.3 Logo Firebase (Nguồn: Wikimedia Commons)
Cloud Firestore (hay Firestore) là một cơ sở dữ liệu linh hoạt và có tính scalability dành cho việc phát triển ứng dụng di động, lập trình web và xây dựng máy chủ từ thông qua một số dịch vụ khác của Firebase và Google
Cloud Tương tự với Firebase Realtime Database, Cloud Firestore giúp đồng bộ hóa dữ liệu trên tất cả các ứng dụng thông qua các real-time listeners và hỗ trợ tính năng offline cho di động và web để lập trình viên có thể xây dựng các ứng dụng hoạt động tốt bất kể độ trễ của mạng hay kết nối Internet Cloud Firestore cũng cung cấp khả năng tích hợp với các sản phẩm khác của Firebase và Google Cloud, bao gồm Cloud Functions [ CITATION Fir23 \l
Firebase Authentication cung cấp dịch vụ, các SDK dễ sử dụng và thư viện giao diện người dùng để xác thực người dùng Firebase Authentication hỗ trợ xác thực bằng mật khẩu, số điện thoại, hay xác thực thông qua các liên kết phổ biến như Google, Facebook và Twitter, v.v.
Firebase Authentication có khả năng tích hợp với các dịch vụ Firebase khác, và đồng thời tận dụng các tiêu chuẩn OAuth 2.0 và OpenID Connect nên lập trình viên hoàn toàn có thể tích hợp Firebase Authentication với một hệ thống backend khác ngoài các dịch vụ mà Firebase cung cấp [ CITATION Fir231 \l 1033 ].
Cloud Storage cho Firebase được sử dụng khi ứng dụng cần lưu trữ các nội dung do người dùng tạo ra, chẳng hạn như hình ảnh, âm thanh, video.
Cloud Storage cho Firebase là dịch vụ lưu trữ mạnh mẽ, đơn giản với chi phí tiết kiệm chi phí Các Firebase SDK dành cho Cloud Storage cung cấp tính năng bảo mật cho quá trình tải các tập tin trong ứng dụng, bất kể chất lượng đường truyền kết nối mạng [ CITATION Fir232 \l 1033 ].
Full-text search với Algolia
Full-text search là kĩ thuật tìm kiếm văn bản trong dữ liệu văn bản sao cho kết quả trả về có chứa một số hoặc tất cả các kí tự trong văn bản được truy vấn Ngược lại, tìm kiếm truyền thống sẽ trả về kết quả khớp chính xác từng kí tự trong tham số truy vấn.
Full-text search được ứng dụng trong nhiều lĩnh vực khác nhau—ví dụ: tìm kiếm một món ăn trong thực đơn nhà hàng hoặc tìm kiếm một mặt hàng trên trang web thương mại điện tử thông qua một vài từ trong tên của mặt hàng Ngoài việc tìm kiếm các từ khóa cụ thể, full-text search có thể được phụ trợ với các kĩ thuật như fuzzy search và từ đồng nghĩa Do đó, kết quả cho một từ chẳng hạn như “Mì ống” sẽ không chỉ trả về các mục như
“Mì ống với thịt viên” mà còn có thể trả về các mục như “Fettuccine
Carbonara” bằng cách sử dụng từ đồng nghĩa hoặc “Thịt xông khói và bánh mì dẹt sốt pesto” bằng cách sử dụng fuzzy search [ CITATION Mon23 \l
Hình 2.4 Logo Algolia (Nguồn: Wikipedia)
Algolia là một search engine cung cấp nhiều dịch vụ tìm kiếm (trong đó có full-text search) dưới mô hình SaaS (Software as a Service).
Algolia cung cấp dịch vụ tìm kiếm thông qua các API khác nhau Trong đó, Rest API của Algolia cung cấp các tính năng cơ bản về tìm kiếm, phân tích và giám sát Đồng thời, có 10 ngôn ngữ và nền tảng được hỗ trợ để sử dụng Algolia Các ngôn ngữ được hỗ trợ bao gồm Python, Ruby, PHP, JavaScript, Java, Go, C#, Scala Hai nền tảng di động, iOS, Android cũng được hỗ trợ Algolia cũng có thể được tích hợp với 4 web framework: Ruby on Rails, Symfony, Django và Laravel Về giao diện người dùng, Algolia có một vài thư viện giao diện người dùng để lựa chọn [ CITATION Wik232 \l
Bên cạnh những sản phẩm trên, Algolia cũng tích hợp với các phần mềm mã nguồn mở và bên thứ ba khác, bao gồm Drupal, WordPress và Magento.
FoodData Central API
Hình 2.5 Logo của USDA - Bộ Nông nghiệp Hoa Kỳ
FoodData Central (FDC) là hệ thống dữ liệu tích hợp về dinh dưỡng và thực phẩm được phát triển bởi U.S Department of Agriculture (USDA –
Bộ Nông nghiệp Hoa Kỳ), tập trung vào nghiên cứu, cung cấp dữ liệu về chất dinh dưỡng và các thành phần thực phẩm khác cũng như các nguồn thông tin liên quan đến nông nghiệp, thực phẩm, thực phẩm bổ sung và các thông tin khác FoodData Central có thể được sử dụng trong nhiều lĩnh vực khác nhau, bao gồm nghiên cứu, hoạch định chính sách, giáo dục, dinh dưỡng và sức khỏe, phát triển sản phẩm, v.v.[ CITATION USD23 \l 1033 ]
FoodData Central API là một REST API được phát triển bởi USDA cho phép người dùng truy cập đến dữ liệu của FoodData Central với mục đích tích hợp dữ liệu dinh dưỡng vào ứng dụng của họ.
PHÂN TÍCH, THIẾT KẾ HỆ THỐNG
Phân tích Use Case
Hình 3.6 Sơ đồ Use Case tổng quan
STT Tác nhân Mô tả/Ghi chú
Người tập luyện, sử dụng ứng dụng để quản lý việc tập luyện, ăn uống Bảng 3.1 Danh sách tác nhân
STT Tên Use Case Mô tả/Ghi chú
1 Đăng ký Dành cho Người tập luyện, để đăng ký tài khoản mới cho ứng dụng
2 Đăng nhập Dành cho Người tập luyện, để đăng nhập với ứng dụng bằng tài khoản đã đăng ký
3 Xem lịch sử tập luyện Dành cho Người tập luyện, để xem lịch sử các buổi tập của một ngày bất ký
4 Ghi chép một buổi tập Dành cho Người tập luyện, để ghi chi tiết một buổi tập
5 Bắt đầu một buổi tập
Dành cho Người tập luyện, để bắt đầu tiến hành tập luyện (có thể các chức năng bấm giờ để canh thời gian nghỉ)
6 Xem danh sách chương trình tập
Dành cho Người tập luyện, để xem tất cả các chương trình tập người dùng đã tạo
Dành cho Người tập luyện, để tạo mới một chương trình tập và tiến hành ghi chép, bắt đầu tập với chương trình tập
8 Xem danh sách bài tập Dành cho Người tập luyện, để xem danh sách tất cả bài tập
Dành cho Người tập luyện, để tạo một bài tập cho riêng họ khi danh sách bài tập của ứng dụng không có bài tập họ cần
10 Ghi chép một ngày ăn
Dành cho Người tập luyện, để ghi chép các thực phẩm và chất dinh dưỡng tiêu thụ trong một ngày
11 Xem thông tin dinh dưỡng của thực phẩm
Dành cho Người tập luyện, để xem thông tin chi tiết dinh dưỡng của một thực phẩm
Dành cho Người tập luyện, để chỉnh sửa, thay đổi các thông tin Profile như tên, số tuổi, giới tính, cân nặng, chiều cao
13 Thêm số đo cơ thể
Dành cho Người tập luyện, để ghi chép các số đo cơ thể (VD: Chiều cao, cân nặng, số đo vòng bụng, số đo vòng bắp tay,…)
14 Theo dõi sự tiến bộ
Dành cho Người tập luyện, để theo dõi sự tiến bộ về mặt tập luyện, dinh dưỡng, thể chất theo thời gian
Bảng 3.2 Danh sách Use Case
Tên Use Case Đăng ký
Mô tả Cho phép người đăng ký tài khoản mới cho ứng dụng
Tiền điều kiện Không có
Hậu điều kiện Tài khoản mới được tạo cho người dùng
1) Người dùng khởi động ứng dụng
2) Người dùng chuyển đến màn hình Đăng ký
3) Người dùng nhập email, mật khẩu
4) Người dùng xác thực email
1) Người dùng khởi động ứng dụng
2) Người dùng chọn “Đăng ký với Google
3) Người dùng chọn tài khoản Google tương ứng
4) Người dùng nhập email đã đăng ký/mật khẩu không trùng khớp
5) Hệ thống báo lỗi Bảng 3.3 Đặc tả Use Case Đăng ký
Tên Use Case Đăng nhập
Mô tả Cho phép người dùng đăng nhập vào ứng dụng
Tiền điều kiện Không có
Hậu điều kiện Người dùng đăng nhập vào ứng dụng và chuyển đến màn hình chính
1) Người dùng khởi động ứng dụng
2) Người dùng nhập email, mật khẩu
3) Người dùng nhấn Đăng nhập
1) Người dùng khởi động ứng dụng
2) Người dùng chọn “Đăng nhập với Google
3) Người dùng chọn tài khoản Google tương ứng
Dòng sự kiện lỗi 4) Người dùng sai email, mật khẩu
5) Hệ thống báo lỗi Bảng 3.4 Đặc tả Use Case Đăng nhập
Tên Use Case Xem lịch sử tập luyện
Mô tả Cho phép người dùng xem lịch sử tập luyện theo từng ngày
Tiền điều kiện Người dùng đã truy cập vào ứng dụng
Hậu điều kiện Lịch sử tập của ngày được chọn được hiển thị
1) Người dùng nhấn vào BottomNavigationMenu item “Training”
2) Người dùng chọn Tab History
3) Người dùng nhấn vào một buổi tập trong ngày hiện tại để xem chi tiết lịch sử tập
4) Người dùng nhấn nút Đăng nhập
Dòng sự kiện phụ 1) Người dùng nhấn vào BottomNavigationMenu item “Training”
2) Người dùng chọn Tab History
3) Người dùng nhấn icon Calendar
4) Người dùng chọn một ngày trên lịch được hiển thị
Dòng sự kiện lỗi Không có
Bảng 3.5 Đặc tả Use Case Xem lịch sử tập luyện
Tên Use Case Ghi chép một buổi tập
Mô tả Cho phép người dùng lưu lại chi tiết buổi tập để đánh giá sự tiến bộ cũng như lên kế hoạch cho việc tập
Tiền điều kiện Người dùng đã truy cập vào ứng dụng
Hậu điều kiện Buổi tập vừa nhập được thêm vào lịch sử
1) Người dùng nhấn vào BottomNavigationMenu item “Training”
2) Người dùng chọn Tab History
3) Người dùng nhấn icon Add
4) Người dụng chọn các bài tập đã tập
5) Người dụng nhập thông tin chi tiết về buổi tập (số set, số rep, mức tạ…)
6) Người dùng nhấn icon Save
1) Người dùng nhấn vào BottomNavigationMenu item “Training”
2) Người dùng chọn Tab History
3) Người dùng nhấn icon Copy from previous workout
4) Người dùng chọn một workout trong quá khư để copy
5) Người dụng nhập thông tin chi tiết về buổi tập (số set, số rep, mức tạ…)
Dòng sự kiện lỗi Không có
Bảng 3.6 Đặc tả Use Case Ghi chép một buổi tập
Tên Use Case Bắt đầu một buổi tập
Mô tả Cho phép người dùng bắt đầu tiến hành tập luyện (có thể các chức năng bấm giờ để canh thời gian nghỉ)
Tiền điều kiện Người dùng đã truy cập vào ứng dụng
Hậu điều kiện Buổi tập vừa tập được thêm vào lịch sử
1) Người dùng nhấn vào BottomNavigationMenu item “Training”
2) Người dùng chọn Tab History
3) Người dùng nhấn button “Start Workout”
4) Người dụng chọn các bài tập đã tập
5) Người dụng nhập thông tin chi tiết về buổi tập (số set, số rep, mức tạ…)
6) Người dùng nhấn Complete mỗi hiệp tập
7) Người dùng nhấn icon Save
1) Người dùng nhấn vào BottomNavigationMenu item “Training”
2) Người dùng chọn Tab History
3) Người dùng nhấn button “Start Workout”
4) Người dùng quay về màn hình khác
5) Người dùng nhấn thanh “Workout In Progress”
6) Người dùng tiếp tục tập luyện
Dòng sự kiện lỗi 7) Người dùng nhấn Save khi chưa hoàn thành việc tập luyện
8) Ứng dụng báo lỗi Bảng 3.7 Đặc tả Use Case Bắt đầu một buổi tập
Tên Use Case Xem danh sách chương trình tập
Mô tả Cho phép người dùng xem tất cả các chương trình tập người dùng đã tạo
Tiền điều kiện Người dùng đã truy cập vào ứng dụng
Hậu điều kiện Danh sách chương trình tập được hiển thị
1) Người dùng nhấn vào BottomNavigationMenu item “Training”
2) Người dùng chọn Tab Routines
3) Người dùng nhấn vào Routine bất kỳ để xem chi tiết Routine
Dòng sự kiện phụ Không có
Dòng sự kiện lỗi Không có
Bảng 3.8 Đặc tả Use Case Xem danh sách chương trình tập
Tên Use Case Tạo chương trình tập
Mô tả Cho phép người dùng tạo mới một chương trình tập và tiến hành ghi chép, bắt đầu tập với chương trình tập
Tiền điều kiện Người dùng đã truy cập vào ứng dụng
Hậu điều kiện Chương trình tập mới được tạo ra
Dòng sự kiện 1) Người dùng nhấn vào BottomNavigationMenu chính item “Training”
2) Người dùng chọn Tab Routines
3) Người dùng nhấn icon Add
4) Người dùng chọn các bài tập
5) Người dùng nhập thông tin chương trình tập
Dòng sự kiện phụ Không có
Dòng sự kiện lỗi Không có
Bảng 3.9 Đặc tả Use Case Tạo chương trình tập
Tên Use Case Xem danh sách bài tập
Mô tả Cho phép người dùng xem danh sách tất cả các bài tập
Tiền điều kiện Người dùng đã truy cập vào ứng dụng
Hậu điều kiện Danh sách bài tập được hiển thị
1) Người dùng nhấn vào BottomNavigationMenu item “Training”
2) Người dùng chọn Tab Exercises
3) Người dùng nhấn chọn một bài tập bất kỳ để xem thông tin
1) Người dùng nhấn vào BottomNavigationMenu item “Training”
2) Người dùng chọn Tab Exercises
3) Người dùng nhấn tìm kiếm bài tập
4) Người dùng sử dụng bộ lọc để lọc các bài tập
5) Người dùng nhấn chọn một bài tập bất kỳ để xem thông tin
Dòng sự kiện lỗi Không có
Bảng 3.10 Đặc tả Use Case Xem danh sách bài tập
Tên Use Case Tạo bài tập custom
Mô tả Cho phép người dùng tạo một bài tập cho riêng họ khi danh sách bài tập của ứng dụng không có bài tập họ cần
Tiền điều kiện Người dùng đã truy cập vào ứng dụng
Hậu điều kiện Bài tập custom được tạo
1) Người dùng nhấn vào BottomNavigationMenu item “Training”
2) Người dùng chọn Tab Exercises
3) Người dùng nhấn icon Add
4) Người dùng nhập thông tin bài tập Custom (hình ảnh tên, category, các nhóm cơ được tập)
Dòng sự kiện phụ 1) Người dùng nhấn vào BottomNavigationMenu item “Training”
2) Người dùng chọn Tab Exercises
3) Người dùng tìm kiếm bài tập thông qua tên
4) Khi ứng dụng không có thông tin về bài tập được truy vấn, sẽ hiển thị màn hình đề xuất tạo bài tập custom
5) Người dùng nhấn vào icon Add
6) Người dùng nhập thông tin bài tập Custom (hình ảnh tên, category, các nhóm cơ được tập)
Dòng sự kiện lỗi Không có
Bảng 3.11 Đặc tả Use Case Tạo bài tập Custom
Tên Use Case Ghi chép một ngày ăn
Mô tả Cho phép người dùng ghi chép các thực phẩm và chất dinh dưỡng tiêu thụ trong một ngày
Tiền điều kiện Người dùng đã truy cập vào ứng dụng
Hậu điều kiện Thông tin dinh dưỡng của một ngày được cập nhật
1) Người dùng nhấn vào BottomNavigationMenu item “Nutrition”
2) Người dùng chọn Add food cho một bữa ăn
3) Người dùng chọn các thực phẩm
4) Người dùng chọn khối lượng thực phẩm
Dòng sự kiện phụ Không có
Dòng sự kiện lỗi Không có
Bảng 3.12 Đặc tả Use Case Ghi chép một ngày ăn
Tên Use Case Xem thông tin dinh dưỡng của thực phẩm
Mô tả Cho phép người dùng xem thông tin chi tiết dinh dưỡng của một thực phẩm
Tiền điều kiện Người dùng đã truy cập vào ứng dụng
Hậu điều kiện Thông tin của thực phẩm được hiển thị
1) Người dùng nhấn vào BottomNavigationMenu item “Nutrition”
2) Người dụng chọn Tab Food
3) Người dùng nhấn chọn một thực phẩm
4) Người dùng xem thực phẩm vừa chọn
1) Người dùng nhấn vào BottomNavigationMenu item “Nutrition”
2) Người dụng chọn Tab Food
3) Người dùng tìm kiếm thực phẩm theo tên
4) Người dùng nhấn chọn một thực phẩm
5) Người dùng xem thực phẩm vừa chọn
Dòng sự kiện lỗi Không có
Bảng 3.13 Đặc tả Use Case Xem thông tin dinh dưỡng của thực phẩm
Tên Use Case Chỉnh sửa Profile
Mô tả Cho phép người dùng chỉnh sửa, thay đổi các thông tin Profile như tên, số tuổi, giới tính, cường độ vận động, mục tiêu cân nặng
Tiền điều kiện Người dùng đã truy cập vào ứng dụng
Hậu điều kiện Profile của người dụng được cập nhật
1) Người dùng nhấn vào BottomNavigationMenu item “Setting”
2) Người dụng chọn Button Profile
3) Người dùng nhập các thông tin: tên, số tuổi, giới tính, cường độ vận động, mục tiêu cân nặng
Dòng sự kiện phụ Không có
5) Thông tin được nhập không hợp lệ (VD: Số tuổi <
6) Ứng dụng báo lỗi Bảng 3.14 Đặc tả Use Case Chỉnh sửa Profile
Tên Use Case Thêm số đo cơ thể
Mô tả Cho phép người dùng ghi chép các số đo cơ thể (VD: Chiều cao, cân nặng, số đo vòng bụng, số đo vòng bắp tay,…)
Tiền điều kiện Người dùng đã truy cập vào ứng dụng
Hậu điều kiện Số đo cơ thể của người dùng được cập nhật
1) Người dùng nhấn vào BottomNavigationMenu item “Setting”
2) Người dụng chọn Button Measurement
3) Người dùng nhấn chọn một số đo
4) Người dùng các thông tin: giá trị, ngày tháng năm
Dòng sự kiện phụ Không có
6) Thông tin được nhập không hợp lệ (VD: Giá trị số đo < 0)
7) Ứng dụng báo lỗi Bảng 3.15 Đặc tả Use Case Thêm số đo cơ thể
Tên Use Case Theo dõi sự tiến bộ
Mô tả Cho phép người dùng theo dõi sự tiến bộ về mặt tập luyện, dinh dưỡng, thể chất theo thời gian
Tiền điều kiện Người dùng đã truy cập vào ứng dụng
Hậu điều kiện Sự tiến bộ được thể hiện dưới dạng các biểu đồ đường
1) Người dùng nhấn vào BottomNavigationMenu item “Dashboard”
2) Người dùng nhấn icon Add
3) Người dùng chọn một thông số để theo dõi sự tiến bộ (bài tập, số đo cơ thể)
4) Người dùng chọn một trong 3 tab Training, Nutrition, Biometrics để quan sát sự tiến bộ
1) Người dùng nhấn vào BottomNavigationMenu item “Dashboard”
2) Người dùng nhấn icon Calendar bên cạnh mỗi biểu đồ đường
3) Người dùng chọn một khoảng thời gian
4) Người dùng chọn một trong 3 tab Training, Nutrition, Biometrics để quan sát sự tiến bộ
Dòng sự kiện lỗi Không có
Bảng 3.16 Đặc tả Use Case Theo dõi sự tiến bộ
Sơ đồ Sequence
Hình 3.7 Sơ đồ Sequence cho Use Case Đăng ký
Hình 3.8 Sơ đồ Sequence cho Use Case Xem lịch sử tập luyện
Hình 3.9 Sơ đồ Sequence cho Use Case Ghi chép một buổi tập
Hình 3.10 Sơ đồ Sequence cho Use Case Xem danh sách chương trình tập
Hình 3.11 Sơ đồ Sequence cho Use Case Tạo chương trình tập
Hình 3.12 Sơ đồ Sequence cho Use Case Ghi chép một ngày ăn
Hình 3.13 Sơ đồ Sequence cho Use Case Theo dõi sự tiến bộ
Sơ đồ Activity
Hình 3.14 Sơ đồ Activity của Use Case Xem lịch sử tập luyện
Hình 3.15 Sơ đồ Activity cho Use Case Ghi chép một buổi tập
Hình 3.16 Sơ đồ Activity cho Use Case Xem danh sách Chương trình tập
Hình 3.17 Sơ đồ Activity cho Use Case Tạo chương trình tập
Hình 3.18 Sơ đồ Activity cho Use Case Ghi chép một ngày ăn
Hình 3.19 Sơ đồ Activity cho Use Case chỉnh sửa Profile
Hình 3.20 Sơ đồ Activity cho Use Case Theo dõi sự tiến bộ
Kiến trúc hệ thống
Hình 3.21 Sơ đồ kiến trúc tổng quan
Về tổng thể, kiến trúc hệ thống được thiết kế theo mô hình Client-Server:
- Client: Ứng dụng di động được xây dựng với Android Được thiết kế theo mô hình MVVM (Model – View – ViewModel): o Model: Các lớp lưu trữ dữ liệu bao gồm các lớp DataSource (đảm nhiệm việc truy xuất đến backend) và các lớp Repository (Đóng gói các DataSource và cho phép các tầng phía trên lấy dữ liệu). o View: Đảm nhận việc xây dựng giao diện người dùng o ViewModel: Giao tiếp với tầng Model và đưa dữ liệu tới View (thường sử dụng các observable state holder để làm việc này).
- Server: Lưu trữ CSDL với Cloud Firestore, Lưu trữ file với CloudStorage for Firebase.
Thiết kế Cơ sở dữ liệu
3.5.1 Sơ đồ Cơ sở dữ liệu tổng quan
Hình 3.22 Sơ đồ Cơ sở dữ liệu tổng quan
3.5.2 Mô tả Cơ sở dữ liệu
Tên trường Kiểu dữ liệu Mô tả/Ghi chú username String Tên tài khoản email String Email của người dùng age Number Độ tuổi của người dùng sex String Giới tính của người dùng measurements SubCollection Các số đo cơ thể
Bảng 3.17 Mô tả Collection User
Tên trường Kiểu dữ liệu Mô tả/Ghi chú name String Tên thực phẩm calories Number Tổng lượng calo của thực phẩm coreNutrients Map