ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
ĐỒ ÁN 1
XÂY DỰNG WEBSITE HỎI ĐÁP
CHO LẬP TRÌNH VIÊN
Giảng viên hướng dẫn:
ThS. Trần Thị Hồng Yến
Sinh viên thực hiện:
Trần Quang Phúc
MSSV: 20520279
Bùi Tống Minh Châu
MSSV: 20521123
TP.HCM, Tháng 6 năm 2023
ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
ĐỒ ÁN 1
XÂY DỰNG WEBSITE HỎI ĐÁP
CHO LẬP TRÌNH VIÊN
Giảng viên hướng dẫn:
ThS. Trần Thị Hồng Yến
Sinh viên thực hiện:
Trần Quang Phúc
MSSV: 20520279
Bùi Tống Minh Châu
MSSV: 20521123
TP.HCM, Tháng 6 năm 2023
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
Người nhận xét
(Ký và ghi rõ họ tên)
Trần Thị Hồng Yến
LỜI CẢM ƠN
Đồ án “Xây dựng website hỏi đáp cho lập trình viên” là một dự án ấp ủ từ lâu của
nhóm. Để có thể hồn thành đồ án 1 lần này, chúng em xin dành lời cảm ơn sâu sắc
đến Ths.Trần Thị Hồng Yến đã tận tình hướng dẫn, cho lời khuyên cũng như đưa ra
những định hướng thiết thực cho bọn em. Những góp ý, bài học mà chúng em học
được trong suốt quá trình thực hiện đồ án 1 sẽ là hành trang quý báu không chỉ hiện
tại mà cịn ở trong tương lai.
Các q thầy cơ trường Đại học Công nghệ Thông tin đã truyền đạt những bài
học hữu ích, khơng chỉ về kiến thức chun ngành mà cịn những kĩ năng trong cuộc
sống, cơng việc sau này.
Trong q trình thực hiện đồ án, nhóm có thể khơng tránh khỏi được sai sót, chúng
em kính mong nhận được sự góp ý, hướng dẫn của cơ để có thể hồn thiện đồ án hơn
nữa, khơng chỉ dừng lại ở đồ án 1 mà có thể phát triển lên thành đồ án 2.
Chúng em xin gửi lời cảm ơn chân thành nhất đến cô.
TP.HCM, ngày 20 tháng 06 năm 2023
Nhóm sinh viên thực hiện
Trần Quang Phúc – Bùi Tống Minh Châu
ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM
TRƯỜNG ĐẠI HỌC
Độc Lập - Tự Do - Hạnh Phúc
CÔNG NGHỆ THÔNG TIN
ĐỀ CƯƠNG CHI TIẾT
TÊN ĐỀ TÀI: Xây dựng Website hỏi đáp cho lập trình viên
Cán bộ hướng dẫn: ThS. Trần Thị Hồng Yến
Thời gian thực hiện: Từ ngày 27/02/2023 đến ngày 17/06/2023
Sinh viên thực hiện:
Trần Quang Phúc - 20520279
Bùi Tống Minh Châu - 20521123
Nội dung đề tài:
1. Giới thiệu đề tài
Ngày nay, sự phát triển mạnh mẽ của ngành công nghệ thông tin đã giúp
con người giải quyết được rất nhiều vấn đề lớn trong mọi lĩnh vực, từ nghiên
cứu khoa học cho tới những ứng dụng thực tiễn trong đời sống của con người.
Chính sự phát triển nhanh chóng đó đã kéo theo một yêu cầu về nguồn nhân
lực rất lớn cho ngành cơng nghệ thơng tin, ngày càng nhiều người có mong
muốn học tập và làm việc ở lĩnh vực này.
Ngành cơng nghệ thơng tin là một ngành có lượng kiến thức khổng lồ và
khơng dễ dàng để có thể tiếp thu và áp dụng. Trong tình trạng ngày một nhiều
người tiếp cận và học tập trong lĩnh vực này, thì một cộng đồng để chia sẻ kiến
thức, hỗ trợ giải đáp những câu hỏi về lập trình, về ngành cơng nghệ thơng tin
là vơ cùng thiết yếu. Chính vì vậy nhóm chúng em đã quyết định thực hiện đề
tài Xây dựng Websỉte hỏi đáp cho lập trình viên. Ứng dụng này mang đem lại
nhiều tính năng cần thiết như tạo bài viết, bình luận, theo dõi, lưu bài viết. Từ
đó giúp kết nối mọi người đang học lập trình lại với nhau, cùng nhau giúp đỡ
để nâng cao kiến thức và kĩ năng của mình.
2. Mô tả chi tiết mục tiêu
-
Hiểu về ReactJS, Golang và áp dụng các công nghệ này vào đồ án.
-
Xây dựng được phần mềm với đầy đủ các tính năng đề ra, giao diện dễ sử
dụng, dễ dàng bảo trì, nâng cấp.
3. Phạm vi
‒ Phạm vi mơi trường
• Ứng dụng hoạt động trên nền tảng Website.
‒ Phạm vi chức năng
• Xây dựng chức năng đăng nhập, đăng ký, quên mật khẩu, xác thực người
dùng.
• Quản lý bài viết.
• Quản lý bình luận.
• Đánh giá bài viết, bình luận.
• Thơng báo.
• Tìm kiếm bài viết.
• Quản lý thơng tin người dùng.
4. Đối tượng
Người có nhu cầu trao đổi thơng tin, trau dồi kiến thức trong lập trình.
5. Phương pháp thực hiện
-
Tìm hiểu về các cơng nghệ Front-end: ReactJS, SCSS.
-
Tìm hiểu các công nghệ Back-End: Golang, Cloudinary, MongoDB.
-
Khảo sát thực trạng các website hỏi đáp về lập trình trên thị trường như:
Reddit, Stack Overflow, Voz…
-
Phân tích yêu cầu và thiết kế hệ thống ứng dụng.
-
Nghiên cứu thiết kế giao diện website.
-
Tiến hành triển khai thực hiện.
-
Kiếm thử ứng dụng.
6. Công nghệ
-
Front-End: ReactJS.
-
Back-End: Go, framework Gin.
-
Database: MongoDB.
-
Quản lý Source code: Git, Github.
7. Kết quả mong đợi
‒ Tìm hiểu và có thể sử dụng các công nghệ mới về Go, ReactJS.
‒ Hiểu rõ và áp dụng cách quản lý một dự án phần mềm.
‒ Hiểu rõ các nghiệp vụ, chức năng của một Website hỏi đáp.
‒ Xây dựng được website đáp ứng được yêu cầu về giao diện và các chức
năng đã đề ra.
‒ Có thể mở rộng phát triển thêm nhiều tính năng trong tương lai.
Kế hoạch thực hiện:
STT
1
Thời gian
Nội dung
Phân cơng
27/02/2023 -
Tìm hiểu và thử nghiệm các cơng
Trần Quang
05/03/2023
nghệ
Phúc, Bùi Tống
Minh Châu
2
06/03/2023 -
Phân tích bài tốn, khảo sát hiện
Trần Quang
12/03/2023
trạng
Phúc, Bùi Tống
Minh Châu
3
13/03/2023 -
- Thiết kế hệ thống.
Trần Quang
16/03/2023
- Thiết kế dữ liệu.
Phúc, Bùi Tống
Minh Châu
4
17/03/2023 19/03/2023
- Thiết kế giao diện.
Trần Quang
Phúc, Bùi Tống
Minh Châu
5
20/03/2023 -
- Khởi tạo Source Code.
Bùi Tống Minh
24/03/2023
- Cài đặt cấu hình cho Cloudinary,
Châu
MongoDB.
6
7
8
25/03/2023 -
Xây dựng API đăng nhập, đăng ký,
Trần Quang
01/04/2023
quên mật khẩu.
Phúc
02/04/2023 -
Triển khai chức năng đăng nhập,
Bùi Tống Minh
09/04/2023
đăng ký, quên mật khẩu.
Châu
02/04/2023 -
Xây dựng API quản lý người dùng
Trần Quang
09/04/2023
9
10
Phúc
10/04/2023 -
Triển khai chức năng quản lý người
Bùi Tống Minh
16/04/2023
dùng.
Châu
10/04/2023 -
Xây dựng API quản lý bài viết.
Trần Quang
16/04/2023
11
12
Phúc
17/04/2023 -
Triển khai chức năng quản lý bài
Bùi Tống Minh
23/04/2023
viết.
Châu
17/04/2023 -
Xây dựng API quản lý bình luận.
Trần Quang
23/04/2023
13
14
15
Phúc
24/04/2023 -
Triển khai chức năng quản lý bình
Bùi Tống Minh
30/03/2023
luận.
Châu
24/04/2023 -
Xây dựng API đánh giá bài viết, bình Trần Quang
30/04/2023
luận.
Phúc
03/05/2023 -
Triển khai chức năng đánh giá bài
Bùi Tống Minh
10/05/2023
viết, bình luận.
Châu
16
03/05/2023 -
Xây dựng API thông báo
Trần Quang
10/05/2023
17
11/05/2023 -
Phúc
Triển khai chức năng thơng báo
Bùi Tống Minh
15/05/2023
18
11/05/2023 -
Châu
Xây dựng API tìm kiếm bài viết.
Trần Quang
15/05/2023
19
20
Phúc
16/05/2023 -
Triển khai chức năng tìm kiếm bài
Bùi Tống Minh
19/05/2023
viết.
Châu
20/05/2023 -
Kiểm thử và sửa lỗi.
Trần Quang
Phúc, Bùi Tống
27/05/2023
Minh Châu
21
28/05/2023 -
Hoàn thiện báo cáo.
Trần Quang
Phúc, Bùi Tống
04/06/2023
Minh Châu
22
05/06/2023 -
Thời gian dự trữ.
17/06/2023
Xác nhận của CBHD
TP. HCM, ngày 13 tháng 02 năm 2023
(Ký tên và ghi rõ họ tên)
Sinh viên
(Ký tên và ghi rõ họ tên)
ThS. Trần Thị Hồng Yến
Trần Quang Phúc
Châu
Bùi Tống Minh
MỤC LỤC
TÓM TẮT ĐỒ ÁN ........................................................................................ 18
Chương 1: GIỚI THIỆU CHUNG .............................................................. 19
1.1. Lý do chọn đề tài ..........................................................................................19
1.2. Phạm vi nghiên cứu ......................................................................................19
1.3. Đối tượng nghiên cứu...................................................................................19
1.4. Phương pháp nghiên cứu.............................................................................20
Chương 2: CÔNG NGHỆ SỬ DỤNG ......................................................... 21
2.1. Next.js ............................................................................................................21
2.1.1. Giới thiệu.................................................................................................21
2.1.2. Lý do sử dụng..........................................................................................21
2.2. MongoDB ......................................................................................................22
2.2.1. Giới thiệu.................................................................................................22
2.2.2. Lý do sử dụng..........................................................................................23
2.3. Golang ...........................................................................................................23
2.3.1. Giới thiệu.................................................................................................23
2.3.2. Lý do sử dụng..........................................................................................24
2.4. Cloudinary ....................................................................................................25
2.4.1. Giới thiệu.................................................................................................25
2.4.2. Lý do sử dụng..........................................................................................25
2.5. Socket.IO .......................................................................................................26
2.5.1. Giới thiệu.................................................................................................26
2.5.2. Lý do sử dụng..........................................................................................26
Chương 3: THIẾT KẾ HỆ THỐNG ........................................................... 27
3.1. Xây dựng hệ thống .......................................................................................27
3.1.1. Kiến trúc hệ thống ...................................................................................27
3.1.2. Mô tả các thành phần trong kiến trúc hệ thống .......................................28
3.2. Phân tích yêu cầu .........................................................................................29
3.2.1. Đăng ký ...................................................................................................29
3.2.2. Đăng nhập ...............................................................................................29
3.2.3. Xem danh sách bài viết ...........................................................................29
3.2.4. Xem bài viết ............................................................................................29
3.2.5. Tìm kiếm bài viết ....................................................................................29
3.2.6. Tạo bài viết ..............................................................................................30
3.2.7. Bình luận .................................................................................................30
3.2.8. Quản lý thơng tin tài khoản cá nhân .......................................................30
3.2.9. Quản lý chủ đề ........................................................................................30
3.2.10. Quản lý người dùng ..............................................................................30
3.3. Thiết kế hệ thống ..........................................................................................31
3.3.1. Sơ đồ Use-case tổng quát ........................................................................31
3.3.1.1. Sơ đồ Use Case của người dùng chưa đăng nhập ............................31
3.3.1.2. Sơ đồ Use Case của người dùng đã đăng nhập ................................32
3.3.2. Danh sách Actor ......................................................................................33
3.3.3. Danh sách Use Case ................................................................................34
3.3.4. Đặc tả Use Case ......................................................................................36
3.3.4.1. Đặc tả Use Case Đăng nhập .............................................................36
3.3.4.2. Đặc tả Use Case Đăng ký .................................................................37
3.3.4.3. Đặc tả Use Case Quên mật khẩu ......................................................38
3.3.4.4. Đặc tả Use Case Xem danh sách bài viết .........................................39
3.3.4.5. Đặc tả Use Case Xem chi tiết bài viết..............................................40
3.3.4.6. Đặc tả Use Case Tìm kiếm bài viết ..................................................41
3.3.4.7. Đặc tả Use Case Xem danh sách chủ đề ..........................................42
3.3.4.8. Đặc tả Use Case Lưu bài viết ...........................................................42
3.3.4.9. Đặc tả Use Case Tăng điểm bài viết ................................................43
3.3.4.10. Đặc tả Use Case Giảm điểm bài viết .............................................44
3.3.4.11. Đặc tả Use Case Tạo bài viết .........................................................45
3.3.4.12. Đặc tả Use Case Chỉnh sửa bài viết ...............................................46
3.3.4.13. Đặc tả Use Case Xoá bài viết .........................................................47
3.3.4.14. Đặc tả Use Case Tạo bình luận ......................................................47
3.3.4.15. Đặc tả Use Case Chỉnh sửa bình luận ............................................48
3.3.4.16. Đặc tả Use Case Xố bình luận ......................................................49
3.3.4.17. Đặc tả Use Case Tăng điểm bình luận ...........................................50
3.3.4.18. Đặc tả Use Case Giảm điểm bình luận ..........................................51
3.3.4.19. Đặc tả Use Case Chấp nhận bình luận ...........................................52
3.3.4.20. Đặc tả Use Case Quản lý thông tin tài khoản ................................53
3.3.4.21. Đặc tả Use Case Sửa thông tin tài khoản .......................................53
3.3.4.22. Đặc tả Use Case Đổi mật khẩu.......................................................54
3.3.4.23. Đặc tả Use Case Quản lý bài viết đã lưu........................................55
3.3.4.24. Đặc tả Use Case Quản lý chủ đề ....................................................56
3.3.4.25. Đặc tả Use Case Xem danh sách bài viết thuộc chủ đề .................57
3.3.4.26. Đặc tả Use Case Duyệt bài viết ......................................................58
3.3.4.27. Đặc tả Use Case Chỉnh sửa tên chủ đề...........................................59
3.3.4.28. Đặc tả Use Case Xem danh sách người dùng quản lý chủ đề........60
3.3.4.29. Đặc tả Use Case Quản lý người dùng ............................................61
3.3.4.30. Đặc tả Use Case Thay đổi vai trò người dùng ...............................62
3.4. Thiết kế dữ liệu .............................................................................................63
3.4.1. Sơ đồ Logic .............................................................................................63
3.4.2. Danh sách các bảng trong cơ sở dữ liệu..................................................64
3.4.3. Mô tả chi tiết các bảng ............................................................................64
3.4.3.1. Bảng users ........................................................................................64
3.4.3.2. Bảng roles.........................................................................................65
3.4.3.3. Bảng posts ........................................................................................65
3.4.3.4. Bảng comments ................................................................................66
3.4.3.5. Bảng topics .......................................................................................67
3.4.3.6. Bảng tags ..........................................................................................68
Chương 4: XÂY DỰNG ỨNG DỤNG......................................................... 69
4.1. Danh sách màn hình ....................................................................................69
4.2. Chi tiết màn hình ..........................................................................................70
4.2.1. Màn hình “Đăng nhập” ...........................................................................70
4.2.2. Màn hình “Đăng ký” ...............................................................................71
4.2.3. Màn hình “Xác thực email” ....................................................................72
4.2.4. Màn hình “Quên mật khẩu” ....................................................................73
4.2.5. Màn hình “Đặt lại mật khẩu” ..................................................................74
4.2.6. Màn hình “Trang chủ” ............................................................................75
4.2.7. Màn hình “Chi tiết bài viết” ....................................................................77
4.2.8. Màn hình “Tạo bài viết”..........................................................................78
4.2.9. Màn hình “Chỉnh sửa bài viết” ...............................................................80
4.2.10. Màn hình “Thơng tin tài khoản” ...........................................................81
4.2.11. Màn hình “Quản lý bài viết các nhân” ..................................................82
4.2.12. Màn hình “Quản lý bài viết (Admin và Moderator)” ...........................83
4.2.13. Màn hình “Quản lý chủ đề (Admin)” ...................................................84
4.2.14. Màn hình “Quản lý tài khoản (Admin)” ...............................................85
Chương 5: TỔNG KẾT ................................................................................ 86
5.1. Đánh giá ........................................................................................................86
5.1.1. Quá trình làm việc ...................................................................................86
5.1.2. Thuận lợi .................................................................................................86
5.1.3. Khó khăn .................................................................................................86
5.1.4. Kết quả đạt được .....................................................................................86
5.2. Ưu điểm .........................................................................................................86
5.3. Nhược điểm ...................................................................................................87
5.4. Hướng phát triển ..........................................................................................87
TÀI LIỆU THAM KHẢO ............................................................................ 88
DANH MỤC BẢNG
Bảng 3.1. Bảng mô tả các thành phần của kiến trúc hệ thống ..................................28
Bảng 3.2. Bảng danh sách Actor ...............................................................................33
Bảng 3.3. Danh sách Use Case..................................................................................34
Bảng 3.4. Use Case Đăng nhập .................................................................................36
Bảng 3.5. Use Case Đăng ký .....................................................................................37
Bảng 3.6. Use Case Quên mật khẩu ..........................................................................38
Bảng 3.7. Use Case Xem danh sách bài viết .............................................................39
Bảng 3.8. Use Case Xem chi tiết bài viết..................................................................40
Bảng 3.9. Use Case Tìm kiếm bài viết ......................................................................41
Bảng 3.10. Use Case Xem danh sách chủ đề ............................................................42
Bảng 3.11. Use Case Lưu bài viết .............................................................................42
Bảng 3.12. Use Case Tăng điểm bài viết ..................................................................43
Bảng 3.13. Use Case Giảm điểm bài viết .................................................................44
Bảng 3.14. Use Case Tạo bài viết .............................................................................45
Bảng 3.15. Use Case Chỉnh sửa bài viết ...................................................................46
Bảng 3.16. Use Case Xố bài viết .............................................................................47
Bảng 3.17. Use Case Tạo bình luận ..........................................................................47
Bảng 3.18. Use Case Chỉnh sửa bình luận ................................................................48
Bảng 3.19. Use Case Xố bình luận..........................................................................49
Bảng 3.20. Use Case Tăng điểm bình luận ...............................................................50
Bảng 3.21. Use Case Giảm điểm bình luận ..............................................................51
Bảng 3.22. Use Case Chấp nhận bình luận ...............................................................52
Bảng 3.23. Use Case Quản lý thông tin tài khoản ....................................................53
Bảng 3.24. Use Case Sửa thông tin tài khoản ...........................................................53
Bảng 3.25. Use Case Đổi mật khẩu ..........................................................................54
Bảng 3.26. Use Case Quản lý bài viết đã lưu............................................................55
Bảng 3.27. Use Case Quản lý chủ đề ........................................................................56
Bảng 3.28. Use Case Xem danh sách bài viết thuộc chủ đề .....................................57
Bảng 3.29. Use Case Duyệt bài viết..........................................................................58
Bảng 3.30. Use Case Chỉnh sửa tên chủ đề...............................................................59
Bảng 3.31. Use Case Xem danh sách người dùng quản lý chủ đề ............................60
Bảng 3.32. Use Case Quản lý người dùng ................................................................61
Bảng 3.33. Use Case Thay đổi vai trò người dùng ...................................................62
Bảng 3.34. Danh sách các bảng trong cơ sở dữ liệu .................................................64
Bảng 3.35. Mô tả chi tiết bảng users .........................................................................64
Bảng 3.36. Mô tả chi tiết bảng roles .........................................................................65
Bảng 3.37. Mô tả chi tiết bảng posts .........................................................................65
Bảng 3.38. Mô tả chi tiết bảng comments .................................................................66
Bảng 3.39. Mô tả chi tiết bảng topics .......................................................................67
Bảng 3.40. Mô tả chi tiết bảng tags ...........................................................................68
Bảng 4.1. Bảng danh sách các màn hình ...................................................................69
DANH MỤC HÌNH ẢNH
Hình 2.1. Logo Next.js ..............................................................................................21
Hình 2.2. Logo MongoDB ........................................................................................22
Hình 2.3. Logo ngơn ngữ lập trình Go ......................................................................23
Hình 2.4. Logo Cloudinary .......................................................................................25
Hình 2.5. Logo Socket.IO .........................................................................................26
Hình 3.1. Kiến trúc hệ thống .....................................................................................27
Hình 3.2. Sơ đồ Use Case của người dùng chưa đăng nhập .....................................31
Hình 3.3. Sơ đồ Use Case của người dùng đã đăng nhập (Member) ........................32
Hình 3.4. Sơ đồ Use Case của người dùng đã đăng nhập (Moderator và Admin) ...33
Hình 3.5. Sơ đồ Logic hồn chỉnh ............................................................................63
Hình 4.1. Màn hình đăng nhập ..................................................................................70
Hình 4.2. Màn hình đăng ký......................................................................................71
Hình 4.3. Màn hình Đăng ký thành cơng ..................................................................71
Hình 4.4. Màn hình Xác thực email ..........................................................................72
Hình 4.5. Màn hình Quên mật khẩu ..........................................................................73
Hình 4.6. Màn hình Đặt lại mật khẩu ........................................................................74
Hình 4.7. Màn hình Trang chủ ..................................................................................75
Hình 4.8. Màn hình chi tiết bài viết ..........................................................................77
Hình 4.9. Màn hình Tạo bài viết ...............................................................................79
Hình 4.10. Màn hình Chỉnh sửa bài viết ...................................................................80
Hình 4.11. Màn hình Thơng tin tài khoản .................................................................81
Hình 4.12. Màn hình Quản lý các bài viết cá nhân ...................................................82
Hình 4.13. Màn hình Quản lý bài viết (Admin và Moderator) .................................83
Hình 4.14. Màn hình Quản lý chủ đề (Admin) .........................................................84
Hình 4.15. Màn hình Quản lý tài khoản (Admin) .....................................................85
TÓM TẮT ĐỒ ÁN
Đồ án “Xây dựng website hỏi đáp cho lập trình viên” tạo ra một nền tảng trực
tuyến đáng tin cậy và hiệu quả để lập trình viên có thể tìm kiếm giải pháp và chia sẻ
kiến thức lập trình một cách dễ dàng và nhanh chóng. Điều này nhằm giúp cộng đồng
lập trình viên phát triển kỹ năng, đồng thời đẩy mạnh quá trình học tập và cải thiện
chất lượng cơng việc lập trình. Website sẽ hỗ trợ tối đa cho người dùng trong việc
tìm kiếm thơng tin với các tính năng hữu ích như tìm kiếm bài viết theo cả tiêu đề và
nội dung, lọc bài viết theo lượt đánh giá, theo chủ đề, nhãn dán,… Ngồi ra cịn có
tính năng trả lời bình luận theo thời gian thực và thông báo để người dùng cập nhật
thơng tin sớm nhất. Cụ thể, phần trình bày của đồ án được nhóm em thực hiện qua 5
chương dưới đây:
1. Chương 1: Giới thiệu chung. Chương này sẽ giới thiệu về đề tài, lý do chọn
đề tài, phạm vi, mục đích nghiên cứu….
2. Chương 2: Cơng nghệ sử dụng. Chương này giới thiệu các công nghệ sử dụng
trong đề tài.
3. Chương 3: Thiết kế hệ thống. Mô tả các thành phần trong hệ thống và cách
hoạt động, mô tả chi tiết các Use case của đề tài, mô tả thiết kế dữ liệu với sơ
đồ logic và mô tả chi tiết các bảng trong database.
4. Chương 4: Xây dựng ứng dụng. Mô tả chi tiết giao diện của ứng dụng với
hình vẽ.
5. Chương 5: Tổng kết. Chương này tổng kết lại những gì đạt được trong đề tài,
ưu điểm, nhược điểm và hướng phát triển.
18
Chương 1: GIỚI THIỆU CHUNG
1.1. Lý do chọn đề tài
Ngày nay, sự phát triển mạnh mẽ của ngành công nghệ thông tin đã giúp con
người giải quyết được rất nhiều vấn đề lớn trong mọi lĩnh vực, từ nghiên cứu khoa
học cho tới những ứng dụng thực tiễn trong đời sống của con người. Chính sự phát
triển nhanh chóng đó đã kéo theo một yêu cầu về nguồn nhân lực rất lớn cho ngành
công nghệ thông tin, ngày càng nhiều người có mong muốn học tập và làm việc ở
lĩnh vực này.
Ngành cơng nghệ thơng tin là một ngành có lượng kiến thức khổng lồ và khơng
dễ dàng để có thể tiếp thu và áp dụng. Trong tình trạng ngày một nhiều người tiếp
cận và học tập trong lĩnh vực này, thì một cộng đồng để chia sẻ kiến thức, hỗ trợ giải
đáp những câu hỏi về lập trình, về ngành cơng nghệ thơng tin là vơ cùng thiết yếu.
Chính vì vậy nhóm chúng em đã quyết định thực hiện đề tài Xây dựng Websỉte hỏi
đáp cho lập trình viên. Ứng dụng này mang đem lại nhiều tính năng cần thiết như tạo
bài viết, bình luận, theo dõi, lưu bài viết. Từ đó giúp kết nối mọi người đang học lập
trình lại với nhau, cùng nhau giúp đỡ để nâng cao kiến thức và kĩ năng của mình.
1.2. Phạm vi nghiên cứu
‒ Nghiên cứu về hệ thống phân quyền của các diễn đàn, mạng xã hội đang có
trên thị trường hiện nay.
‒ Tìm hiểu về cơng nghệ Realtime (thời gian thực) với WebSocket, triển khai
với thư viện Socket.IO.
1.3. Đối tượng nghiên cứu
‒ Các cơng nghệ:
• Ngơn ngữ lập trình: Javascript, Typescript, Go.
• Framework: NextJS, Gin.
• Database: MongoDB.
• Các cơng nghệ khác: WebSocket (SocketIO).
‒ Đối tượng trong phạm vi đề tài hướng đến:
19
• Những người có nhu cầu trao đổi học tập những vấn đề liên quan đến công
nghệ thông tin, đặc biệt là lĩnh vực lập trình.
1.4. Phương pháp nghiên cứu
‒ Nghiên cứu từ những website đang có trên thị trường hiện nay như:
Stackoverflow, Reddit, Voz,… Từ đó rút ra những ưu, nhược điểm về cả tính
năng lẫn giao diện và đưa ra giải pháp cho phần mềm của mình.
‒ Tìm hiểu những công nghệ cần thiết và phù hợp với nhu cầu của đề tài.
‒ Tìm hiểu và áp dụng những kiến trúc, mẫu thiết kế cho từng phần của dự án
để đạt hiệu quả tối đa có thể.
‒ Tham khảo ý kiến đóng góp của giảng viên hướng dẫn để phát triển đề tài đạt
được kết quả tốt nhất.
20
Chương 2: CƠNG NGHỆ SỬ DỤNG
2.1. Next.js
2.1.1. Giới thiệu
Hình 2.1. Logo Next.js
‒ Next.js là một framework front-end React được phát triển dưới dạng opensource bổ sung các khả năng tối ưu hóa như render phía máy chủ (SSR) và tạo
trang web static.
‒ Next.js xây dựng dựa trên thư viện React, có nghĩa là các ứng dụng Next.js sử
dụng core của React và chỉ thêm các tính năng bổ sung. Việc triển khai ứng
dụng SSR cho phép máy chủ truy cập tất cả dữ liệu được yêu cầu và xử lý
JavaScript cùng nhau để hiển thị trang. Sau đó, trang được gửi lại tồn bộ cho
trình duyệt và ngay lập tức được hiển thị. SSR cho phép các trang web load
trong thời gian nhỏ nhất và tăng trải nghiệm người dùng với khả năng phản
hồi nhanh hơn.
2.1.2. Lý do sử dụng
‒ Hỗ trợ SSR tích hợp để tăng hiệu suất và SEO
‒ Ứng dụng Next.js tải nhanh hơn đáng kể so với ứng dụng React do được render
phía Server.
21
‒ Hỗ trợ các tính năng cho static web.
‒ Đối với những ai đã có kinh nghiệm làm việc với React thì việc tiếp tập NextJS
sẽ là một việc dễ dàng.
‒ Tự động code splitting cho các page nhằm tối ưu hoá performance khi load
trang.
‒ Dễ dàng xây dựng các API internal thơng qua các API routes tích hợp sẵn và
tạo các endpoint API.
‒ Hỗ trợ tích hợp cho route cho page, CSS, JSX và TypeScript.
‒ Nhanh chóng thêm các plugin để tùy chỉnh Next.js theo nhu cầu của trang cụ
thể.
2.2. MongoDB
2.2.1. Giới thiệu
Hình 2.2. Logo MongoDB
‒ MongoDB là một hệ quản trị cơ sở dữ liệu phi quan hệ, mã nguồn mở, hướng
tài liệu (Document-Oriented) MongoDB được phát triển bởi MongoDB Inc và
ra mắt vào tháng hai năm 2009.
‒ MongoDB được viết bằng C++ cung cấp hiệu suất cao, tính mở rộng cao và
khả năng mở rộng dễ dàng.
‒ MongoDB lưu trữ dữ liệu trong document kiểu JSON (Binary JSON) thay vì
dạng bảng như các hệ sở dữ liệu quan hệ nên công việc truy vấn sẽ rất nhanh.
22
‒ Những điểm mạnh của MongoDB bao gồm:
• Linh hoạt: Các document của MongoDB khơng u cầu phải có một Schema
cố định như các hệ quản trị cơ sở dữ liệu quan hệ.
• Dễ dàng mở rộng: MongoDB hỗ trợ tốt trong khả năng mở rộngtheo chiều
ngang (Horizontal Scalability), nghĩa là khi cần nâng cao hiệu năng lưu trữ
và truy xuất, chúng ta chỉ cần bổ sung thêm server.
• Hiệu năng cao: MongoDB lưu trữ dữ liệu dưới dạng Bson và truy vấn sử
dụng ngôn ngữ MQL (MongoDB Query Language) nên có hiệu suất truy
vấn cao.
2.2.2. Lý do sử dụng
‒ MongoDB lưu trữ dữ liệu dưới dạng Bson, được xây dựng dựa trên Json và sử
dụng ngôn ngữ MQL, được xây dựng dựa trên JavaScript. Vì thế hệ quản trị
cơ sở dữ liệu sẽ tương thích tốt với lại server được xây dựng bằng JavaScript,
từ đó nâng cao tốc độ phát triển.
‒ MongoDB dễ dàng cài đặt, tương thích mọi nền tảng, từ đó dễ dàng triển khai
MongoDB trên bất kỳ hệ điều hành nào.
‒ MongoDB cho hiệu suất đọc ghi cao, dễ dàng mở rộng khi phát triển.
2.3. Golang
2.3.1. Giới thiệu
Hình 2.3. Logo ngơn ngữ lập trình Go
23
‒ Go là một ngơn ngữ lập trình được thiết kế dựa trên tư duy lập trình hệ thống.
Go được phát triển bởi Robert Griesemer, Rob Pike và Ken Thompson tại
Google vào năm 2007.
‒ Điểm mạnh của Go là bộ thu gom rác và hỗ trợ lập trình đồng thời (tương tự
như đa luồng – multithreading).
‒ Go là một ngôn ngữ biên dịch như C/C++, Java, Pascal… Go được giới thiệu
vào năm 2009 và được sử dụng hầu hết trong các sản phẩm của Google.
‒ Một số đặc điểm
• Hỗ trợ khai báo kiểu dữ liệu động.
• Tốc độ biên dịch nhanh.
• Hỗ trợ các tác vụ đồng thời.
• Ngơn ngữ đơn giản, ngắn gọn.
• Hỗ trợ Generic.
2.3.2. Lý do sử dụng
‒ Go có goroutines thay cho threads:
• Goroutine có ngăn xếp phân khúc có thể mở rộng (growable segmented
stacks). Điều này có nghĩa là nó sẽ sử dụng nhiều bộ nhớ RAM hơn nếu điều
đó là cần thiết.
• Goroutines có thời gian khởi động nhanh hơn là threads.
• Goroutines có các channel và giữa các channel này có thể giao tiếp với nhau.
• Goroutines có khóa mutex (mutex locking) để đảm bảo việc đọc và ghi vào
một cấu trúc dữ liệu hay một biến chung không xảy ra xung đột.
‒ Go là ngơn ngữ lập trình biên dịch (compiled programing language). Go giao
tiếp trực tiếp với vi xử lý bằng mã nhị phân (binaries) nên cho hiệu suất cao
hơn hẳn so với Java hay Python.
‒ Code Go rất dễ dàng bảo trì và mở rộng.
‒ Google là nhà phát triển của Go.
24
2.4. Cloudinary
2.4.1. Giới thiệu
Hình 2.4. Logo Cloudinary
‒ Cloudinary là một cloud-based service, nó cung cấp một giải pháp quản lý
hình ảnh bao gồm upload, lưu trữ, thao tác, tối ưu hóa và delivery.
‒ Với cloudinary, chúng ta có thể dễ dàng upload ảnh lên cloud, tự động thực
thi các thao tác với ảnh một cách thông minh mà không cần phải cài đặt bất kì
một phần mềm phức tạp nào khác.
‒ Cloudinary cung cấp các APIs toàn diện và màn hình quản lý giúp chúng ta dễ
dàng tích hợp vào các trang web và ứng dụng di động.
2.4.2. Lý do sử dụng
‒ Dễ dàng lấy được API Key cho việc sử dụng để lưu trữ ảnh, video…
‒ Xây dựng các URL để chuyển đổi và thao tác với hình ảnh.
‒ Dễ dàng sử dụng với tài liệu hướng dẫn cực kỳ chi tiết.
‒ Hỗ trợ nhiều ngôn ngữ phổ biến hiện nay và hỗ trợ đa nền tảng.
25