Tuy nhiên, sự phát triển nhanh chóng của số lượng truyện và người dùng dẫn đến các thách thức như: Làm thế nào để quản lý hàng trăm, thậm chí hàng ngàn truyện, danh mục và bình luận?.
Trang 1HỌC VI N CÔNG NGH Ệ Ệ BƯU CHÍNH VIỄ N THÔNG
MÔN : L ẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Hà Nội, tháng 11 năm 2024
Trang 21
MỤC L C Ụ
L i cờ ảm ơn 2
Phân công nhiệm vụ 3
1 GIỚI THIỆU DỰ ÁN 4
1.1 Mục tiêu dự án 4
1.2 Đề xuất giải pháp 4
1.3.Mục tiêu học tập 5
2 KỸ THUẬT CÔNG NGHỆ SỬ DỤNG 6
2.1 Spring Boot 6
2.2 Java 7
2.3 Hibernate (Java Persistence API - JPA) 7
2.4 Thymeleaf 7
2.5 Maven 7
2.6 Validation API 7
2.7 Spring MVC 8
2.8 H2 Database 8
3 KIẾN TRÚC HỆ THỐNG 8
3.1 Tổng quan kiến trúc 8
3.2 Phân tích từng thành phần 9
3.2.1.Entity Classes (Model): 9
3.2.2.REST API Endpoints (Controller): 9
4 PHÂN TÍCH CHỨC NĂNG CHI TIẾT 9
4.1 Chức năng Quản trị Blog (Admin) 10
Xem danh sách truyện 10
Xóa truy n 11 ệ 4.2 Chức năng Người dùng (User) 13
Đăng ký tài khoản 13
Thích ho c b thích truy nặ ỏ ệ 15
5. KẾT QU Ả CÀI ĐẶT 17
5.2 Hình nh giao di nả ệ 17
5.3 Đánh giá hiệu quả hoạt động 20
6 HƯỚNG PHÁT TRIỂN VÀ CẢI TIẾN 20
7 TÀI LI U THAM KH OỆ Ả 21
Trang 3IT Chính nhờ những bài giảng và chia sẻ tâm huyết của thầy mà chúng em có được nền tảng vững chắc và tự tin hơn trong hành trình tiếp theo Chúng em cũng xin cảm ơn thầy đã dành thời gian để giải đáp các thắc mắc, cung cấp tài liệu tham khảo và định hướng tư duy OOP đúng đắn cho chúng em
Trong quá trình làm báo cáo, do kiến thức của chúng em còn hạn chế, nên không tránh khỏi những thiếu sót Chúng em rất mong nhận được sự góp ý của Thầy cũng như các bạn để giúp chúng em khắc phục những khuyết điểm và phát triển hơn trong tương lai
Cuối cùng,chúng em xin chúc thầy thật nhiều sức khỏe,thành công hơn nữa với các lứa D23,D24 trong hành trình chinh phục những môn lập trình nền tảng cũng như chinh phục đỉnh cao của ICPC
Xin chân thành cảm ơn !!!
-Nhóm sinh viên 14.01
Trang 43
Phân công nhiệm vụ
Trang 51 GIỚI THIỆU DỰ ÁN
1.1 Mục tiêu dự án
Trong thời đại công nghệ số, blog truyện là một nền tảng phổ biến để các tác giả chia sẻ truyện và tương tác với độc giả Tuy nhiên, sự phát triển nhanh chóng của số lượng truyện và người dùng dẫn đến các thách thức như:
Làm thế nào để quản lý hàng trăm, thậm chí hàng ngàn truyện, danh mục và bình luận?
Làm sao để độc giả dễ dàng tìm kiếm truyện yêu thích hoặc khám phá các thể loại mới?
Cần có công cụ để quản trị viên theo dõi, thống kê và quản lý toàn bộ hệ thống một cách hiệu quả
Vì vậy, một hệ thống quản lý blog truyện hiện đại không chỉ cần xử lý các thao tác cơ bản (đăng tải, xóa truyện) mà còn phải đảm bảo hiệu suất, bảo mật và trải nghiệm người dùng tốt
1.2 Đề xuất giải pháp
Hệ thống quản lý blog truyện được xây dựng dựa trên Java, sử dụng Spring Boot để phát triển backend và MySQL làm cơ sở dữ liệu Các tính năng chính bao gồm:
1. Quản lý Blog Truyện:
o Đăng tải, chỉnh sửa, xóa và tìm kiếm truyện
o Phân loại truyện
o Danh mục và quản lý thông tin truyện
2. Quản lý Người dùng:
Trang 65
Hỗ trợ đăng ký, đăng nhập
o Theo dõi truyện yêu thích và bình luận
o Quản lý thông tin cá nhân
3. Quản lý Danh mục:
o Thêm, chỉnh sửa, xóa danh mục truyện
o Thống kê mức độ phổ biến của từng danh mục
4. Thống kê và Báo cáo:
o Thống kê truyện được yêu thích nhất, danh mục phổ biến và người dùng tích cực
1.3.Mục tiêu học tập
Trong quá trình thực hiện bài tập lớn , nhóm chúng em đặt ra những mục tiêu học tập cụ thể như sau:
1. Hiểu rõ hơn về lập trình hướng đối tượng:
o Nắm vững các nguyên lý cơ bản của OOP như tính kế thừa, tính đa hình, tính đóng gói và trừu tượng hóa
o Áp dụng các nguyên lý này vào việc thiết kế và triển khai hệ thống phần mềm thực tế
3. Tăng cường kỹ năng làm việc nhóm:
o Phân chia công việc, phối hợp chặt chẽ giữa các thành viên trong nhóm để đảm bảo tiến độ và chất lượng của bài tập lớn
o Học cách sử dụng các công cụ quản lý dự án như GitHub để quản lý mã nguồn và hợp tác hiệu quả
Trang 74. Sử dụng thành thạo các công cụ và công nghệ liên quan:
o Thực hành lập trình với Java, sử dụng Spring Boot để xây dựng ứng dụng web và MySQL để quản lý cơ sở dữ liệu
o Làm quen với cách tổ chức mã nguồn, xử lý lỗi và tối ưu hóa hệ thống
5. Phát triển tư duy giải quyết vấn đề:
Đối mặt v i các thách thứớ c th c tế trong quá trình triển khai dự án, từ đó rèn ựluy n kh ệ ả năng phân tích vấn đề, tìm ki m và áp d ng gi i pháp phù h p ế ụ ả ợ
Spring Boot Starter Security: Đảm b o b o m t cho ng d ng b ng cách ả ả ậ ứ ụ ằcung cấp các chức năng authentication (xác thực) và authorization (ủy quy n) ề
Spring Boot Starter Thymeleaf: Tích hợp Thymeleaf để xây d ng giao ự
diện người dùng (UI) động và d dàng liên k t vễ ế ới dữ liệ ừ u t backend
Spring Boot Starter Validation: Hỗ trợ xác thực dữ liệu đầu vào của các API thông qua các annotation như @NotNull, @Size, @Email, v.v
Spring Boot Starter Web: Hỗ trợ xây d ng các API RESTful và ng d ng ự ứ ụweb MVC (Model-View-Controller)
Trang 87
2.2 Java
S d ng ử ụ Java 17, m t phiên b n LTS (Long-Term Support) c a Java, cung c p ộ ả ủ ấ
hiệu năng tốt hơn, cú pháp hiện đại, và c i ti n v b o mả ế ề ả ật
2.3 Hibernate (Java Persistence API - JPA)
Hibernate là công cụ ORM chính được sử ụ d ng thông qua Spring Data JPA Các tính năng bao gồm:
Ánh xạ đối tượng Java với các bảng trong cơ sở ữ liệ d u
Quản lý truy v n t ấ ự động (Query Generation)
Hỗ trợ các chức năng CRUD (Create, Read, Update, Delete) và các truy
@NotNull: Xác nh n rậ ằng trường d ữ liệu không được null
@Size: Đảm bảo độ dài của chuỗi nằm trong khoảng quy định
@Email: Kiểm tra định d ng email h p l ạ ợ ệ
Trang 92.7 Spring MVC
S dử ụng Spring MVC để ổ chức cấ t u trúc dự án theo mô hình Model-ViewController:
- Model: Đại di n cho các d u t ệ ữ liệ ừ cơ sở ữ liệ d u (thông qua các entity)
View: Được xây dựng bằng Thymeleaf
Controller: X lý logic và liên k t gi a model và view ử ế ữ
2.8 H2 Database
Trong quá trình phát triển hoặc kiểm thử ự, d án có th s d ng ể ử ụ H2 Database như một cơ sở dữ liệu nhúng Điều này giúp giảm độ phức tạp khi không c n kầ ết nố ới cơ sở ữ liệi v d u thật
3 KIẾN TRÚC HỆ THỐNG
3.1 Tổng quan kiến trúc
Hệ thống áp dụng kiến trúc MVC (Model-View-Controller):
Model: Định nghĩa các thực thể chính (Blog, Category, User, Comment)
View: Hiển thị giao diện cho người dùng cuối thông qua các template
HTML/Thymeleaf
Controller: Quản lý luồng dữ liệu giữa Model và View, xử lý các yêu cầu từ người dùng
Trang 109
3.2 Phân tích từng thành phần
3.2.1.Entity Classes (Model):
o Blog: Lưu thông tin truyện, bao gồm tiêu đề, nội dung, hình ảnh, danh mục liên quan
o Category: Quản lý danh mục thể loại như hành động, lãng mạn, viễn tưởng
o User: Thông tin tài khoản người dùng và vai trò (Admin, User)
o Comment: Lưu các bình luận của người dùng về truyện
3.2.2.REST API Endpoints (Controller):
Mỗi Controller chịu trách nhiệm xử lý một nhóm chức năng cụ thể, như:
o BlogController: Quản lý các truyện do người dùng tạo
o UserAdminController: Quản lý danh sách người dùng
o StatisticController: Thống kê dữ liệu
4 PHÂN TÍCH CHỨC NĂNG CHI TIẾT
Trang 114.1 Chức năng Quản trị Blog (Admin)
Xem danh sách truyện
Mô tả: Cho phép Admin quản lý và theo dõi danh sách các truyện hiện có trong hệ thống
Dữ liệu được hiển thị dưới dạng bảng và có hỗ trợ phân trang để dễ dàng quản lý số lượng lớn truyện
Endpoint: GET /admin/blogs
3 Kết quả bao gồm thông tin:
o Tiêu đề truyện (title)
o Tác giả (authorName)
o Danh mục (categoryName)
o Trạng thái (published, draft)
4 Trả kết quả về giao diện adminBlogs.html và gửi kèm dữ liệu cần thiết (danh sách truyện, tổng số trang, số trang hiện tại)
Trang 1211
VÍ DỤ :
Xóa truyện
Mô tả: Admin có quyền xóa các truyện không còn cần thiết Khi xóa, hệ thống cũng đảm
bảo xóa sạch dữ liệu liên quan như danh sách yêu thích hoặc thông tin phụ khác
Endpoint: GET /admin/blogs/delete/{blogId}
Quy trình xử lý:
1 Nhận blogId từ URL (ví dụ: )
2 Gọi blogService.delete(blogId) để xử lý:
o Xóa truyện khỏi bảng blogs
o Gỡ bỏ truyện ra khỏi bảng liên kết user_favorites
o Xóa hình ảnh liên quan đến truyện (nếu có)
3 Sau khi xóa thành công:
o Hiển thị thông báo "Xóa truyện thành công" qua flashMessage
Trang 13Chuyển hướng về danh sách truyện /admin/blogs
Ví dụ thực tế: Trước và sau khi xóa :
Trang 1413
4.2 Ch ức năng Ngườ i dùng (User)
Đăng ký tài khoản
Mô tả: Người dùng tạo tài khoản mới để tham gia sử dụng các tính năng như đọc truyện,
thích truyện, hoặc đăng bài viết
Endpoint: POST /registration
Quy trình xử lý:
1 Người dùng nhập thông tin trong form đăng ký, bao gồm:
o Tên đăng nhậ (username) p
o Mật kh u ẩ (password) và xác nh n m t khậ ậ ẩu (confirmPassword)
o Email (optional)
2 Hệ thống nh n yêu cậ ầu đăng ký và thực ện các bước kiểhi m tra:
o Kiểm tra lỗi nhập liệu:
Tên tài khoản không được rỗng
Mật khẩu và xác nh n m t kh u phậ ậ ẩ ải khớp
Trang 15o Kiểm tra tài kho ản đã tồn tạ : i
Nếu tên tài khoản đã tồ ại trong bản t ng users, hi n th l i: ể ị ỗ
"Tên tài khoản đã tồn tại"
3 Nếu tất cả thông tin h p l : ợ ệ
o Mã hóa m t kh u b ng thuậ ẩ ằ ật toán BCrypt
o Lưu thông tin tài khoản mới vào bảng users
4 Trả ề v thông báo "T o tài kho n thành công" và chuyạ ả ển hướng đến trang đăng nhập /login
Trang 16
15
Thích ho c b thích truy ặ ỏ ện
Mô tả: Người dùng có thể thêm hoặc xóa truyện khỏi danh sách yêu thích cá nhân
Endpoint:
o Thích truyện: GET /blog/like/{blogId}
o B ỏ thích truyện: GET /blog/unlike/{blogId}
Quy trình xử lý:
1. Thích truyện (/blog/like/{blogId} ):
Nhận blogId t URL (ví dừ ụ: /blog/like/123 )
Kiểm tra xem người dùng đã thích truyện này chưa bằng cách tìm trong bảng user_favorites
Nếu chưa thích:
Thêm m t b n ghi m i vào b ng user_favorites v i thông tin: ộ ả ớ ả ớ
C p nhậ ật số lượt thích trong b ng blogs (likes = likes + 1 ả )
Gửi thông báo "Bạn đã thích truyện này"
2. Bỏ thích truyện (/blog/unlike/{blogId} ):
Nhận blogId t URL (ví dừ ụ: /blog/unlike/123 )
Xóa bản ghi tương ứng khỏi bảng user_favorites
C p nhậ ật số lượt thích trong b ng blogs (likes = likes - 1 ả )
Gửi thông báo "Bạn đã bỏthích truyện này"
Ví dụ thực tế:
o Người dùng john_doe thích truyện có ID = 123:
Yêu cầu: GET /blog/like/123
Kết quả:
Trang 17Truyện được thêm vào danh sách yêu thích của john_doe
Tổng lượt thích của truyện tăng thêm 1
Thông báo: "Bạn đã thích truyện này"
Trang 1817
5 KẾT QU Ả CÀI ĐẶT
5.1 Minh h a (demo b ng thuy t trình ) ọ ằ ế
5.2 Hình nh giao di n ả ệ
Trang 2019
Trang 215.3 Đánh giá hiệu quả hoạt động
Hệ thống quản lý blog truyện sau khi triển khai đã đáp ứng các yêu cầu đặt ra:
o Khả năng quản lý: Hỗ trợ quản trị viên dễ dàng theo dõi, chỉnh sửa và thống kê
dữ liệu truyện
o Tương tác người dùng: Độc giả có thể thích, bình luận và khám phá nội dung
mới nhanh chóng
o Hiệu suất: Hệ thống xử lý hàng trăm yêu cầu đồng thời nhờ sử dụng Spring Boot
và các chiến lược tối ưu hóa truy vấn SQL
Một số chỉ số hiệu suất đáng chú ý:
o Thời gian phản hồi trung bình: ~300ms
o Thời gian tải trang: ~1 giây cho các trang có nhiều dữ liệu (danh sách truyện,
danh mục)
6 HƯỚNG PHÁT TRIỂN VÀ CẢI TIẾN
Hệ thống hiện tại có thể mở rộng thêm các tính năng nhằm đáp ứng nhu cầu người dùng tốt hơn:
1. Cải thiện giao diện người dùng (UI/UX):
o Sử dụng React hoặc Angular để phát triển giao diện tương tác cao
o Tích hợp Dark Mode để phù hợp với thị hiếu hiện đại
2. Hỗ trợ đa nền tảng:
o Xây dựng API RESTful hoàn chỉnh để tạo ứng dụng di động
o Đảm bảo tương thích với cả Android và iOS
3. Hệ thống gợi ý thông minh:
o Sử dụng thuật toán Recommendation System (Collaborative Filtering hoặc Content Based) để gợi ý truyện dựa trên sở thích người dùng.-
Trang 2221
4. Tăng cường bảo mật:
o Sử dụng mã hóa mật khẩu mạnh hơn (PBKDF2 hoặc Argon2)
o Tích hợp reCAPTCHA để chống spam
5. Tích hợp phân tích dữ liệu (Analytics):
o Tạo dashboard để quản trị viên dễ dàng theo dõi các xu hướng truyện, người dùng và danh mục phổ biến
6. Tính năng mới cho người dùng:
o Hệ thống thông báo: Cập nhật khi có chương mới hoặc bình luận
o Chế độ lưu offline: Cho phép tải xuống truyện và đọc khi không có mạng
o Hệ thống đánh giá: Thêm sao hoặc nhận xét truyện
7 TÀI LI U THAM KH O Ệ Ả
Spring Boot Documentation
Java SE Documentation
Thymeleaf Official Documentation
Apache Maven Documentation
Validation with Spring Boot
Spring MVC Framework Documentation
Guide to Using H2 Database with Spring Boot
Tutorial : Java Backend Tech28
Backend Github code