Bối cảnh và vấn đề nghiên cứu
Trong bối cảnh công nghệ thông tin và thiết bị di động phát triển nhanh chóng, nhu cầu tra cứu và lựa chọn địa điểm ăn uống của người dân đô thị, đặc biệt là giới trẻ, ngày càng gia tăng. Tác giả chỉ ra rằng người dùng hiện nay không chỉ tìm kiếm các địa điểm ẩm thực đáp ứng tiêu chí chất lượng và chi phí hợp lý mà còn có xu hướng lưu trữ các địa chỉ yêu thích và chia sẻ trải nghiệm với cộng đồng. Nhằm giải quyết nhu cầu thực tiễn này thông qua một giao diện trực quan và quen thuộc trên nền tảng di động, đề tài "Tìm hiểu và xây dựng ứng dụng tìm kiếm quán ăn trên hệ điều hành iOS" đã được thực hiện tại Khoa Công nghệ Thông tin, Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh.
Mục tiêu và nhiệm vụ nghiên cứu của khóa luận được phân định cụ thể thành 3 nhiệm vụ chính:
- Tìm hiểu ngôn ngữ lập trình di động Swift và nền tảng máy chủ NodeJS.
- Tìm hiểu và nghiên cứu hệ quản trị cơ sở dữ liệu NoSQL gồm MongoDB (kết hợp thư viện Mongoose) và nền tảng dịch vụ đám mây Firebase.
- Ứng dụng các kiến thức và công nghệ đã nghiên cứu để thiết kế, xây dựng hoàn chỉnh ứng dụng tìm kiếm quán ăn vận hành trên hệ điều hành iOS cùng hệ thống quản trị dữ liệu.
Đối tượng và phạm vi nghiên cứu của đề tài bao gồm:
- Đối tượng nghiên cứu: Quy trình thiết kế và phát triển ứng dụng di động tìm kiếm địa điểm ăn uống trên iOS; cơ chế đồng bộ và xử lý dữ liệu thông qua RESTful API với backend NodeJS, cơ sở dữ liệu MongoDB và các tiện ích từ Firebase.
- Phạm vi không gian: Triển khai thử nghiệm ứng dụng trên hệ điều hành iOS (sử dụng công cụ TestFlight và cài đặt trực tiếp trên thiết bị iPhone thật), hệ thống máy chủ backend được đưa lên máy chủ ảo riêng (VPS) kèm tên miền để cung cấp dữ liệu qua mạng Internet.
- Phạm vi thời gian: Đề tài được thực hiện trong thời gian 4 tháng, từ ngày 01/03/2019 đến ngày 30/06/2019, trải qua 11 giai đoạn thực hiện từ khảo sát, phân tích yêu cầu, thiết kế kiến trúc, xây dựng cơ sở dữ liệu đến lập trình và kiểm thử.
Cơ sở lý thuyết và phương pháp
Khóa luận kết hợp giữa nghiên cứu lý thuyết nền tảng về công nghệ phần mềm và phương pháp kỹ thuật thực nghiệm để xây dựng sản phẩm phần mềm hoàn chỉnh:
-
Khung công nghệ và mô hình phát triển:
- Mongoose ODM (Object Document Mapper): Tác giả sử dụng Mongoose để định nghĩa cấu trúc dữ liệu (Schema) ánh xạ tới các document trong MongoDB. Văn bản trình bày chi tiết 8 kiểu dữ liệu của Mongoose SchemaTypes (
String, Number, Date, Buffer, Boolean, Mixed, ObjectID, Array) cùng các thuộc tính kiểm thực dữ liệu (required, validate, biểu thức chính quy, enum) và các phương thức truy vấn như find, findOne, findById, findByIdAndUpdate.
- NodeJS: Được lựa chọn làm môi trường thực thi máy chủ phía backend. Đề tài vận dụng kiến trúc hướng sự kiện (event-driven) và cơ chế non-blocking I/O chạy trên nhân Google V8 JavaScript Engine để xây dựng các API định dạng JSON phục vụ ứng dụng di động.
- Firebase: Tác giả khảo sát tổng thể các nhóm công cụ của Firebase (Develop & test your app và Grow & engage your audience). Trong phạm vi triển khai thực tế, hệ thống tập trung tích hợp dịch vụ Firebase Authentication để quản lý đăng nhập/đăng ký tài khoản và Firebase Cloud Messaging (FCM) để gửi tin nhắn, thông báo tới thiết bị di động.
- Ngôn ngữ Swift và Xcode: Đóng vai trò là ngôn ngữ và môi trường phát triển chính để xây dựng giao diện và logic cho ứng dụng client trên hệ điều hành iOS.
-
Phương pháp nghiên cứu thực tế:
- Phương pháp phân tích - tổng hợp: Tiến hành phân tích hiện trạng các giải pháp phần mềm hiện có trên thị trường nhằm xác định yêu cầu nghiệp vụ và cấu trúc chức năng.
- Phương pháp mô hình hóa phần mềm (UML): Xây dựng sơ đồ Use Case tổng quát, Use Case chi tiết cho từng tác nhân và các sơ đồ tuần tự (Sequence Diagram) mô tả luồng xử lý các chức năng cốt lõi.
- Phương pháp thực nghiệm kỹ thuật phần mềm: Cài đặt mã nguồn, cấu hình thư viện liên kết thông qua CocoaPods trên iOS và npm trên máy chủ; đóng gói ứng dụng lên TestFlight và chạy kiểm thử chức năng trực tiếp trên thiết bị di động.
-
Nguồn dữ liệu: Dữ liệu thử nghiệm về danh sách quán ăn, thực đơn, hình ảnh và tọa độ địa lý được nhóm tác giả tự tổng hợp và khởi tạo trực tiếp vào hệ thống MongoDB thông qua giao diện quản trị web của Admin và chức năng đóng góp bài viết của người dùng.
Thiết kế và triển khai
Hệ thống được thiết kế theo mô hình Client - Server tách biệt, đảm bảo khả năng giao tiếp dữ liệu liên tục qua giao thức mạng:
| Thành phần hệ thống |
Công nghệ / Nền tảng |
Vai trò và nhiệm vụ chính |
| Ứng dụng di động (Client) |
Swift, Xcode, CocoaPods, MapKit |
Cung cấp giao diện người dùng trên iOS, hiển thị bản đồ, định vị vị trí quán ăn, gửi yêu cầu tìm kiếm và tương tác. |
| Máy chủ dịch vụ (Backend) |
NodeJS, ExpressJS |
Tiếp nhận các truy vấn RESTful API dạng JSON từ ứng dụng di động, thực thi nghiệp vụ và tương tác với cơ sở dữ liệu. |
| Cơ sở dữ liệu (Database) |
MongoDB, Mongoose ODM |
Lưu trữ dữ liệu phi quan hệ gồm thông tin quán ăn, thực đơn chi tiết, bình luận, báo cáo vi phạm và tài khoản người dùng. |
| Dịch vụ đám mây (Cloud Services) |
Firebase Auth, Firebase Cloud Messaging |
Xác thực phiên đăng nhập của người dùng và truyền thông báo đẩy từ hệ thống tới ứng dụng di động. |
| Hạ tầng triển khai |
Máy chủ ảo VPS, Tên miền (Domain), TestFlight |
Vận hành mã nguồn server NodeJS công khai trên Internet và phân phối gói cài đặt thử nghiệm cho thiết bị iOS. |
Hệ thống xác định 3 tác nhân tương tác chính gồm: Khách (Guest), Thành viên đã đăng ký (User) và Quản trị viên (Admin):
- Phân hệ Guest: Cho phép xem danh sách quán ăn, thông tin chi tiết (địa chỉ, thời gian mở cửa, mức giá), xem bản đồ chỉ đường, chia sẻ thông tin quán ăn, đăng ký và đăng nhập tài khoản, tìm kiếm quán ăn theo tên hoặc theo địa chỉ.
- Phân hệ User: Thừa hưởng toàn bộ quyền của Guest, đồng thời được cấp quyền bình luận đánh giá, gửi báo cáo (report) vi phạm về quán ăn cho Admin, lưu quán ăn vào danh mục yêu thích, đăng bài viết chia sẻ địa điểm ăn uống mới (chờ Admin duyệt), thay đổi thông tin cá nhân (tên hiển thị, mật khẩu, ảnh đại diện) và nhận thông báo từ hệ thống.
- Phân hệ Admin: Thao tác thông qua giao diện Web để thêm, sửa, xóa quán ăn và thực đơn món ăn; tiếp nhận và phê duyệt bài viết do User đóng góp; quản lý danh sách báo cáo vi phạm và gửi thông báo tới người dùng.
Quy trình hoạt động được mô hình hóa chi tiết qua các sơ đồ tuần tự (Sequence Diagram), bao gồm luồng đăng nhập, đăng ký, sửa thông tin cửa hàng, tìm kiếm quán ăn và lưu quán ăn yêu thích.
Cơ sở dữ liệu MongoDB của hệ thống được tổ chức thành 4 bảng (collection) chính:
| Tên bảng (Collection) |
Trường dữ liệu (Field Name) |
Kiểu dữ liệu |
Ý nghĩa chức năng |
| poster |
id, addminCheck, urlImage, ImgName, Address, Kinhdo, Vido, Contents, moreContents, Comments, uID |
ObjectId, String |
Lưu thông tin định danh quán ăn, trạng thái kiểm duyệt của Admin, ảnh đại diện, tên quán, địa chỉ, tọa độ GPS (kinh độ, vĩ độ), bài viết mô tả và liên kết tới người đăng. |
| MoreContents |
id, ImgFood, ImgNameFood, Price |
ObjectId, String |
Lưu chi tiết thực đơn gồm mã món ăn, liên kết ảnh món ăn, tên món ăn và đơn giá món ăn. |
| Comments |
Id, Uid, Content, Name, Imgprofile |
ObjectId, String |
Lưu nội dung bình luận của người dùng về quán ăn, kèm thông tin người gửi bình luận (mã, tên, ảnh đại diện). |
| Userrs |
id, uid, Name, Imgprofile |
ObjectId, String |
Lưu trữ thông tin tài khoản người dùng đã đăng ký bao gồm mã tài khoản, tên hiển thị và đường dẫn ảnh đại diện. |
Nội dung chính theo từng chương
CHƯƠNG 1: GIỚI THIỆU
Chương này thiết lập nền tảng cho toàn bộ đồ án tốt nghiệp. Tác giả trình bày tính cấp thiết của đề tài xuất phát từ nhu cầu thực tiễn của xã hội và giới trẻ trong việc tìm kiếm các địa điểm ẩm thực ngon, giá cả phù hợp và nhu cầu kết nối cộng đồng. Chương sách làm rõ mục đích nghiên cứu nhằm tiếp cận các công nghệ hiện đại (Swift, NodeJS, MongoDB, Firebase) và đề ra phương pháp tiếp cận từ xây dựng form giao diện, viết API backend, thiết lập máy chủ VPS, cấu hình Firebase đến việc thử nghiệm ứng dụng trên thiết bị di động thật thông qua TestFlight. Cuối chương là danh mục các kết quả dự kiến đạt được về mặt kiến thức và tính năng sản phẩm.
CHƯƠNG 2: KHẢO SÁT HIỆN TRẠNG
Tác giả tiến hành phân tích và so sánh 3 ứng dụng phổ biến tại Việt Nam vào thời điểm nghiên cứu:
- Foody: Nổi bật với giao diện được đầu tư kỹ lưỡng, hỗ trợ đa nền tảng (Web, iOS, Android, Windows Phone), cung cấp dịch vụ phong phú.
- Lozi: Mạng xã hội tập trung vào việc chia sẻ hình ảnh món ăn, xây dựng cộng đồng xuất phát từ nền tảng Instagram, cho phép người dùng review và theo dõi bạn bè.
- ClingMe: Ứng dụng Việt thông minh hỗ trợ tìm kiếm dựa trên định vị vệ tinh GPS, tích hợp thêm các tiện ích như tìm cây xăng, trụ ATM, bãi đỗ xe và nhà thuốc.
Từ việc tổng kết các ưu điểm (tìm kiếm nhanh theo vị trí và tên gọi, lưu quán ăn, đặt chỗ trực tuyến) và khuyết điểm (chủ yếu tập trung riêng cho các nhà hàng, quán trà sữa - cà phê lớn), nhóm tác giả xác định phạm vi yêu cầu kỹ thuật và các chức năng phân quyền cụ thể cho ba đối tượng tương tác của hệ thống: Guest, User và Admin.
CHƯƠNG 3: CƠ SỞ LÝ THUYẾT
Chương 3 trình bày chi tiết cơ sở lý luận về các công nghệ được sử dụng trong đề tài:
- Trình bày định nghĩa và nguyên lý hoạt động của Mongoose ODM, bảng danh mục 8 kiểu SchemaTypes, các tùy chọn xác thực dữ liệu (
validate), cách thiết lập kết nối cơ sở dữ liệu và ví dụ cụ thể về cú pháp tạo Model, lưu trữ dữ liệu, thực hiện truy vấn với find và findByIdAndUpdate.
- Phân tích cấu trúc hoạt động của NodeJS: kiến trúc hướng sự kiện, mô hình non-blocking I/O đơn luồng (single-thread), các trường hợp phù hợp để áp dụng (viết JSON RESTful API, ứng dụng thời gian thực, Single Page Application) cũng như các trường hợp hạn chế sử dụng (xử lý tác vụ tính toán nặng ngốn CPU như mã hóa video).
- Giới thiệu tổng quan hệ sinh thái Firebase của Google (bao gồm 2 nhóm công cụ phát triển/kiểm thử và phân tích/tiếp cận người dùng), đồng thời xác định việc tích hợp thực tế dịch vụ Firebase Cloud Messaging và Authentication vào mã nguồn thông qua CocoaPods.
CHƯƠNG 4: THIẾT KẾ HỆ THỐNG
Nội dung chương 4 tập trung vào việc mô hình hóa kiến trúc phần mềm một cách tường minh:
- Trình bày hệ thống sơ đồ Use Case tổng quát và 5 nhóm Use Case phân rã: Quản lý quán ăn, Quản lý món ăn, Quản lý thông tin cá nhân, Thay đổi thông tin cá nhân và Quản lý thông tin quán ăn.
- Thiết lập 18 bảng mô tả kịch bản Use Case chuẩn hóa, xác định rõ mô tả chức năng, tác nhân kích hoạt, tiền điều kiện và các bước thực hiện tuần tự cho từng tác vụ của Admin và Khách hàng.
- Xây dựng 5 sơ đồ tuần tự (Sequence Diagram) mô tả chi tiết sự tương tác giữa giao diện ứng dụng, tầng điều khiển máy chủ và cơ sở dữ liệu đối với các thao tác cốt lõi.
- Chi tiết hóa cấu trúc 4 bảng cơ sở dữ liệu (
poster, MoreContents, Comments, Userrs) kèm tên trường và kiểu dữ liệu cụ thể.
- Minh họa thiết kế giao diện đồ họa cho từng phân hệ màn hình của Admin, Guest và User.
CHƯƠNG 5: HIỆN THỰC VÀ KIỂM THỬ HỆ THỐNG
Chương này phản ánh quá trình chuyển giao từ thiết kế kỹ thuật sang sản phẩm phần mềm chạy thực tế. Tác giả thực hiện tích hợp mã nguồn Swift với các thư viện Firebase, kết nối API máy chủ NodeJS triển khai trên VPS, đồng thời ghi nhận kết quả hiển thị của các màn hình chức năng trên điện thoại. Tài liệu cũng đính kèm các hướng dẫn xử lý lỗi cụ thể (từ bước 1 đến bước 7) nhằm khắc phục các sự cố thường gặp trong lần đầu biên dịch và chạy ứng dụng trên môi trường Xcode.
CHƯƠNG 6: PHẦN KẾT LUẬN
Chương tổng kết toàn bộ khóa luận, khẳng định các mục tiêu nghiên cứu ban đầu đã được hoàn thành. Tác giả tổng hợp các kết quả thực tế đã đạt được về mặt tính năng sản phẩm và kiến thức kỹ thuật, đồng thời thẳng thắn chỉ ra những mặt tồn tại, hạn chế của hệ thống và đề xuất phương hướng phát triển tiếp theo cho ứng dụng.
Kết quả và đóng góp
-
Kết quả chức năng chính: Đề tài đã xây dựng hoàn chỉnh ứng dụng tìm kiếm quán ăn vận hành trên nền tảng iOS và hệ thống quản trị dữ liệu phía máy chủ. Các tính năng cốt lõi đã hiện thực hóa bao gồm:
- Tra cứu quán ăn theo tên quán và theo địa chỉ thực tế.
- Tích hợp bản đồ và định vị GPS để chỉ đường cho người dùng đến quán ăn.
- Lưu và quản lý danh sách các quán ăn, món ăn yêu thích cá nhân.
- Cho phép người dùng đã đăng ký viết bài chia sẻ thông tin quán ăn mới lên hệ thống.
- Tính năng bình luận công khai dưới từng địa điểm ăn uống.
- Chức năng chia sẻ thông tin quán ăn với người khác.
- Tính năng gửi báo cáo vi phạm (report) về quán ăn cho Quản trị viên xử lý.
- Hệ thống quản trị Web cho Admin quản lý danh sách quán, thực đơn món ăn, kiểm duyệt bài viết người dùng và nhận báo cáo.
- Đăng ký, đăng nhập tài khoản người dùng thông qua Firebase.
-
Đóng góp về mặt giải pháp kỹ thuật: Đồ án cung cấp một tài liệu kỹ thuật hoàn chỉnh về quy trình xây dựng ứng dụng di động iOS kết hợp kiến trúc dịch vụ hiện đại. Tác giả đã làm rõ phương thức tích hợp giữa ứng dụng Swift bản địa với máy chủ NodeJS, cơ sở dữ liệu MongoDB thông qua Mongoose ODM, cùng với việc tận dụng dịch vụ xác thực và thông báo đẩy của Firebase.
Hạn chế và hướng nghiên cứu tiếp
Theo phiếu nhận xét chính thức của Giáo viên hướng dẫn (TS. Nguyễn Thiên Bảo) và nội dung tự đánh giá của nhóm tác giả trong văn bản, đồ án còn tồn tại một số hạn chế cụ thể sau:
- Ứng dụng chưa có chức năng chấm điểm, đánh giá xếp hạng quán ăn (chưa có tính năng rating/stars).
- Chưa tích hợp tính năng đặt món ăn trực tuyến (order online) và đặt chỗ trước (booking).
- Hệ thống chưa hỗ trợ cơ chế thông báo theo thời gian thực (realtime notification).
- Chưa xây dựng tính năng kết nối và mời bạn bè cùng tham gia ứng dụng.
- Về mặt cơ sở dữ liệu, một số trường như tọa độ địa lý (
Kinhdo, Vido) vẫn đang được lưu trữ dưới dạng chuỗi (String), chưa tận dụng các kiểu chỉ mục không gian địa lý chuyên biệt của MongoDB.
Từ các hạn chế trên, hướng phát triển được xác định bao gồm: hoàn thiện mô-đun xếp hạng và đánh giá chất lượng quán ăn; bổ sung tính năng giao dịch trực tuyến (đặt bàn và đặt đồ ăn); nâng cấp hệ thống thông báo đẩy thời gian thực và xây dựng các tính năng tương tác mạng xã hội giữa người dùng.
Giá trị tham khảo
Đồ án là tài liệu tham khảo thực tiễn và hữu ích dành cho:
- Sinh viên chuyên ngành Công nghệ thông tin, Công nghệ phần mềm đang thực hiện đồ án môn học hoặc khóa luận tốt nghiệp về lập trình ứng dụng di động trên nền tảng iOS bằng ngôn ngữ Swift.
- Lập trình viên đang tìm hiểu phương pháp tích hợp hệ sinh thái công nghệ gồm Swift (Client) - NodeJS (RESTful API Server) - Mongoose/MongoDB (Database) - Firebase (Authentication và Push Notification).
- Người học cần tham khảo cấu trúc chuẩn của một báo cáo kỹ thuật phần mềm, bao gồm việc xây dựng kịch bản Use Case, vẽ sơ đồ tuần tự Sequence Diagram và thiết kế chi tiết các bảng dữ liệu NoSQL.
Câu hỏi thường gặp
1. Khóa luận này do ai thực hiện, thuộc đơn vị đào tạo nào và hoàn thành vào thời gian nào?
Khóa luận do hai sinh viên Huỳnh Thế Cương (MSSV: 15110172) và Bùi Đỗ Trung Trực (MSSV: 15110354), chuyên ngành Công nghệ Phần mềm, Khoa Công nghệ Thông tin - Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh thực hiện dưới sự hướng dẫn của TS. Nguyễn Thiên Bảo và phản biện của TS. Nguyễn Thành Sơn. Đề tài được hoàn thành vào tháng 6 năm 2019 (thời gian làm việc từ 01/03/2019 đến 30/06/2019).
2. Ứng dụng client trên điện thoại được xây dựng cho hệ điều hành nào và bằng ngôn ngữ gì?
Ứng dụng client được phát triển chuyên biệt cho hệ điều hành iOS bằng ngôn ngữ lập trình Swift trên môi trường Xcode, đồng thời sử dụng công cụ CocoaPods để quản lý và tích hợp các thư viện liên kết.
3. Cơ sở dữ liệu của ứng dụng được tổ chức thành các bảng nào và lưu trữ thông tin gì?
Hệ thống sử dụng cơ sở dữ liệu MongoDB gồm 4 bảng (collection) chính: poster (lưu thông tin chi tiết về quán ăn, hình ảnh, bài giới thiệu, tọa độ kinh/vĩ độ, trạng thái phê duyệt của admin), MoreContents (lưu danh mục các món ăn trong thực đơn và đơn giá), Comments (lưu nội dung bình luận của người dùng đối với quán ăn) và Userrs (lưu trữ thông tin tài khoản người dùng gồm mã tài khoản, tên hiển thị và ảnh đại diện).
4. Dịch vụ Firebase đóng vai trò gì trong đồ án này?
Theo công bố của tác giả, mặc dù đã khảo sát toàn diện hệ sinh thái Firebase, đề tài tập trung tích hợp hai thành phần chính: dịch vụ Firebase Authentication dùng cho việc đăng ký và đăng nhập tài khoản người dùng, cùng dịch vụ Firebase Cloud Messaging (FCM) phục vụ việc truyền phát tin nhắn và thông báo tới thiết bị di động.
5. Những hạn chế kỹ thuật lớn nhất của ứng dụng được Giáo viên hướng dẫn ghi nhận là gì?
Theo phiếu nhận xét của GVHD, ứng dụng còn 4 khuyết điểm chính: chưa có tính năng đánh giá (rating) quán ăn; chưa hỗ trợ tính năng đặt thức ăn và đặt chỗ trực tuyến; chưa hỗ trợ thông báo thời gian thực (realtime); và chưa có tính năng kết nối/mời bạn bè.
Kết luận
Khóa luận tốt nghiệp "Tìm hiểu và xây dựng ứng dụng tìm kiếm quán ăn trên hệ điều hành iOS" của nhóm tác giả Huỳnh Thế Cương và Bùi Đỗ Trung Trực đã giải quyết thành công bài toán xây dựng một giải pháp phần mềm hỗ trợ tìm kiếm địa điểm ăn uống di động. Đề tài thể hiện rõ tính ứng dụng khi kết hợp hài hòa giữa ngôn ngữ lập trình Swift trên iOS với nền tảng máy chủ NodeJS, cơ sở dữ liệu MongoDB và dịch vụ Firebase. Mặc dù vẫn còn một số điểm khuyết về tính năng thương mại như đặt chỗ trực tuyến hay chấm điểm xếp hạng, đồ án đã hoàn thành đầy đủ các mục tiêu thiết kế, mô hình hóa nghiệp vụ và triển khai thực nghiệm theo đúng kế hoạch đề ra. Sản phẩm đóng vai trò là một tài liệu tham khảo kỹ thuật giá trị cho sinh viên và lập trình viên trong lĩnh vực phát triển ứng dụng di động hướng dịch vụ.