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

Đề tài "Xây dựng website thuê phòng trọ" (tên khác được tác giả đề cập trong phần mở đầu là "Xây dựng website đăng tin và tìm kiếm phòng trọ tại Đà Nẵng") do sinh viên Lê Huỳnh Bảo, lớp 19T1, Khoa Công nghệ Số – Trường Đại học Sư phạm Kỹ thuật (Đại học Đà Nẵng) thực hiện dưới sự hướng dẫn của ThS. Nguyễn Văn Phát, hoàn thành vào tháng 01/2024.

Lý do chọn đề tài xuất phát từ thực trạng phát triển đô thị tại thành phố Đà Nẵng – nơi có quy mô dân số trên 1,1 triệu người. Đà Nẵng ghi nhận sự gia tăng nhanh chóng của các nhóm dân cư nhập cư, lực lượng công nhân tại các khu công nghiệp và đặc biệt là số lượng lớn sinh viên theo học tại hệ thống các trường đại học, cao đẳng. Phần lớn sinh viên và thí sinh dự thi tuyển sinh xuất thân từ khu vực nông thôn, ngoại tỉnh, gặp nhiều khó khăn trong việc tiếp cận các địa chỉ thuê trọ phù hợp và an toàn. Đồng thời, sự phát triển kinh tế và thị trường doanh nghiệp tại Đà Nẵng cũng làm nảy sinh nhu cầu lớn về thuê mướn mặt bằng làm địa điểm giao dịch và văn phòng làm việc. Mặc dù hạ tầng Internet và thói quen tìm kiếm thông tin trực tuyến đã phổ biến, việc kết nối trực tiếp, minh bạch giữa người thuê và chủ nhà trọ vẫn chưa đạt hiệu quả tối ưu.

Mục tiêu nghiên cứu của đồ án được xác định cụ thể thông qua việc xây dựng một hệ thống website phục vụ bốn nhóm đối tượng người dùng với các nhiệm vụ chức năng tương ứng:

  1. Đối với khách vãng lai:
    • Cung cấp chức năng tra cứu, tìm kiếm phòng trọ theo các tiêu chí: khu vực địa lý, mức giá và loại phòng tại thành phố Đà Nẵng.
    • Hỗ trợ chức năng đăng ký tài khoản thành viên.
  2. Đối với khách thành viên:
    • Đăng nhập, đăng xuất và quản lý cập nhật thông tin tài khoản cá nhân.
    • Xem chi tiết thông tin phòng trọ, gửi bình luận và đánh giá bài đăng.
    • Thực hiện quy trình đặt phòng và theo dõi tình trạng đặt chỗ.
  3. Đối với chủ trọ:
    • Quản lý tài khoản cá nhân, đổi mật khẩu.
    • Đăng tin cho thuê và cập nhật, chỉnh sửa thông tin phòng trọ.
    • Xóa bài đăng hoặc ẩn tin khi phòng đã được thuê hoặc ngừng cho thuê.
    • Cập nhật giấy tờ chứng minh sở hữu/kinh doanh để xác thực.
    • Xem danh sách khách hàng đặt phòng và xử lý duyệt hoặc xóa yêu cầu đặt phòng.
    • Chuyển đổi trạng thái phòng giữa các mức: Còn trống – Đang đặt – Đã thuê.
  4. Đối với quản trị viên (Admin):
    • Kiểm duyệt các bài đăng mới trước khi hiển thị công khai.
    • Quản lý tài khoản người dùng, khóa hoặc xóa vĩnh viễn các tài khoản vi phạm.
    • Cập nhật thời gian đặt phòng.
    • Thống kê bài đăng đã duyệt, thống kê lượng người dùng đăng ký và danh sách chủ trọ có tần suất đăng bài nhiều nhất.

Đối tượng nghiên cứu của đồ án là người nhập cư, công nhân, học sinh và sinh viên có nhu cầu sinh sống, học tập và làm việc trên địa bàn thành phố Đà Nẵng. Phạm vi nghiên cứu về mặt không gian tập trung toàn bộ tại khu vực thành phố Đà Nẵng; phạm vi thời gian nghiên cứu và hoàn thành nghiệm thu đồ án là tháng 01/2024.


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

Đồ án xây dựng dựa trên nền tảng lý thuyết phát triển ứng dụng web hiện đại kết hợp cơ sở dữ liệu hướng tài liệu. Khung công nghệ và lý thuyết được tác giả hệ thống hóa bao gồm:

  • Nền tảng Node.js: Được xây dựng dựa trên Chrome's V8 JavaScript runtime (do Ryan Dahl phát triển năm 2009). Node.js đóng vai trò môi trường thực thi JavaScript phía máy chủ (Server-side runtime), vận hành theo mô hình xử lý bất đồng bộ (Asynchronous) và điều khiển theo sự kiện (Event-driven). Đồ án phân tích ưu điểm về thông lượng xử lý các kết nối đồng thời và hệ sinh thái mô-đun phong phú, đồng thời ghi nhận nhược điểm tiêu tốn tài nguyên xử lý đối với các tác vụ chuyên sâu về CPU.
  • Thư viện React (ReactJS): Thư viện JavaScript mã nguồn mở phục vụ xây dựng giao diện người dùng do Facebook và Instagram phát triển. Đồ án khai thác cơ chế DOM ảo (Virtual DOM) để tối ưu hóa hiệu năng render lại giao diện, cú pháp JSX kết hợp mã HTML và logic JavaScript, cũng như khả năng render phía máy chủ (Server-side rendering). Hạn chế được tác giả chỉ ra là React thuần túy chỉ đảm nhận tầng View (không phải kiến trúc MVC hoàn chỉnh như Angular), đòi hỏi tích hợp thêm các thư viện bổ trợ.
  • Hệ quản trị cơ sở dữ liệu NoSQL MongoDB: Hệ quản trị cơ sở dữ liệu hướng tài liệu mã nguồn mở được phát triển bởi MongoDB Inc. (phát hành theo giấy phép SSPL). Dữ liệu được tổ chức dưới dạng collection và document (định dạng JSON/BSON) thay cho mô hình table và row của RDBMS. Hệ thống khai thác tính linh hoạt của cấu trúc phi quan hệ, trường khóa tự sinh _id được tự động đánh chỉ mục (index), và cơ chế lưu trữ đệm bản ghi trên RAM để tăng tốc độ truy vấn find, insert, update, delete. Về mặt nhược điểm, tác giả nêu rõ việc thiếu ràng buộc quan hệ chặt chẽ dễ dẫn đến dư thừa dữ liệu (do lặp lại trường key), cùng rủi ro mất mát dữ liệu nếu gặp sự cố nguồn điện do cơ chế đồng bộ định kỳ khoảng 60 giây từ bộ nhớ RAM xuống ổ đĩa cứng vật lý.
  • Công cụ hỗ trợ: Visual Studio Code (môi trường soạn thảo mã nguồn tích hợp công cụ gỡ lỗi và quản lý phiên bản Git) và phần mềm StarUML (hỗ trợ phân tích, xây dựng các mô hình Use-case, Robustness, Activity Diagram và ERD).

Phương pháp nghiên cứu trong đồ án được triển khai qua ba nhóm phương pháp:

  1. Phương pháp nghiên cứu lý thuyết: Thu thập, phân tích tài liệu chuyên ngành, sách kỹ thuật và tài liệu trực tuyến về kiến trúc ứng dụng web Full-stack.
  2. Phương pháp khảo sát thực tế và thu thập dữ liệu ban đầu: Tổng hợp thông tin từ nền tảng thương mại điện tử Chợ Tốt, khảo sát thực tế quy trình tìm phòng trọ tại Đà Nẵng, đồng thời tham khảo cấu trúc dữ liệu và hoạt động trao đổi trên các hội nhóm, fanpage cho thuê phòng trọ tại địa bàn Đà Nẵng.
  3. Phương pháp triển khai thực nghiệm: Tiến hành mô hình hóa phân tích thiết kế hệ thống theo chuẩn UML, thiết kế lược đồ cơ sở dữ liệu trên MongoDB và lập trình hoàn thiện các mô-đun chức năng của phần mềm.

Thiết kế và triển khai

Hệ thống được thiết kế theo kiến trúc hướng người dùng với sự phân tách rõ ràng quyền hạn giữa các tác nhân thông qua hệ thống sơ đồ ca sử dụng (Use-case Diagram), sơ đồ hoạt động (Activity Diagram), sơ đồ Robustness và sơ đồ thực thể quan hệ (ERD).

Thiết kế kịch bản các ca sử dụng chính

Tên Ca sử dụng Tác nhân thực hiện Điều kiện đầu vào Luồng sự kiện chính Kết quả đầu ra Xử lý ngoại lệ / Rẽ nhánh
Đăng bài Chủ trọ Đăng nhập tài khoản; chọn mục "Đăng tin" 1. Nhập mô tả
2. Chọn tải ảnh lên hoặc chụp trực tiếp
3. Bấm "Đăng bài"
Bài đăng hiển thị trên trang chủ sau kiểm duyệt Nếu bỏ trống nội dung, hệ thống dừng lại và yêu cầu nhập
Chỉnh sửa bài đăng Chủ trọ Đã đăng nhập; tồn tại bài đăng của bản thân 1. Vào "Bài đăng của tôi"
2. Thay đổi nội dung, ảnh
3. Bấm "Cập nhật"
Thông báo "Cập nhật thành công", lưu thông tin mới Người dùng nhấn "Hủy", hệ thống hủy thao tác và quay lại trang chủ
Xóa bài đăng Chủ trọ Đã đăng nhập; tồn tại bài đăng cần xóa 1. Vào quản lý bài đăng cá nhân
2. Nhấn nút "Xóa bài"
3. Hệ thống xóa dữ liệu
Bài đăng bị gỡ khỏi hệ thống Chọn "Hủy" thì dừng ca sử dụng
Xóa đặt phòng Chủ trọ Đã đăng nhập; có khách đã đặt nhưng không thuê 1. Xem danh sách đặt phòng
2. Nhấn xóa người đặt phòng
3. Số lượng phòng tăng lên 1
Hủy bản ghi đặt phòng của khách Không có
Đặt phòng Khách thành viên Đã đăng nhập; chọn bài đăng phòng trọ cụ thể 1. Xem chi tiết bài đăng
2. Chọn đặt phòng và đặt cọc 50%
3. Nhấn "Hoàn tất đặt phòng"
Tạo bản ghi đặt phòng, chuyển trạng thái chờ chủ trọ duyệt Tự động hủy đặt phòng nếu chủ trọ không duyệt
Tìm kiếm – Lọc Khách vãng lai, Khách thành viên Nhập từ khóa, chọn tiêu chí lọc 1. Chọn danh mục, khu vực, khoảng giá
2. Hệ thống kiểm tra và kết xuất
Danh sách bài đăng phù hợp với tiêu chí lọc Không có
Đăng nhập Khách thành viên, Chủ trọ, Quản trị viên Tài khoản Gmail và Mật khẩu 1. Nhập Email và Password
2. Nhấn "Đăng nhập"
3. Xác thực tài khoản
Truy cập hệ thống theo đúng phân quyền Nhập sai/quên mật khẩu: yêu cầu nhập lại hoặc gửi lại mật khẩu
Quản trị viên Quản trị viên (Admin) Đăng nhập tài khoản Admin 1. Quản lý tài khoản, bài đăng
2. Cảnh cáo hoặc khóa tài khoản
3. Xem thống kê, lịch sử nạp tiền
Thực hiện cảnh cáo, khóa người dùng vi phạm Không có

Thiết kế cơ sở dữ liệu (MongoDB Collections)

Hệ thống lưu trữ dữ liệu thông qua 4 collection chính được tác giả thiết kế chi tiết như sau:

1. Bảng Users (Quản lý tài khoản và phân quyền)

Thuộc tính Giải thích ngữ nghĩa Kiểu dữ liệu Ghi chú
ID Mã định danh người dùng ObjectId Khóa chính
Name Tên người dùng String Lưu họ tên
email Địa chỉ thư điện tử String Dùng đăng nhập
password Mật khẩu xác thực String Chuỗi mật khẩu
acceptBooker Quyền duyệt/chuyên viên Boolean Cờ xác nhận chuyên viên
avatar Ảnh đại diện String Đường dẫn ảnh
img Tập hợp hình ảnh tài liệu Array Mảng ảnh xác thực
listProject Danh sách dự án/bài liên kết Array Mảng dữ liệu
idAdmin Cờ nhận diện quyền quản trị Boolean Xác thực phân cấp
isAdmin Xác định vai trò Quản trị viên Boolean Phân quyền Admin

2. Bảng Places (Thông tin bài đăng và phòng trọ)

Thuộc tính Giải thích ngữ nghĩa Kiểu dữ liệu Ghi chú
ID Mã bài đăng/địa điểm ObjectId Khóa chính
owner Mã định danh chủ sở hữu ObjectId Khóa ngoại liên kết Users
title Tiêu đề bài đăng String Tên bài viết
address Địa chỉ phòng trọ chi tiết String Vị trí thực tế
photos Danh sách hình ảnh phòng trọ Array Mảng đường dẫn ảnh
description Nội dung mô tả chi tiết String Thông tin chi tiết phòng
perks Danh mục tiện ích đi kèm Array Tiện nghi phòng
TypeRoom Phân loại phòng trọ String Loại hình cho thuê
Price Giá thuê phòng trọ Int Đơn vị tiền tệ
extraInfo Thông tin bổ sung String Ghi chú thêm
Status Trạng thái hiển thị bài đăng Boolean Bật/tắt trạng thái
memberStatus Trạng thái hội viên Boolean Xác thực thành viên
isExpired Trạng thái hết hạn hiển thị Boolean Kiểm tra hiệu lực
isVip Trạng thái tin VIP Boolean Đánh dấu ưu tiên
packageShort Cấu hình gói thuê ngắn hạn Object Thông tin gói
packageLong Cấu hình gói thuê dài hạn Object Thông tin gói
personBooker Người duyệt đặt phòng ObjectID Liên kết quản lý
areas Khu vực quận/huyện String Phục vụ tìm kiếm
numberBed Số lượng giường ngủ String Quy mô phòng
dateCurrent Ngày ghi nhận hiện tại Date Thời điểm cập nhật
reviews Danh sách đánh giá bài đăng Array Bình luận, sao đánh giá
createdAt Thời gian tạo bài viết Date Dấu thời gian khởi tạo
updatedAt Thời gian cập nhật gần nhất Date Dấu thời gian chỉnh sửa

3. Bảng Bookings (Giao dịch đặt phòng)

Thuộc tính Giải thích ngữ nghĩa Kiểu dữ liệu Ghi chú
ID Mã giao dịch đặt phòng ObjectId Khóa chính
Place Mã phòng trọ được đặt ObjectId Khóa ngoại tới Places
User Mã người dùng đặt phòng ObjectId Khóa ngoại tới Users
Usermain Mã người dùng chính ObjectId Khóa ngoại liên kết
booker Người thực hiện thao tác đặt ObjectId Khóa ngoại liên kết
checkIn Thời điểm nhận phòng Null Quản lý lịch trình
checkOut Thời điểm trả phòng Null Quản lý lịch trình
TypeOption Phương thức/gói thuê String Tùy chọn thời hạn
numberOfNights Số đêm lưu trú dự kiến String Thời gian ở
Status Trạng thái phê duyệt/thanh toán String Trạng thái xử lý
Price Tổng chi phí đặt phòng Int Số tiền giao dịch
service Các dịch vụ kèm theo Array Mảng dịch vụ chọn
reviews Đánh giá sau đặt phòng Array Phản hồi của khách

4. Bảng Invoices (Hóa đơn và lịch sử giao dịch tiền)

Thuộc tính Giải thích ngữ nghĩa Kiểu dữ liệu Ghi chú
ID Mã hóa đơn giao dịch ObjectId Khóa chính
Name Tên hóa đơn/địa điểm phát sinh String Tiêu đề hóa đơn
IDUser Mã người dùng thanh toán String Liên kết tài khoản
Coin Số tiền/xu giao dịch String Định lượng thanh toán
note Ghi chú nội dung nạp/thanh toán String Mô tả giao dịch
status Trạng thái giao dịch hóa đơn String Tình trạng xử lý
type Phân loại hóa đơn String Hình thức nạp/trừ
TypeOption Loại gói thanh toán String Tùy chọn giao dịch
createAT Thời điểm lập hóa đơn Date Ngày khởi tạo
UpdateAT Thời điểm cập nhật hóa đơn Date Ngày điều chỉnh

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ộ kiến thức tảng nền về các công nghệ được lựa chọn trong quá trình phát triển dự án. Cụ thể:

  • Phân tích sâu kiến trúc JavaScript runtime của Node.js, cơ chế vận hành của động cơ Google V8, vòng lặp sự kiện (Event Loop) và mô hình I/O phi chặn (Non-blocking I/O). Tác giả so sánh đặc tính của Node.js với các ngôn ngữ kịch bản truyền thống như PHP, Ruby, Python, đồng thời chỉ ra phạm vi ứng dụng thích hợp cho các hệ thống thời gian thực (real-time) và nhược điểm khi xử lý các tác vụ tính toán nặng trên CPU.
  • Trình bày nguyên lý hoạt động của ReactJS, tập trung vào cấu trúc component độc lập, mô hình cây DOM ảo nhằm giảm thiểu thao tác cập nhật trực tiếp lên DOM trình duyệt, và công cụ chuyển đổi cú pháp JSX. Tác giả đưa ra so sánh kích thước thư viện React (khoảng 35 KB) so với Angular (khoảng 39 KB), qua đó xác định tính gọn nhẹ nhưng cũng thừa nhận thách thức cấu hình khi thiếu vắng kiến trúc Controller và Model mặc định.
  • Khái quát hệ thống cơ sở dữ liệu MongoDB, làm rõ sự tương đồng và khác biệt giữa các khái niệm collection/document so với table/row trong hệ thống RDBMS truyền thống. Phân tích cơ chế bộ nhớ đệm RAM và kiểm tra đánh giá tốc độ xử lý truy vấn đọc/ghi của MongoDB (có thể nhanh hơn nhiều lần so với các hệ quản trị quan hệ trong một số điều kiện thử nghiệm).
  • Giới thiệu môi trường phát triển Visual Studio Code với các tính năng: tích hợp Git, công cụ gỡ lỗi trực quan, hệ thống IntelliSense và cửa sổ dòng lệnh Terminal tích hợp.

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

Chương 2 chiếm dung lượng lớn nhất trong đồ án, trình bày quy trình mô hình hóa hệ thống từ khảo sát yêu cầu đến chi tiết cơ sở dữ liệu:

  • Xác định chi tiết luồng nghiệp vụ và phân rã các yêu cầu phi chức năng (bảo mật, hiệu năng tìm kiếm, tính toàn vẹn dữ liệu) cùng yêu cầu chức năng cho từng nhóm người dùng.
  • Thiết lập sơ đồ tổng thể Use-case phân bổ cho 4 nhóm tác nhân (Khách vãng lai, Khách thành viên, Chủ trọ, Quản trị viên).
  • Chi tiết hóa 8 kịch bản ca sử dụng then chốt bằng các bảng mô tả cụ thể về đầu vào, đầu ra, luồng thực hiện chính, các luồng phát sinh và điều kiện ngoại lệ (bao gồm: đăng bài, chỉnh sửa bài đăng, xóa bài, xóa đặt phòng, đặt phòng, tìm kiếm – lọc, đăng nhập và quản lý admin).
  • Xây dựng 4 sơ đồ phân tích Robustness (cho các tác vụ đăng bài, duyệt bài, đặt phòng, tìm kiếm) nhằm phân định giao diện điều khiển (Boundary), lớp điều khiển (Control) và thực thể dữ liệu (Entity).
  • Xây dựng 9 sơ đồ hoạt động (Activity Diagrams) chuẩn hóa tuần tự các thao tác: đăng nhập đa vai trò, đăng tin phòng trọ, xóa bài đăng, chỉnh sửa bài đăng, tìm kiếm, đặt phòng, hủy đặt phòng, duyệt bài đăng của admin, và quản lý tài khoản người dùng vi phạm.
  • Thiết kế mô hình dữ liệu thực thể quan hệ ERD và chuẩn hóa chi tiết thuộc tính, kiểu dữ liệu, ràng buộc khóa chính/khóa ngoại của 4 bảng cơ sở dữ liệu MongoDB: Bookings, Places, Invoices, Users.

Chương 3: Xây dựng chương trình

Chương 3 tập trung thuyết minh sản phẩm thực nghiệm thông qua các giao diện ứng dụng thực tế đã được lập trình hoàn thiện:

  • Tổng hợp các công cụ triển khai phần mềm gồm bộ công nghệ Node.js, ReactJS, MongoDB, Visual Studio Code và StarUML.
  • Trình bày hệ thống giao diện người dùng:
    • Giao diện trang chủ: Tích hợp thanh tìm kiếm, bộ lọc trực quan theo mức giá, loại phòng và vị trí địa lý tại các quận, huyện của thành phố Đà Nẵng.
    • Giao diện chi tiết bài đăng: Cung cấp thông tin địa chỉ cụ thể, đơn giá, diện tích sàn, tổng quan tiện nghi, dịch vụ đi kèm, khu vực hiển thị đánh giá của khách thuê trước đó, cùng nút chức năng đặt phòng.
    • Giao diện thuê phòng trọ: Cung cấp tùy chọn cấu hình đặt phòng theo 2 hình thức: gói ngắn hạn hoặc gói dài hạn, thực hiện cam kết đặt cọc 50%.
    • Hệ thống giao diện bổ trợ khác: Giao diện quản lý phòng trọ và bài đăng của chủ trọ; giao diện tài khoản cá nhân; danh sách nhà thuê đã đặt; giao diện quản trị viên (duyệt tin, thống kê, kiểm soát tài khoản); giao diện lịch sử nạp tiền; và giao diện phân hệ chuyên viên (tạo và xác nhận hợp đồng thuê phòng trọ/nhà ở).

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

Đồ án ghi nhận các kết quả cụ thể về mặt kỹ thuật và giải pháp ứng dụng:

  • Kết quả xây dựng phần mềm:
    • Hoàn thiện website cho thuê phòng trọ hoạt động trên nền tảng Full-stack JavaScript (Node.js phía Backend và ReactJS phía Frontend), kết nối cơ sở dữ liệu MongoDB.
    • Xây dựng thành công cơ chế phân quyền độc lập cho 4 tác nhân chính: Khách vãng lai, Khách thành viên, Chủ trọ và Quản trị viên, cùng chức năng nghiệp vụ hợp đồng của chuyên viên.
    • Hiện thực hóa quy trình nghiệp vụ đặt phòng trực tuyến có cơ chế đặt cọc 50% chi phí phòng thông qua hệ thống hoặc trực tiếp/ví điện tử MoMo; tự động đồng bộ và cập nhật trạng thái phòng giữa 3 mức: Còn trống – Đang đặt – Đã thuê.
    • Thiết lập bảng lưu trữ dữ liệu hoàn chỉnh gồm 4 collections (Users, Places, Bookings, Invoices) đảm bảo lưu trữ toàn diện thông tin bài đăng, tài khoản người dùng, hợp đồng và hóa đơn lịch sử thanh toán.
    • Triển khai chức năng thống kê dành riêng cho quản trị viên, cho phép trích xuất số lượng bài đăng đã kiểm duyệt, tổng số người dùng đăng ký và danh sách chủ trọ có số lượng bài đăng nhiều nhất.
  • Giải pháp và đóng góp của đề tài:
    • Đề xuất một nền tảng chuyên biệt hóa dữ liệu tìm kiếm phòng trọ gắn liền với đặc thù địa bàn thành phố Đà Nẵng, khắc phục tình trạng phân mảnh thông tin trên các diễn đàn mạng xã hội tự phát.
    • Cung cấp cơ chế xác thực minh bạch qua giấy tờ chứng minh của chủ trọ và chức năng kiểm duyệt bài đăng nghiêm ngặt từ Quản trị viên, hỗ trợ cảnh cáo, xử phạt hoặc khóa vĩnh viễn các tài khoản đăng tải thông tin sai lệch.

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

Dựa trên phân tích kỹ thuật và phạm vi thực tế mà tác giả đã trình bày trong báo cáo đồ án, các hạn chế và hướng phát triển được xác định như sau:

  • Hạn chế kỹ thuật và hệ thống:
    • Nền tảng Node.js vận hành đơn luồng gặp hạn chế hiệu năng nếu hệ thống phải xử lý các tác vụ phức tạp đòi hỏi nhiều tài nguyên tính toán từ CPU.
    • Phía giao diện ReactJS chỉ xử lý tầng View, chưa có kiến trúc ràng buộc dữ liệu hai chiều (two-way binding) tự động như các framework toàn diện, đòi hỏi quản lý trạng thái thủ công.
    • Cơ sở dữ liệu MongoDB sử dụng mô hình document tự do, việc thiếu vắng các ràng buộc toàn vẹn khóa ngoại chặt chẽ ở cấp độ hệ quản trị khiến dữ liệu dễ bị trùng lặp trường khóa (key), làm tăng dung lượng bộ nhớ. Ngoài ra, chu kỳ lưu dữ liệu từ RAM xuống ổ đĩa vật lý (độ trễ khoảng 60 giây) tiềm ẩn nguy cơ thất thoát dữ liệu giao dịch nếu xảy ra sự cố đột ngột về hạ tầng máy chủ hoặc mất nguồn điện.
    • Do hạn chế về mặt thời gian và kiến thức cá nhân trong khuôn khổ đồ án tốt nghiệp cử nhân, một số quy trình mở rộng và tối ưu hóa hệ thống chưa được kiểm thử toàn diện ở quy mô tải thực tế lớn.
  • Hướng phát triển tiếp theo:
    • Nâng cấp và hoàn thiện thêm các tính năng mở rộng hệ thống còn thiếu sót được phát hiện trong quá trình vận hành thử nghiệm.
    • Tối ưu hóa cơ chế đồng bộ và đảm bảo an toàn dữ liệu giao dịch đặt cọc/hóa đơn trên cơ sở dữ liệu NoSQL.
    • Tích hợp sâu hơn các tiện ích thanh toán tự động và mở rộng quy mô dữ liệu phục vụ các khu vực đô thị lân cận ngoài địa bàn Đà Nẵng.

Giá trị tham khảo

Đồ án tốt nghiệp của sinh viên Lê Huỳnh Bảo cung cấp nguồn tài liệu tham khảo có giá trị học thuật và kỹ thuật thực tế cho:

  • Sinh viên ngành Công nghệ Thông tin, Kỹ thuật Phần mềm: Tài liệu minh họa trực quan và tương đối chuẩn hóa cho việc xây dựng đồ án tốt nghiệp theo hướng phát triển web Full-stack sử dụng kiến trúc MERN (MongoDB - Express - React - Node.js).
  • Người nghiên cứu phân tích thiết kế hệ thống thông tin: Có thể tham khảo trực tiếp cấu trúc kịch bản ca sử dụng chi tiết (bảng mô tả ca sử dụng), hệ thống sơ đồ hoạt động (Activity Diagrams) và sơ đồ phân tích Robustness trong Chương 2 để áp dụng vào các bài toán xây dựng nền tảng đăng tin, sàn giao dịch trực tuyến hoặc hệ thống đặt chỗ.
  • Lập trình viên và người phát triển đề tài về nhà ở/bất động sản: Cung cấp mô hình dữ liệu MongoDB thực tế cho bài toán quản lý phòng trọ, bao gồm cách phân chia thuộc tính bài đăng (Places), lịch sử hóa đơn (Invoices), và cấu trúc giao dịch đặt cọc (Bookings).

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

1. Khách thành viên khi tiến hành đặt phòng trọ trên website phải thực hiện tỷ lệ đặt cọc bao nhiêu phần trăm?
Theo quy định tại kịch bản ca sử dụng đặt phòng (Bảng 2.5) và mô tả nghiệp vụ của đồ án, khách thành viên khi tiến hành đặt phòng trên hệ thống sẽ phải thực hiện đặt cọc 50% chi phí.

2. Cơ sở dữ liệu của đồ án được xây dựng bằng hệ quản trị nào và gồm những bảng (collections) chính nào?
Đồ án sử dụng hệ quản trị cơ sở dữ liệu NoSQL MongoDB. Cơ sở dữ liệu bao gồm 4 bảng (collection) chính: Bookings (thông tin đặt phòng), Places (thông tin phòng trọ cho thuê), Invoices (thông tin hóa đơn và giao dịch), và Users (thông tin người dùng và phân quyền).

3. Tác giả chỉ ra nhược điểm lớn nhất về mặt an toàn dữ liệu của MongoDB trong báo cáo là gì?
Tác giả nêu rõ nguy cơ mất dữ liệu của MongoDB xuất phát từ cơ chế ghi đệm: các thao tác insert, update, remove không ghi ngay lập tức xuống đĩa cứng mà được giữ trên RAM và cần khoảng 60 giây để đồng bộ xuống ổ cứng. Nếu xảy ra sự cố đột ngột như mất điện trong khoảng thời gian này, dữ liệu chưa ghi sẽ bị mất.

4. Quản trị viên (Admin) của website có những quyền hạn và công cụ thống kê cụ thể nào?
Quản trị viên có quyền kiểm duyệt bài đăng, xem thông tin bài viết, cập nhật thời gian đặt phòng, thực hiện cảnh cáo, khóa tài khoản hoặc xóa vĩnh viễn các tài khoản vi phạm. Về mặt thống kê, Admin có thể theo dõi số lượng bài đăng đã duyệt, tổng số người dùng đăng ký và danh sách chủ trọ có tần suất đăng bài nhiều nhất.

5. Người dùng có nhu cầu thuê phòng có thể lựa chọn những gói đặt phòng nào trong giao diện hệ thống?
Tại giao diện thuê phòng trọ (Hình 3.3) và cấu trúc dữ liệu của bảng Places (packageShort, packageLong), hệ thống hỗ trợ người dùng thuê phòng theo 2 hình thức: gói ngắn hạn và gói dài hạn.


Kết luận

Đồ án tốt nghiệp "Xây dựng website thuê phòng trọ" của tác giả Lê Huỳnh Bảo đã giải quyết bài toán thực tiễn về kết nối nhu cầu thuê nhà tại thành phố Đà Nẵng thông qua giải pháp công nghệ hiện đại Node.js, ReactJS và MongoDB. Báo cáo thể hiện quy trình phân tích thiết kế hệ thống bài bản từ việc mô hình hóa chuẩn UML, chi tiết hóa kịch bản use-case cho đến xây dựng lược đồ cơ sở dữ liệu hướng tài liệu. Mặc dù hệ thống còn tồn tại những hạn chế nhất định liên quan đến đặc tính của công nghệ đơn luồng và tính toàn vẹn dữ liệu NoSQL, đồ án đã hoàn thành các mục tiêu chức năng đề ra và là tài liệu tham khảo hữu ích cho sinh viên chuyên ngành Công nghệ thông tin.