(GOLANG) REST API theo kiến trúc Clean Architecture

 ┌────────────────────────────────────────┐

│             Framework (Gin)           │ ◄── handler / transport

└────────────────────────────────────────┘

                │

                ▼

┌────────────────────────────────────────┐

│       Use Case / Business Rules        │ ◄── biz

└────────────────────────────────────────┘

                │

                ▼

┌────────────────────────────────────────┐

│         Interface Adapters (DB)        │ ◄── storage

└────────────────────────────────────────┘

                │

                ▼

┌────────────────────────────────────────┐

│         Entities / Models              │ ◄── model

└────────────────────────────────────────┘

1. Xác định Usecase:

Usecase chứa logic nghiệp vụ, chính là tầng Business, do đó cần xác định API này làm gì, ví dụ API lấy ra Item theo ID (GetItemById).


2. Tạo Model/DTO (Data transfer object)

- Tạo Struct đại diện cho dữ liệu kèm phương thức ánh xạ struct vào bảng tương ứng của cơ sở dũ liệu. -- -  Nếu một số trường lặp đi lặp lại cho các bảng thì có thể tách riêng ra một file ở package common để dùng chung ( ví dụ Id, Created At, Updated At...)



- Tạo các Request/Response struct (tạo riêng một package common)


3. Viết Interface và Business Logic cho tầng Storage (tại tầng Biz - Business)

- Sử dụng Composition theo nguyên lý thứ 5 của SOLID nhằm tách biệt tầng Biz và Storage
- Cần phân biệt rõ Logic nghiệp vụ (busines) và Logic ràng buộc dữ liệu:
Ví dụ: Tại tầng Business yêu cầu tạo tài khoản mà trường age >18, nhưng tại database thì age > 0 vì age = 0 hoặc age < 0 thì vô lý.



4. Cài đặt tương tác DB tại tấng Storage
- Tạo file sql.go tương tác với database cho toàn bộ API


- Phương thức thao tác với Database"


5. Viết Handler/Transport

- Kiểm tra ID có tồn tại không
- Khởi tạo các Dependency Injection
- Trả về lỗi hoặc data theo yêu cầu từ lớp Business


6. Đăng ký Route
 









Comments

Popular posts from this blog

Cách vượt qua cơn buồn chán hay là bạn đang quá rảnh mà không biết làm gì.

Đêm qua sân trước một nhành mai