Bối cảnh và vấn đề nghiên cứu
Nhu cầu thuê trọ là vấn đề cấp thiết đối với sinh viên và người lao động phải sinh sống xa nhà nhằm phục vụ cho công việc và học tập. Việc tìm kiếm một môi trường cư trú phù hợp, an ninh, sạch sẽ và thuận tiện cho việc di chuyển là một nhu cầu thực tế rất lớn. Mô hình kinh doanh phòng trọ hiện nay phát triển đa dạng, từ các mặt bằng mặt tiền đường cho đến các vị trí trong hẻm, ngõ với quy mô linh hoạt từ 10–20 phòng cho đến các dãy trọ lớn hàng trăm phòng.
Tuy nhiên, công tác quản lý và vận hành hoạt động cho thuê trọ đang đối mặt với nhiều trở ngại:
- Đối với người cho thuê: Việc quản lý số lượng lớn phòng trọ phát sinh khối lượng công việc phức tạp như xử lý hư hỏng, bảo trì cơ sở vật chất, giám sát an ninh, ghi nhận chỉ số đồng hồ điện nước, lập hóa đơn, thu tiền hàng tháng và nhắc nhở khách thuê chấp hành quy định.
- Đối với người đi thuê: Khó khăn trong việc xác minh chất lượng thực tế của phòng ở (độ kiên cố, tình trạng tường sơn, hệ thống cửa khóa an toàn, độ thông thoáng, hệ thống cấp thoát nước), rủi ro pháp lý và lừa đảo tiền cọc khi giao dịch qua môi giới không chính chủ, cũng như việc nắm bắt minh bạch các chi phí phát sinh (tiền điện, nước, internet, gửi xe).
- Hạn chế của các kênh truyền thống: Việc tìm kiếm thủ công hoặc thông qua mạng xã hội (Facebook, hội nhóm) giúp tiếp cận thông tin hình ảnh ban đầu nhưng không hỗ trợ quy trình khép kín về giao dịch, lập hợp đồng pháp lý, thanh toán trực tuyến và lưu trữ lịch sử trao đổi.
Từ thực trạng trên, nhóm tác giả Trịnh Nhật Hạ Vy và Nguyễn Đình Toản (sinh viên Khoa Tin học, Trường Đại học Sư phạm – Đại học Đà Nẵng), dưới sự hướng dẫn của TS. Nguyễn Thị Ngọc Anh và sự hỗ trợ chuyên môn từ đơn vị thực tập The Bay City, đã thực hiện đề tài: "Nghiên cứu lập trình di động đa nền tảng và xây dựng ứng dụng cho thuê phòng trọ dựa trên sự kết hợp Flutter, Golang và GraphQL".
Mục tiêu cụ thể của đề tài được xác định bao gồm:
- Nghiên cứu phương pháp hỗ trợ hiệu quả cho người cho thuê trong việc đăng tin và quản lý phòng trọ.
- Xây dựng phương thức tìm kiếm phòng trọ tiện lợi, chính xác cho người đi thuê.
- Xây dựng giải pháp quản lý hợp đồng cho thuê và theo dõi các hóa đơn định kỳ (điện, nước, tiền phòng).
- Ứng dụng ngôn ngữ Dart và framework Flutter để phát triển ứng dụng di động đa nền tảng cho người dùng cuối (người thuê và chủ nhà).
- Ứng dụng ngôn ngữ Golang kết hợp cùng các công nghệ GraphQL và gRPC nhằm xây dựng hệ thống xử lý phía máy chủ (backend).
- Ứng dụng framework ReactJS để xây dựng hệ thống website quản trị (admin dashboard) dành cho người quản lý hệ thống.
Đối tượng và phạm vi nghiên cứu:
- Đối tượng nghiên cứu: Quy trình nghiệp vụ giữa người cho thuê và người đi thuê; thông tin hành chính địa lý (tỉnh/thành phố, quận/huyện, phường/xã); quy trình tạo lập hợp đồng thuê nhà; quy trình quản lý và thanh toán hóa đơn; tích hợp cổng thanh toán trực tuyến ví điện tử; hệ thống tin nhắn hội thoại cá nhân và hội thoại nhóm.
- Phạm vi nghiên cứu: Tập trung xây dựng hệ sinh thái phần mềm kết nối hai đối tượng người thuê và cho thuê; phạm vi kỹ thuật bao gồm Dart, JavaScript, Go, HTML, CSS kết hợp với Flutter, ReactJS, GraphQL, gRPC và hệ quản trị cơ sở dữ liệu PostgreSQL.
Cơ sở lý thuyết và phương pháp
Đề tài kết hợp giữa phương pháp nghiên cứu lý thuyết và phương pháp thực nghiệm phát triển phần mềm:
- Phương pháp lý thuyết: Thu thập, tổng hợp và phân tích tài liệu chuyên sâu về các ngôn ngữ lập trình (Dart, JavaScript, Golang), các framework phát triển giao diện (Flutter, ReactJS), các chuẩn kiến trúc và giao thức truyền tải dữ liệu (GraphQL, gRPC, HTTP/2, Protocol Buffers), cùng mô hình dữ liệu quan hệ PostgreSQL. Đồng thời, nghiên cứu phân tích nhu cầu thực tế của các nhóm người dùng trong hệ sinh thái nhà trọ.
- Phương pháp thực nghiệm: Thực hiện phân tích yêu cầu, đặc tả chức năng, mô hình hóa hệ thống bằng biểu đồ ca sử dụng (Use Case), biểu đồ hoạt động (Activity Diagram), biểu đồ tuần tự (Sequence Diagram), thiết kế cơ sở dữ liệu quan hệ, lập trình triển khai mã nguồn và thử nghiệm hệ thống hoàn chỉnh trên môi trường giả lập và thiết bị thực tế.
| Thành phần hệ thống |
Công nghệ / Ngôn ngữ |
Vai trò và đặc tính kỹ thuật chính |
| Ứng dụng di động (Mobile App) |
Dart, Flutter Framework |
Hỗ trợ đa nền tảng (iOS, Android); sử dụng cơ chế render đồ họa Skia qua OpenGL; biên dịch AOT/JIT; kiến trúc Widget reactive; cơ chế Hot Reload. |
| Trang quản trị (Web Admin) |
JavaScript, ReactJS |
Xây dựng giao diện đơn trang (SPA); quản lý cập nhật giao diện bằng Virtual DOM; cơ chế truyền dữ liệu một chiều (One-way data flow); cú pháp mở rộng JSX. |
| Hệ thống máy chủ (Backend) |
Golang |
Đảm bảo hiệu năng cao với cấu trúc biên dịch nhị phân; quản lý đa nhiệm nhẹ thông qua Goroutines và Mutex Locking; xử lý tác vụ nền tảng. |
| Giao thức API & Truy vấn |
GraphQL, gRPC, HTTP/2 |
GraphQL cho phép client truy vấn chính xác dữ liệu cần thiết qua một endpoint duy nhất; gRPC kết hợp Protobuf truyền tải dữ liệu nhị phân tốc độ cao, hỗ trợ Unary và Streaming RPC. |
| Cơ sở dữ liệu |
PostgreSQL (PostgetQL) |
Lưu trữ và quản lý cấu trúc dữ liệu quan hệ, ràng buộc toàn vẹn của toàn bộ các thực thể trong hệ thống. |
Thiết kế và triển khai
Hệ thống được thiết kế theo mô hình phân tầng rõ ràng, kết nối client-server thông qua các chuẩn giao tiếp hiện đại.
Kiến trúc công nghệ
- Tầng Client:
- Ứng dụng di động (Flutter): Phục vụ hai đối tượng chính là người thuê phòng và người cho thuê (tài khoản cá nhân và tài khoản doanh nghiệp). Giao tiếp với backend thông qua GraphQL API.
- Website quản trị (ReactJS): Phục vụ người quản lý hệ thống tổng để giám sát toàn bộ người dùng, tòa nhà, căn hộ và hợp đồng.
- Tầng Backend (Golang Service):
- Đóng vai trò xử lý logic nghiệp vụ, tiếp nhận các truy vấn GraphQL từ ứng dụng di động và API từ trang quản trị.
- Ứng dụng gRPC để giao tiếp nội bộ giữa các dịch vụ và tối ưu hóa xử lý qua giao thức HTTP/2 cùng bộ nén Protobuf.
- Tầng Dữ liệu:
- Hệ quản trị cơ sở dữ liệu PostgreSQL lưu trữ tập trung dữ liệu giao dịch, tài khoản và cấu trúc bất động sản.
Thiết kế cơ sở dữ liệu
Cơ sở dữ liệu của hệ thống được chuẩn hóa bao gồm 16 thực thể chính:
| Tên thực thể |
Diễn giải chức năng lưu trữ |
USER |
Thông tin tài khoản người dùng, phân quyền (người thuê, chủ nhà, quản trị viên). |
BUILDING |
Thông tin tòa nhà/dãy trọ (tên, địa chỉ, mô tả, vị trí bản đồ, tiện ích). |
APARTMENT |
Thông tin chi tiết từng căn hộ/phòng trọ thuộc tòa nhà (diện tích, giá thuê, tình trạng). |
CONTRACT |
Hợp đồng cho thuê được thiết lập giữa chủ nhà và khách thuê. |
BILL |
Hóa đơn thanh toán định kỳ (tiền phòng, tiền điện, tiền nước, phí dịch vụ). |
BUILDING_COMMENT |
Đánh giá và bình luận của người dùng về tòa nhà. |
Booking |
Thông tin giao dịch đặt cọc và yêu cầu giữ phòng. |
NOTIFICATION |
Dữ liệu thông báo hệ thống gửi đến người dùng. |
CHAT_ROOM |
Thông tin phòng trò chuyện (hội thoại 1-1 hoặc nhóm). |
CHAT_MESSAGE |
Nội dung tin nhắn trong phòng trò chuyện. |
CHAT_MEMBER |
Danh sách thành viên tham gia từng phòng trò chuyện. |
USER_MESSAGE |
Trạng thái tin nhắn đối với từng người dùng cụ thể. |
USER_CHAT_ROOM |
Bảng liên kết quản lý danh sách phòng trò chuyện của người dùng. |
CITY |
Dữ liệu danh mục Tỉnh / Thành phố. |
DISTRICT |
Dữ liệu danh mục Quận / Huyện. |
WARD |
Dữ liệu danh mục Phường / Xã. |
Nội dung chính theo từng chương
Chương 1: Cơ sở lý thuyết
Chương 1 hệ thống hóa toàn bộ các nền tảng công nghệ, ngôn ngữ lập trình và giao thức được áp dụng trong đề tài:
- Ngôn ngữ Dart & Framework Flutter: Lịch sử hình thành ngôn ngữ Dart từ năm 2011 bởi Google; phân tích các tính năng an toàn kiểu (sound type system), hỗ trợ đa luồng bằng Isolates, hai cơ chế biên dịch AOT và JIT. Phân tích kiến trúc phân tầng của Flutter (C++ engine, Skia rendering, reactive widgets, Material/Cupertino design) cùng ưu thế về tính năng Hot Reload.
- JavaScript & ReactJS: Trình bày nguyên lý hoạt động của JavaScript trên môi trường trình duyệt và máy khách; kiến trúc của thư viện ReactJS với công nghệ Virtual DOM giúp tối ưu hiệu năng render, cú pháp JSX và luồng dữ liệu một chiều (one-way data flow) thông qua State và Props.
- Ngôn ngữ Golang: Lịch sử phát triển tại Google (Robert Griesemer, Rob Pike, Ken Thompson); đặc điểm biên dịch trực tiếp sang mã máy, cơ chế đa nhiệm goroutines nhẹ và an toàn bộ nhớ.
- Chuẩn giao tiếp gRPC và GraphQL: Giới thiệu gRPC với giao thức HTTP/2, cơ chế multiplexing, nén header và định dạng nhị phân Protocol Buffers. Trình bày ngôn ngữ truy vấn GraphQL với cấu trúc Queries, Resolvers và Schema giúp tối ưu lượng dữ liệu truyền tải giữa máy khách và máy chủ.
- Hệ quản trị PostgreSQL: Khái niệm, tính năng an toàn dữ liệu và so sánh đặc điểm kỹ thuật giữa PostgreSQL và MySQL.
Chương 2: Phân tích và thiết kế hệ thống
Chương 2 tập trung vào việc mô hình hóa các yêu cầu bài toán thành thiết kế kỹ thuật chi tiết:
- Phân tích yêu cầu và đặc tả hệ thống: Định nghĩa rõ ràng luồng nghiệp vụ của 3 tác nhân chính (Khách thuê trọ, Doanh nghiệp/Chủ cho thuê, Quản trị viên hệ thống).
- Hệ thống biểu đồ Use Case: Xây dựng biểu đồ ca sử dụng tổng thể hệ thống, biểu đồ quản lý dành riêng cho người quản trị trên web, và biểu đồ nghiệp vụ nhắn tin liên lạc.
- Hệ thống biểu đồ Activity (24 biểu đồ hoạt động): Mô hình hóa chi tiết các luồng xử lý: Đăng ký/đăng nhập/khôi phục mật khẩu; thêm/sửa/xóa tòa nhà và căn hộ; tạo/chỉnh sửa/xóa hóa đơn; quy trình đặt cọc, xác nhận đặt cọc và rút lại tiền cọc; quy trình thanh toán hóa đơn và xác nhận thanh toán; quy trình tạo cuộc trò chuyện (1-1 và nhóm), gửi tin nhắn văn bản, gửi hình ảnh và xóa tin nhắn.
- Hệ thống biểu đồ Sequence (12 biểu đồ tuần tự): Thiết lập tương tác chi tiết giữa Actor, Giao diện (Boundary), Bộ điều khiển (Controller/Handler) và Cơ sở dữ liệu cho các tác vụ: xác thực người dùng, quản trị bất động sản, đặt phòng và quản lý tài chính/hóa đơn.
- Thiết kế dữ liệu: Xây dựng bảng thuộc tính chi tiết cho 16 thực thể dữ liệu, biểu đồ lớp (Class Diagram) và sơ đồ quan hệ thực thể (ERD).
Chương 3: Cài đặt chương trình và kết quả
Chương 3 trình bày các bước thiết lập môi trường phát triển và kết quả triển khai thực tế của hệ thống với 38 nhóm giao diện chức năng:
- Cài đặt hệ thống: Cấu hình môi trường dịch vụ backend Golang, cơ sở dữ liệu PostgreSQL, đóng gói ứng dụng Flutter trên nền tảng di động và triển khai ứng dụng quản trị ReactJS.
- Kết quả giao diện ứng dụng di động (Flutter):
- Màn hình khởi động, đăng ký, đăng nhập và đăng ký tài khoản doanh nghiệp.
- Giao diện tìm kiếm, bộ lọc tùy chỉnh, bản đồ định vị vị trí tòa nhà và giao diện xem chi tiết phòng/căn hộ.
- Giao diện đặt cọc phòng trực tuyến, rút tiền đặt cọc và danh sách hợp đồng điện tử.
- Giao diện quản lý tài chính của chủ trọ: lập hóa đơn điện nước/tiền phòng, theo dõi danh sách hóa đơn, xác nhận trạng thái thanh toán.
- Module thanh toán trực tuyến hỗ trợ liên kết cổng ví điện tử.
- Module nhắn tin thời gian thực: danh sách cuộc trò chuyện, phòng chat 1-1, phòng chat nhóm, quản lý thành viên và gửi tệp hình ảnh.
- Quản lý thông tin cá nhân và cài đặt tài khoản người dùng.
- Kết quả giao diện website quản trị (ReactJS):
- Trang đăng nhập trang quản trị.
- Bảng điều khiển quản lý danh sách người dùng (thêm, sửa, khóa, xóa tài khoản).
- Bảng điều khiển quản lý danh mục tòa nhà và danh sách căn hộ trên toàn hệ thống.
- Giao diện kiểm soát, theo dõi tình trạng và chi tiết hợp đồng thuê trọ.
Chương 4: Kết luận và hướng phát triển
- Đánh giá tổng kết các mục tiêu đã hoàn thành của đồ án.
- Phân tích các mặt hạn chế còn tồn đọng trong quá trình thử nghiệm.
- Đề xuất các định hướng mở rộng chức năng và tối ưu hóa hệ thống trong tương lai.
Kết quả và đóng góp
Kết quả triển khai thực tế
- Xây dựng hoàn chỉnh ứng dụng di động đa nền tảng (iOS/Android) đáp ứng đầy đủ chu trình nghiệp vụ tìm kiếm, thuê phòng, ký hợp đồng và quản lý thanh toán.
- Thiết lập hệ thống backend hoạt động ổn định trên nền tảng Golang, cung cấp GraphQL API cho client di động và xử lý dữ liệu tập trung qua PostgreSQL.
- Xây dựng cổng thông tin quản trị dạng Web Application với ReactJS cho phép giám sát toàn bộ hoạt động hệ thống.
- Tích hợp thành công chức năng thanh toán hóa đơn trực tuyến và hệ thống trao đổi thông điệp trực tiếp (chat 1-1, chat nhóm kèm hình ảnh) ngay trong ứng dụng.
Đóng góp của đồ án
- Về mặt quy trình: Chuẩn hóa quy trình giao dịch thuê trọ từ bước tìm kiếm thông tin theo vị trí địa lý, thỏa thuận đặt cọc, thiết lập hợp đồng đến thanh toán hóa đơn hàng tháng, giúp minh bạch hóa chi phí và giảm thiểu tranh chấp giữa hai bên.
- Về mặt kỹ thuật: Minh chứng tính khả thi và hiệu quả của việc kết hợp kiến trúc hiện đại (Flutter + Golang + GraphQL/gRPC) trong việc xây dựng các ứng dụng di động đòi hỏi hiệu năng cao, khả năng phản hồi thời gian thực và cấu trúc dữ liệu linh hoạt.
Hạn chế và hướng nghiên cứu tiếp
- Hạn chế: Theo phạm vi nghiên cứu được ghi nhận tại thời điểm thực hiện báo cáo (tháng 02 - tháng 04/2022), ứng dụng chủ yếu tập trung vào các luồng nghiệp vụ cốt lõi và kiểm thử trên các tập dữ liệu thực nghiệm; một số tính năng mở rộng cần tiếp tục được theo dõi và tối ưu hóa thêm khi vận hành thực tế với tải lượng lớn.
- Hướng phát triển: Tiếp tục hoàn thiện các chức năng nâng cao của ứng dụng, nâng cấp các tiện ích quản trị tài chính chuyên sâu cho chủ nhà, và mở rộng kết nối thêm các cổng thanh toán/dịch vụ bản đồ để nâng cao trải nghiệm người dùng.
Giá trị tham khảo
Đề tài là tài liệu tham khảo hữu ích cho:
- Sinh viên ngành Công nghệ thông tin, Kỹ thuật phần mềm đang làm đồ án tốt nghiệp hoặc nghiên cứu về lập trình di động đa nền tảng (Flutter/Dart).
- Các lập trình viên muốn tìm hiểu mô hình phát triển backend hiệu năng cao bằng ngôn ngữ Golang kết hợp với chuẩn API GraphQL và giao thức gRPC.
- Người phát triển hệ thống cần tài liệu tham khảo về quy trình phân tích thiết kế hệ thống thông tin (Use Case, Activity, Sequence, ERD) trong bài toán quản lý bất động sản và thanh toán dịch vụ.
Câu hỏi thường gặp
1. Đề tài sử dụng những công nghệ cốt lõi nào cho từng thành phần của hệ thống?
Hệ thống sử dụng ngôn ngữ Dart và framework Flutter để xây dựng ứng dụng di động đa nền tảng; ngôn ngữ Golang kết hợp cùng GraphQL và gRPC để phát triển backend; framework ReactJS (JavaScript) để xây dựng website quản trị; và PostgreSQL (PostgetQL) đóng vai trò hệ quản trị cơ sở dữ liệu.
2. Hệ thống hỗ trợ những vai trò người dùng (actor) nào?
Hệ thống phân định 3 nhóm vai trò chính: Người đi thuê trọ/căn hộ (tìm kiếm, đặt cọc, thanh toán hóa đơn, xem hợp đồng, chat), Người cho thuê trọ/doanh nghiệp (đăng tải phòng, duyệt đặt cọc, lập và quản lý hóa đơn, quản lý hợp đồng, chat), và Người quản trị hệ thống (quản lý toàn diện tài khoản người dùng, tòa nhà, căn hộ và hợp đồng thông qua trang web admin).
3. Module tài chính và thanh toán trong ứng dụng được thiết kế như thế nào?
Module này cho phép chủ nhà lập các hóa đơn định kỳ bao gồm tiền phòng, tiền điện, tiền nước và các khoản phí dịch vụ khác. Người thuê có thể theo dõi chi tiết hóa đơn, thực hiện thanh toán trực tuyến qua cổng ví điện tử và nhận thông báo xác nhận thành công. Trạng thái thanh toán được lưu vết trên hệ thống để đảm bảo tính minh bạch.
4. Cơ sở dữ liệu của hệ thống quản lý các thực thể chính nào?
Cơ sở dữ liệu bao gồm 16 thực thể: USER, BUILDING, APARTMENT, CONTRACT, BILL, BUILDING_COMMENT, Booking, NOTIFICATION, CHAT_ROOM, CHAT_MESSAGE, CHAT_MEMBER, USER_MESSAGE, USER_CHAT_ROOM, CITY, DISTRICT, và WARD.
Kết luận
Báo cáo thực tập tốt nghiệp của nhóm tác giả Trịnh Nhật Hạ Vy và Nguyễn Đình Toản đã giải quyết bài toán thực tế trong lĩnh vực quản lý và cho thuê phòng trọ thông qua giải pháp công nghệ toàn diện. Việc phối hợp linh hoạt giữa Flutter trên giao diện di động, Golang cùng GraphQL/gRPC tại máy chủ và ReactJS trên nền tảng web đã tạo nên một hệ sinh thái phần mềm hoàn chỉnh, đáp ứng tốt nhu cầu tìm kiếm, quản lý hợp đồng, giao tiếp và thanh toán hóa đơn trực tuyến. Đề tài cung cấp cơ sở kỹ thuật và thực tiễn vững chắc cho việc phát triển các ứng dụng di động đa nền tảng phục vụ đời sống xã hội.