Một trong những nguyên tắc đầu tiên cần áp dụng khi chúng ta làm các dự án đó là thiết kế. Trong dự án cung cấp các API xác thực này thì chúng ta chỉ có duy nhất một mô đun, nên chúng ta có thể bỏ qua thiết kế mô đun, thay vào đó chúng ta sẽ tập trung vào việc thiết kế gói để chuẩn bị việc cài đặt bằng mã nguồn nhé.
Thiết kế gói
Với gói cơ sở là vn.techmaster chúng ta có thể thiết kế các gói con như sau:
Ở đây chúng ta có các gói với mô tả như sau:
- Gói advice: Chứa lớp xử lý exception cho toàn bộ chương trình.
- Gói config: Chứa các lớp cấu hình cho toàn bộ chương trình.
- Gói constant: Chứa các hằng số sử dụng cho toàn bộ chương trình, trên thực tế thì bất kỳ gói nào cũng có thể sử dụng gói constant này, tuy nhiên mình sẽ không vẽ các mối liên kết vì trông sẽ rất rối và không cần thiết, vì sự phụ thuộc cũng rất nhỏ.
- Gói controller: Chứa các lớp xử lý yêu cầu của người dùng, cung cấp API cho client gọi. Gói này sẽ:
- Xử lý các yêu cầu trong gói request.
- Phản hồi dữ liệu trong gói response.
- Sử dụng gói validator để kiểm tra dữ liệu được yêu cầu.
- Sử dụng gói converter để chuyển đổi dữ liệu.
- Sử dụng gói service để xử lý nghiệp vụ.
- Gói converter: Chứa các lớp chuyển đổi dữ liệu, bản chất nó là interpreter design pattern. Gói converter này chuyển đổi qua lại giữa các đối tượng của các gói request, model, entity, response tuy nhiên mình không vẽ các mối liên kết để tránh làm rối sơ đồ. Cụ thể hơn thì gói converter chuyển đổi:
- Từ request sang model.
- Từ model sang entity.
- Từ entity sang model.
- Từ model sang response.
- Gói entity: Chứa các lớp ánh xạ đến các bảng trong cơ sở dữ liệu, gói này được sử dụng bởi gói repo và service.
- Gói exception: Chứa các lớp exception được sử dụng trong toàn bộ chương trình.
- Gói model: Chứa các lớp dữ liệu trung gian được sử dụng cả ở cả gói service, validator, converter và controller.
- Gói repo: Chứa các lớp đại diện cho các kho dữ liệu (Repository) để tương tác với cơ sở dữ liệu, gói này sử dụng các lớp trong gói entity và được sử dụng bởi gói service
- Gói request: Chứa các lớp ánh xạ với yêu cầu của người dùng, các lớp trong gói này được sử dụng bởi gói controller, validator và converter.
- Gói response: Chứa các lớp ánh xạ với phàn hổi dữ liệu cho người dùng, các lớp trong gói này được sử dụng bởi gói controller, converter.
- Gói service: Chứa các lớp xử lý nghiệp vụ, có thể hiểu các lớp trong gói này là các lớp adapter trong adapter design pattern. Các nghiệp vụ nặng nề nhất sẽ nằm trong gói này. Gói này sử dụng các lớp trong gói repo, model, entity và được sử dụng bởi controller, validator hay các service khác.
- Gói validator: Chứa các lớp kiểm tra tính hợp lệ yêu cầu của người dùng. Gói này sử dụng các lớp trong gói request, service và model.
- Gói gốc vn.techmaster: Chứa lớp khởi động chương trình.
Cấu trúc thư mục
Các gói được phản ánh trên các thư mục trong dự án sẽ như sau:
Tại sao phải phức tạp như vậy?
Sẽ có bạn thắc mắc là tại sao chúng ta không gom chung hết tất cả về một gói, hoặc chỉ nên có một vài gói thôi cho nó đơn giản. Câu trả lời đó là lập trình có những nguyên tắc để đảm bảo cho mã nguồn có thể trong sáng, dễ nâng cấp và sửa đổi sau này cụ thể đó là nguyên tắc S.O.L.I.D nó khuyến khích việc chi nhỏ chương trình thành các gói, các lớp theo các chức năng cụ thể. Một chương trình phức tạp có thể có hàng trăm nghìn, hàng triệu dòng code, lúc đó nếu mọi thứ không được tổ chức tốt sẽ là một thảm hoạ.
Sách tham khảo
Bạn có thể tìm hiểu các design pattern trong cuốn làm chủ các mẫu thiết kế kinh điển trong lập trình và SOLID trong cuốn những nguyên tắc sống còn trong lập trình và đừng quên nhập mã giảm giá Tech10 để được giảm giá 10% nhé.
Tổng kết
Như vậy chúng ta đã cùng nhau thiết kế sơ đồi gói, trong bài tiếp theo chúng ta sẽ đi cài đặt các lớp repository nhé.
Cám ơn bạn đã quan tâm đến bài viết|video này. Để nhận được thêm các kiến thức bổ ích bạn có thể:
- Đọc các bài viết của TechMaster trên facebook: https://www.facebook.com/techmastervn
- Xem các video của TechMaster qua Youtube: https://www.youtube.com/@TechMasterVietnam nếu bạn thấy video/bài viết hay bạn có thể theo dõi kênh của TechMaster để nhận được thông báo về các video mới nhất nhé.
- Chat với techmaster qua Discord: https://discord.gg/yQjRTFXb7a
Bình luận