Tài liệu chuyên sâu dành cho Backend Engineer → Software Architect. Ngôn ngữ minh họa: Go 1.22+, ưu tiên Standard Library. Triết lý: hiểu bản chất và trade-off, không sao chép template.
Cách đọc
Tài liệu được viết theo chuỗi nhân quả — mỗi chương đứng trên chương trước:
Business Problem → Vì sao code khó bảo trì → Coupling → Dependency → SOLID
→ Clean Architecture ra đời → Dependency Rule → Layer → Production
→ Trade-off → Khi nào KHÔNG nên áp dụngNgười mới nên đọc tuần tự. Người có kinh nghiệm có thể nhảy thẳng vào Level 3–4, nhưng nếu thấy một kết luận thiếu căn cứ — căn cứ nằm ở Level 1.
Mỗi chương đều có: problem statement, giải thích bản chất, code Go hoàn chỉnh, sơ đồ, trade-off, best practices, anti-patterns, và mục “khi nào KHÔNG nên dùng”.
Mục lục
Level 1 — Foundation
| Chương | Nội dung |
|---|---|
| 1.1 Coupling & Cohesion | Gốc rễ của mọi vấn đề kiến trúc; các mức coupling; đo bằng công cụ Go |
| 1.2 SOLID trong Go | Năm quy tắc quản trị phụ thuộc, dịch sang Go idiomatic |
| 1.3 Dependency Inversion | Cỗ máy đảo chiều phụ thuộc — chương then chốt của toàn tài liệu |
| 1.4 Separation of Concerns & Composition | Chọn trục tách; composition thay inheritance trong Go |
Level 2 — Clean Architecture Core & Engineering
| Chương | Nội dung |
|---|---|
| 2.1 Vì sao Clean Architecture ra đời | Lịch sử hội tụ Hexagonal/Onion/DDD; nó hứa gì và không hứa gì |
| 2.2 Dependency Rule | Luật duy nhất; cưỡng chế bằng internal/, linter, test kiến trúc |
| 2.3 Bốn vòng trong Go | Service loyalty hoàn chỉnh: Entity → Use Case → Adapter → Framework |
| 3.1 Tổ chức Package | cmd/, internal/, pkg/; flat vs layer vs feature vs vertical slice |
| 4. Dependency Injection | Manual DI, Wire, Fx; interface placement — bảng tra cứu |
Level 3 — Senior
| Chương | Nội dung |
|---|---|
| 5. Data Access | Repository thật vs wrapper ORM; transaction & Unit of Work; sqlc/pgx/GORM |
| 6. Delivery Layer | HTTP, gRPC, GraphQL, CLI, Worker — N cửa vào, 1 bộ nghiệp vụ |
| 7. Integration | External API, retry/circuit breaker, Kafka vs RabbitMQ, Redis, outbox |
| 8. Testing Strategy | Test theo vòng; fake vs mock; testcontainers; contract test |
| 9. Clean Architecture & DDD | Value Object, Aggregate, Domain Service; thang liều lượng DDD |
| 10. Clean Architecture & CQRS | Command/Query tách đường; các mức CQRS và khi nào leo thang |
| 11. Production Concerns | Config, logging, observability, graceful shutdown, retry, idempotency |
Ví dụ tổng hợp — E-commerce ba giai đoạn
| Chương | Nội dung |
|---|---|
| 12.1 Giai đoạn 1: Monolith | 3 engineer, MVP — Clean Architecture có chọn lọc theo mật độ rule |
| 12.2 Giai đoạn 2: Modular Monolith | 12 engineer — module contract, event + outbox, CQRS, webhook thanh toán |
| 12.3 Giai đoạn 3: Tách service | 40 engineer — lý do đúng/sai để tách; strangler fig; saga |
Level 4 — Principal
| Chương | Nội dung |
|---|---|
| 13. So sánh các kiến trúc | Clean vs Layered vs Hexagonal vs Onion vs MVC vs Modular Monolith vs DDD |
| 14. Evolutionary Architecture & Migration | Fitness function, ADR, refactor legacy quy mô lớn, Conway, hiệu năng, chiến lược migration |
Tóm tắt 10 nguyên tắc của toàn bộ tài liệu
- Coupling = lượng kiến thức module A biết về B; giảm kiến thức, không phải cắt liên lạc.
- Ranh giới đặt theo trục thay đổi; phụ thuộc trỏ về phía ổn định — mọi thứ khác là hệ quả.
- Dependency Rule: mọi mũi tên compile-time trỏ vào domain; control flow không cần đổi.
- Interface thuộc về consumer, nhỏ nhất có thể, nói ngôn ngữ domain, đẻ theo nhu cầu thật.
- Entity giữ bất biến, use case giữ quy trình, adapter phiên dịch, main lắp ráp.
- Lỗi: domain định nghĩa, adapter dịch hai chiều, wrap ở giữa, log một lần ở biên.
- Cross-cutting (log, metric, retry, cache, tx) = decorator/middleware — không rải trong nghiệp vụ.
- Kiến trúc chỉ tồn tại khi được cưỡng chế bằng máy: internal/, depguard, test kiến trúc, CI.
- Nghi thức tỉ lệ với mật độ rule và tuổi thọ hệ thống — CRUD nhỏ thì viết thẳng, và đó là thiết kế đúng.
- Kiến trúc tốt tối đa hóa số quyết định có thể trì hoãn và đảo ngược — monolith → modular → services là con đường, không phải cuộc thi.
Tài liệu biên soạn tháng 7/2026. Code minh họa dùng Go 1.22+.