ai-developer-skill-os 8.1.7 → 8.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/.agents/README.md +3 -3
  2. package/.agents/skills/qk-code-review/SKILL.md +189 -0
  3. package/.agents/skills/qk-code-review/references/ai/ai-anti-patterns.md +28 -0
  4. package/.agents/skills/qk-code-review/references/ai/v8-schema-validation.md +65 -0
  5. package/.agents/skills/qk-code-review/references/cross-cutting/architecture-review-guide.md +212 -0
  6. package/.agents/skills/qk-code-review/references/cross-cutting/async-concurrency-patterns.md +515 -0
  7. package/.agents/skills/qk-code-review/references/cross-cutting/code-quality-universal.md +358 -0
  8. package/.agents/skills/qk-code-review/references/cross-cutting/code-review-best-practices.md +136 -0
  9. package/.agents/skills/qk-code-review/references/cross-cutting/common-bugs-checklist.md +124 -0
  10. package/.agents/skills/qk-code-review/references/cross-cutting/error-handling-principles.md +492 -0
  11. package/.agents/skills/qk-code-review/references/cross-cutting/n-plus-one-queries.md +309 -0
  12. package/.agents/skills/qk-code-review/references/cross-cutting/performance-review-guide.md +387 -0
  13. package/.agents/skills/qk-code-review/references/cross-cutting/security-review-guide.md +318 -0
  14. package/.agents/skills/qk-code-review/references/cross-cutting/sql-injection-prevention.md +308 -0
  15. package/.agents/skills/qk-code-review/references/cross-cutting/xss-prevention.md +264 -0
  16. package/.agents/skills/qk-code-review/references/languages/angular.md +768 -0
  17. package/.agents/skills/qk-code-review/references/languages/c.md +890 -0
  18. package/.agents/skills/qk-code-review/references/languages/cpp.md +893 -0
  19. package/.agents/skills/qk-code-review/references/languages/csharp.md +519 -0
  20. package/.agents/skills/qk-code-review/references/languages/css-less-sass.md +661 -0
  21. package/.agents/skills/qk-code-review/references/languages/django.md +985 -0
  22. package/.agents/skills/qk-code-review/references/languages/fastapi.md +580 -0
  23. package/.agents/skills/qk-code-review/references/languages/go.md +993 -0
  24. package/.agents/skills/qk-code-review/references/languages/java.md +409 -0
  25. package/.agents/skills/qk-code-review/references/languages/java8.md +586 -0
  26. package/.agents/skills/qk-code-review/references/languages/kotlin.md +1018 -0
  27. package/.agents/skills/qk-code-review/references/languages/nestjs.md +593 -0
  28. package/.agents/skills/qk-code-review/references/languages/php.md +684 -0
  29. package/.agents/skills/qk-code-review/references/languages/python.md +1073 -0
  30. package/.agents/skills/qk-code-review/references/languages/qt.md +757 -0
  31. package/.agents/skills/qk-code-review/references/languages/react.md +871 -0
  32. package/.agents/skills/qk-code-review/references/languages/ruby.md +964 -0
  33. package/.agents/skills/qk-code-review/references/languages/rust.md +846 -0
  34. package/.agents/skills/qk-code-review/references/languages/svelte.md +1064 -0
  35. package/.agents/skills/qk-code-review/references/languages/swift.md +936 -0
  36. package/.agents/skills/qk-code-review/references/languages/typescript.md +1016 -0
  37. package/.agents/skills/qk-code-review/references/languages/vue.md +924 -0
  38. package/.agents/skills/qk-code-review/references/languages/zig.md +440 -0
  39. package/README.md +3 -3
  40. package/bin/install.js +44 -3
  41. package/package.json +1 -1
package/.agents/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # 🚀 AI Developer Skill OS (ai-developer-skill-os) v8.1.4
1
+ # 🚀 AI Developer Skill OS (ai-developer-skill-os) v8.1.7
2
2
 
3
- > **v8.1.4 "Agent Engineering OS + Design Intelligence"**
3
+ > **v8.1.7 "Agent Engineering OS + Design Intelligence"**
4
4
 
5
- Hệ sinh thái AI Developer Skill OS đã lột xác hoàn toàn. Từ một bộ "công cụ phân tán" (Toolbox) ở V7, phiên bản V8.1.4 được thiết kế như một **Hệ điều hành khép kín (Agent Engineering OS)**, sở hữu năng lực giám sát, bảo vệ ranh giới quyết định (Decision Boundaries) và được trang bị thêm tầng **Design Intelligence**.
5
+ Hệ sinh thái AI Developer Skill OS đã lột xác hoàn toàn. Từ một bộ "công cụ phân tán" (Toolbox) ở V7, phiên bản V8.1.7 được thiết kế như một **Hệ điều hành khép kín (Agent Engineering OS)**, sở hữu năng lực giám sát, bảo vệ ranh giới quyết định (Decision Boundaries) và được trang bị thêm tầng **Design Intelligence**.
6
6
 
7
7
  ---
8
8
 
@@ -0,0 +1,189 @@
1
+ ---
2
+ # ── Identity ───────────────────────────────────────────────
3
+ name: qk-code-review
4
+ version: 8.0.0
5
+ status: stable
6
+ description: "Elite AI/Code Review System: Kiểm toán, Review code và cấu hình AI với tư duy Architect, áp dụng 4-Phase Review."
7
+ platforms: [antigravity, claude-code, cursor, windsurf, kilo-code]
8
+
9
+ # ── V8: Classification ─────────────────────────────────────
10
+ type: utility
11
+
12
+ intent:
13
+ - code-review
14
+ - quality-assurance
15
+ - architecture-review
16
+ - ai-config-audit
17
+
18
+ complexity:
19
+ level: high
20
+ criteria:
21
+ files_affected: "1-15"
22
+ has_behavior_change: false
23
+ has_external_dependency: false
24
+ has_breaking_change: false
25
+
26
+ triggers:
27
+ - "review code"
28
+ - "code review"
29
+ - "kiểm tra code"
30
+ - "đánh giá code"
31
+ - "review skin"
32
+ - "review rule"
33
+ - "review ai"
34
+
35
+ selection:
36
+ priority: high
37
+ confidence_threshold: 0.85
38
+
39
+ # ── V8: References ─────────────────────────────────────────
40
+ workflow: code-review
41
+
42
+ rules:
43
+ - global
44
+
45
+ tools:
46
+ - filesystem
47
+
48
+ related_skills:
49
+ - qk-validation-gate
50
+ - qk-engineering-standard
51
+ - qk-project-health
52
+
53
+ knowledge_scope:
54
+ owns:
55
+ - code-review-standards
56
+ - ai-configuration-review
57
+ - feedback-delivery
58
+ references:
59
+ - architecture
60
+ - security-best-practices
61
+
62
+ # ── V8: Verification ───────────────────────────────────────
63
+ verification:
64
+ required: true
65
+ strategy: review
66
+
67
+ # ── V8: Knowledge links ────────────────────────────────────
68
+ examples: []
69
+ learnings: []
70
+
71
+ # ── V7 Runtime ─────────────────────────────────────────────
72
+ execution_mode: deterministic
73
+ cost: high
74
+ latency: medium
75
+ risk: low
76
+ side_effects: read_only
77
+ produces: [report]
78
+ consumes: [source-code, rules, workflows]
79
+
80
+ token_budget:
81
+ max_files_read: 10
82
+ max_lines_per_read: 300
83
+ max_shell_commands: 2
84
+ stop_early: false
85
+
86
+ exit_codes: [SUCCESS, BLOCKED, FAILED, PARTIAL]
87
+ ---
88
+
89
+ # qk-code-review — Elite Review System
90
+
91
+ > **Language rule:** Code, identifiers, file names → English. Explanations, summaries → Vietnamese.
92
+
93
+ Biến quá trình Code Review từ "bắt bẻ" (gatekeeping) thành "chia sẻ tri thức" (knowledge sharing) thông qua phản hồi mang tính xây dựng, phân tích có hệ thống và hợp tác cải tiến.
94
+
95
+ ---
96
+
97
+ ## Preconditions
98
+
99
+ - [ ] Xác định rõ đối tượng cần review: Mã nguồn phần mềm (React, Java, etc.) hay Cấu hình AI (Skin, Rules, Workflows).
100
+ - [ ] Cung cấp ngữ cảnh hoặc mục tiêu của đoạn code/cấu hình cần review.
101
+
102
+ ```
103
+ On missing precondition → EXIT: BLOCKED
104
+ Report: "Missing: Vui lòng cung cấp ngữ cảnh hoặc chỉ định rõ file cần review."
105
+ ```
106
+
107
+ ---
108
+
109
+ ## Dynamic Context Loading (Tải Ngữ Cảnh Động)
110
+
111
+ > **BẮT BUỘC:** Trước khi bắt đầu review, Agent phải sử dụng tool `view_file` để nạp các bí kíp tương ứng từ thư mục `references/` nhằm đảm bảo chất lượng review sâu sát nhất.
112
+
113
+ - **Nếu review AI Config (Skin, Rule, Workflow):**
114
+ - Mở đọc: `references/ai/v8-schema-validation.md` và `references/ai/ai-anti-patterns.md`.
115
+ - **Nếu review Code Phần mềm (VD: React, Java, Go, v.v.):**
116
+ - Nhận diện ngôn ngữ/framework.
117
+ - Mở đọc file tương ứng: `references/languages/[tên-ngôn-ngữ].md` (VD: `react.md`, `java.md`).
118
+ - **Nếu review ở mức tổng quát hoặc PR lớn (Cross-cutting):**
119
+ - Đọc thêm: `references/cross-cutting/architecture-review-guide.md`, hoặc các file về security/performance nếu phù hợp.
120
+
121
+ ---
122
+
123
+ ## 4-Phase Review Process
124
+
125
+ Là một AI Architect, quá trình review phải tuân thủ nghiêm ngặt 4 giai đoạn sau:
126
+
127
+ ### Phase 1: Context Gathering & Loading (Thu thập & Nạp Ngữ Cảnh)
128
+ - Đọc file mô tả (PR, Issue) hoặc yêu cầu của người dùng.
129
+ - **Thực thi Dynamic Context Loading** (đọc các file reference cần thiết như đã định nghĩa ở trên).
130
+
131
+ ### Phase 2: High-Level Review (Kiến trúc & Chuẩn mực)
132
+ - **Đối với AI Config:** Kiểm tra cấu trúc V8 (Identity, Intent, Complexity, Triggers).
133
+ - **Đối với Code Phần mềm:** Kiểm tra SOLID, Coupling/Cohesion, Performance, Security (Tham chiếu theo `cross-cutting` guides).
134
+
135
+ ### Phase 3: Deep-dive & Logic Review (Phân tích chi tiết)
136
+ - **Đối với AI Config:** Kiểm tra rủi ro "ảo giác" (hallucination), token abuse, side-effects, stop_early.
137
+ - **Đối với Code Phần mềm:** Rà soát edge cases, lỗi logic chuyên sâu theo từng ngôn ngữ (Tham chiếu theo `languages` guides).
138
+
139
+ ### Phase 4: Summary & Decision (Tổng hợp & Quyết định)
140
+ - Đưa ra báo cáo theo `Output Format`.
141
+ - Gắn nhãn `Severity Tags` rõ ràng.
142
+
143
+ ---
144
+
145
+ ## Feedback Principles (Nguyên tắc Phản hồi)
146
+
147
+ - **Collaborative Language (Ngôn từ hợp tác)**: Thay vì ra lệnh ("Sửa cái này thành X", "Bỏ dòng này đi"), hãy dùng câu hỏi gợi mở ("Nếu chúng ta dùng X ở đây thì có tối ưu hiệu năng hơn không?", "Có vẻ logic này bị lặp, chúng ta extract nó ra hàm riêng được không?").
148
+ - **Differentiate Severity (Phân biệt mức độ)**: Bắt buộc sử dụng các nhãn sau để phân loại mức độ phản hồi:
149
+ - 🔴 `[blocking]` - Lỗi nghiêm trọng (VD: Security flaw, thiếu token_budget). Bắt buộc phải sửa.
150
+ - 🟡 `[important]` - Lỗi quan trọng (VD: Performance leak, trigger quá rộng). Nên sửa hoặc cần thảo luận.
151
+ - 🟢 `[nit]` - Cải thiện nhỏ (VD: Lỗi chính tả, format, naming). Không bắt buộc.
152
+ - 💡 `[suggestion]` - Cách tiếp cận hoặc thư viện thay thế để tham khảo.
153
+ - 📚 `[learning]` - Giải thích nguyên lý (Why) để chia sẻ kiến thức, không yêu cầu hành động.
154
+ - 🎉 `[praise]` - Lời khen cho đoạn code / logic thiết kế tốt.
155
+
156
+ ---
157
+
158
+ ## Output Format
159
+
160
+ ```markdown
161
+ ## qk-code-review Report
162
+ ─────────────────────────────────────────────────
163
+ **Target:** [Tên file / Chức năng]
164
+ **Status:** SUCCESS | BLOCKED | FAILED | PARTIAL
165
+
166
+ ### 📊 Executive Summary
167
+ [1-2 câu tóm tắt chất lượng tổng thể của mã nguồn/cấu hình. VD: "Kiến trúc rõ ràng, nhưng tiềm ẩn rủi ro lặp vô hạn ở dòng 45."]
168
+
169
+ ### 🔍 Findings & Recommendations
170
+
171
+ [Nhóm các findings theo mức độ nghiêm trọng giảm dần. LUÔN đính kèm snippet / file line nếu có thể]
172
+
173
+ - 🔴 `[blocking]`: [Vấn đề nghiêm trọng]
174
+ - *Location*: `file.ts:L45`
175
+ - *Feedback*: [Câu hỏi/Gợi ý sửa chữa]
176
+
177
+ - 🟡 `[important]`: [Vấn đề quan trọng]
178
+ - 💡 `[suggestion]`: [Gợi ý cải thiện]
179
+ - 🟢 `[nit]`: [Góp ý nhỏ]
180
+ - 🎉 `[praise]`: [Khen ngợi]
181
+
182
+ ### 🛠️ Suggested Fixes (Optional)
183
+ [Cung cấp Code diff hoặc YAML chuẩn xác để user dễ dàng copy & paste. TUYỆT ĐỐI KHÔNG tự sửa file nếu user chưa yêu cầu]
184
+
185
+ ### ✅ Verdict
186
+ - [ ] Approve (Có thể merge/deploy ngay)
187
+ - [ ] Changes Requested (Cần sửa các mục `[blocking]`)
188
+ - [ ] Comment (Chỉ là gợi ý, quyền quyết định ở user)
189
+ ```
@@ -0,0 +1,28 @@
1
+ # AI Agent Anti-Patterns
2
+
3
+ Khi review các cấu hình AI (Skills, Rules, Workflows), hãy lưu ý các "Code Smells" hoặc Anti-patterns phổ biến sau đây:
4
+
5
+ ## 1. Mất kiểm soát Token (Token Abuse)
6
+ - **Dấu hiệu**: Không định nghĩa `token_budget`, hoặc định nghĩa `max_files_read: 50`, `max_lines_per_read: 1000`.
7
+ - **Rủi ro**: Agent sẽ đọc lướt quá nhiều file, làm cạn kiệt context window, dẫn đến "ảo giác" (hallucination) và tốn kém chi phí.
8
+ - **Cách khắc phục**: Ép buộc một giới hạn cứng hợp lý (VD: `max_files_read: 3`, `max_lines_per_read: 150`). Bắt buộc agent dùng `grep` thay vì `read_file` toàn bộ.
9
+
10
+ ## 2. Phạm vi quá rộng (Scope Creep)
11
+ - **Dấu hiệu**: Phần `Scope` hoặc `Intent` bao gồm quá nhiều chức năng không liên quan (VD: Vừa viết code, vừa test, vừa deploy, vừa viết docs).
12
+ - **Rủi ro**: Agent mất tập trung, không biết ưu tiên tác vụ nào, thường xuyên bỏ dở công việc giữa chừng.
13
+ - **Cách khắc phục**: Áp dụng nguyên tắc Single Responsibility. Tách thành nhiều skill nhỏ và dùng Orchestrator hoặc Workflow để phối hợp. Yêu cầu làm rõ mục `This skill does NOT`.
14
+
15
+ ## 3. Lạm dụng quyền thực thi (Unsafe Side-Effects)
16
+ - **Dấu hiệu**: Cấu hình `side_effects: run_commands` nhưng không có Verification Gate hoặc không bắt buộc user approval.
17
+ - **Rủi ro**: Có thể vô tình xóa file (`rm -rf`), chạy mã độc, hoặc làm hỏng môi trường phát triển của User.
18
+ - **Cách khắc phục**: Đánh giá Risk level (High/Medium). Nếu có `run_commands`, phải ép buộc chạy ở môi trường giả lập (sandbox) hoặc chỉ sinh ra script để user tự chạy (Dry-run mode).
19
+
20
+ ## 4. Thiếu điều kiện tiền quyết (Missing Preconditions)
21
+ - **Dấu hiệu**: Bỏ trống phần `Preconditions`, agent lao vào thực thi ngay lập tức.
22
+ - **Rủi ro**: Chạy sai ngữ cảnh, sửa bậy bạ vào mã nguồn khi chưa đủ thông tin, tốn token vô ích.
23
+ - **Cách khắc phục**: Bắt buộc phải có `EXIT: BLOCKED` nếu thiếu thông tin đầu vào quan trọng (ví dụ: thiếu file config, thiếu đường dẫn dự án).
24
+
25
+ ## 5. Prompt mang tính "Bức ép" (Aggressive Prompts)
26
+ - **Dấu hiệu**: Dùng nhiều từ in hoa "MUST", "DO NOT", "NEVER" nhưng thiếu giải thích nguyên lý (Why).
27
+ - **Rủi ro**: LLM (Large Language Model) thường bị over-constrained (bị kìm kẹp quá mức), dẫn đến việc từ chối trả lời (refusal) hoặc phản hồi cứng nhắc, mất đi khả năng sáng tạo.
28
+ - **Cách khắc phục**: Chuyển từ "Cấm làm X" sang "Chỉ làm X khi Y, vì Z". Cung cấp `examples` cụ thể thay vì cấm đoán suông.
@@ -0,0 +1,65 @@
1
+ # V8 Schema Validation Guide
2
+
3
+ Tài liệu này dùng để đối chiếu khi review các file `SKILL.md` hoặc các file cấu hình AI khác trong dự án. Đảm bảo mọi cấu hình tuân thủ chặt chẽ định dạng và kiến trúc của V8 Skin.
4
+
5
+ ## 1. Frontmatter (YAML Metadata) Bắt buộc
6
+
7
+ Mọi file `SKILL.md` **phải** bắt đầu bằng khối YAML chứa các thông tin sau:
8
+
9
+ ```yaml
10
+ ---
11
+ # ── Identity ───────────────────────────────────────────────
12
+ name: qk-[tên-skill] # Bắt buộc có tiền tố qk-
13
+ version: [X.Y.Z] # Phiên bản semantic
14
+ status: [stable/beta/draft]
15
+ description: "[Mô tả ngắn gọn bằng tiếng Việt]"
16
+ platforms: [danh sách platform hỗ trợ]
17
+
18
+ # ── V8: Classification ─────────────────────────────────────
19
+ type: [utility/capability/orchestrator]
20
+ intent:
21
+ - [mục-đích-chính]
22
+
23
+ complexity:
24
+ level: [low/medium/high/critical]
25
+ criteria:
26
+ files_affected: "[range]"
27
+ # ... các criteria khác
28
+
29
+ triggers: # Rất quan trọng, bắt buộc có
30
+ - "[từ khóa 1]"
31
+ - "[từ khóa 2]"
32
+
33
+ # ── V7 Runtime ─────────────────────────────────────────────
34
+ # Phần này cấu hình cách Agent thực thi
35
+ side_effects: [read_only/edit_files/run_commands]
36
+ produces: [...]
37
+ consumes: [...]
38
+
39
+ token_budget: # Bắt buộc để tránh cạn kiệt Token
40
+ max_files_read: [số]
41
+ max_lines_per_read: [số]
42
+ max_shell_commands: [số]
43
+ stop_early: [true/false]
44
+
45
+ exit_codes: [SUCCESS, BLOCKED, FAILED, PARTIAL]
46
+ ---
47
+ ```
48
+
49
+ ## 2. Các phần Body (Markdown) Bắt buộc
50
+
51
+ 1. **Title & Language Rule**: Ngay sau frontmatter, phải có tiêu đề và rule ngôn ngữ chuẩn:
52
+ ```markdown
53
+ > **Language rule:** Code, identifiers, file names → English. Explanations, summaries → Vietnamese.
54
+ ```
55
+ 2. **Preconditions**: Định nghĩa rõ điều kiện tiên quyết để skill này có thể chạy. Phải mô tả hành động (thường là `EXIT: BLOCKED`) nếu thiếu thông tin.
56
+ 3. **Scope (What it does / What it does NOT)**: Phải rõ ràng giới hạn của skill. Đặc biệt phần `Does NOT` để ngăn scope creep.
57
+ 4. **Output Format**: Format chuẩn mà AI sẽ phản hồi lại cho user sau khi thực thi.
58
+
59
+ ## 3. Checklist khi Review
60
+
61
+ - [ ] Tiền tố tên có đúng chuẩn (`qk-`) không?
62
+ - [ ] Triggers có bao phủ đủ các cách gọi thông dụng không? Có bị trùng lặp với skill khác không?
63
+ - [ ] `token_budget` có được cấu hình hợp lý so với `complexity` không? (Ví dụ: complexity low nhưng lại cho đọc 50 files là sai).
64
+ - [ ] Nếu `side_effects` là `run_commands` hoặc `edit_files`, phần Preconditions đã đủ chặt chẽ chưa?
65
+ - [ ] Format đầu ra (Output format) có chuẩn mực và chuyên nghiệp không?
@@ -0,0 +1,212 @@
1
+ # Architecture Review Guide
2
+
3
+ Hướng dẫn đánh giá thiết kế kiến trúc, giúp xác định xem kiến trúc của mã nguồn có hợp lý và thiết kế có chuẩn xác hay không.
4
+
5
+ ## Kiểm tra nguyên tắc SOLID
6
+
7
+ ### S - Single Responsibility Principle (SRP - Nguyên tắc đơn trách nhiệm)
8
+
9
+ **Kiểm tra trọng tâm:**
10
+ - Class/Module này có chỉ duy nhất một lý do để thay đổi không?
11
+ - Các phương thức trong Class có cùng phục vụ cho một mục đích không?
12
+ - Nếu phải mô tả Class này cho một người không rành kỹ thuật, bạn có thể nói rõ trong một câu không?
13
+
14
+ **Dấu hiệu nhận biết (Code Smells):**
15
+ ```text
16
+ ⚠️ Tên Class chứa các từ mang tính chung chung như "And", "Manager", "Handler", "Processor".
17
+ ⚠️ Một Class vượt quá 200-300 dòng code.
18
+ ⚠️ Class có hơn 5-7 phương thức public.
19
+ ⚠️ Các phương thức khác nhau thao tác trên các tập dữ liệu hoàn toàn khác nhau.
20
+ ```
21
+
22
+ **Câu hỏi Review:**
23
+ - "Class này chịu trách nhiệm những việc gì? Có thể chia nhỏ được không?"
24
+ - "Nếu yêu cầu X thay đổi, những phương thức nào cần sửa? Nếu yêu cầu Y thay đổi thì sao?"
25
+
26
+ ### O - Open/Closed Principle (OCP - Nguyên tắc đóng/mở)
27
+
28
+ **Kiểm tra trọng tâm:**
29
+ - Khi thêm tính năng mới, có cần phải sửa đổi code hiện tại không?
30
+ - Có thể thêm hành vi mới thông qua việc mở rộng (inheritance, composition) không?
31
+ - Có tồn tại quá nhiều câu lệnh `if/else` hoặc `switch` để xử lý các type (loại) khác nhau không?
32
+
33
+ **Dấu hiệu nhận biết:**
34
+ ```text
35
+ ⚠️ Chuỗi switch/if-else dài để xử lý các loại (types) khác nhau.
36
+ ⚠️ Thêm tính năng mới đòi hỏi phải sửa đổi core class.
37
+ ⚠️ Rải rác các lệnh kiểm tra kiểu dữ liệu (instanceof, typeof) khắp mọi nơi.
38
+ ```
39
+
40
+ **Câu hỏi Review:**
41
+ - "Nếu muốn thêm một type X mới, chúng ta phải sửa những file nào?"
42
+ - "Khối lệnh switch này có phình to ra khi chúng ta có thêm type mới không?"
43
+
44
+ ### L - Liskov Substitution Principle (LSP - Nguyên tắc thay thế Liskov)
45
+
46
+ **Kiểm tra trọng tâm:**
47
+ - Subclass (lớp con) có thể thay thế hoàn toàn cho Parent class (lớp cha) khi sử dụng không?
48
+ - Subclass có làm thay đổi hành vi dự kiến của các phương thức ở Parent class không?
49
+ - Subclass có throw ra các exception mà Parent class chưa từng khai báo không?
50
+
51
+ **Dấu hiệu nhận biết:**
52
+ ```text
53
+ ⚠️ Ép kiểu tường minh (Explicit casting).
54
+ ⚠️ Phương thức ở Subclass ném ra lỗi `NotImplementedException`.
55
+ ⚠️ Phương thức ở Subclass để trống hoặc chỉ có `return`.
56
+ ⚠️ Nơi sử dụng Base class bắt buộc phải kiểm tra type cụ thể của nó.
57
+ ```
58
+
59
+ **Câu hỏi Review:**
60
+ - "Nếu dùng Subclass thay cho Parent class, đoạn code gọi (caller) có cần phải thay đổi không?"
61
+ - "Hành vi của phương thức này trong Subclass có tuân thủ đúng contract của Parent class không?"
62
+
63
+ ### I - Interface Segregation Principle (ISP - Nguyên tắc phân tách Interface)
64
+
65
+ **Kiểm tra trọng tâm:**
66
+ - Interface đã đủ nhỏ và tập trung chưa?
67
+ - Class implement (thực thi) có bị ép buộc phải code những phương thức mà nó không cần không?
68
+ - Client có phụ thuộc vào những phương thức mà nó không hề dùng tới không?
69
+
70
+ **Dấu hiệu nhận biết:**
71
+ ```text
72
+ ⚠️ Interface có hơn 5-7 phương thức.
73
+ ⚠️ Class implement có các phương thức rỗng hoặc ném `NotImplementedException`.
74
+ ⚠️ Tên Interface quá rộng (IManager, IService).
75
+ ⚠️ Các Client khác nhau chỉ sử dụng một phần phương thức của Interface.
76
+ ```
77
+
78
+ **Câu hỏi Review:**
79
+ - "Tất cả các phương thức của Interface này có thực sự được dùng bởi từng Class implement không?"
80
+ - "Có thể chia Interface lớn này thành các Interface nhỏ, chuyên biệt hơn không?"
81
+
82
+ ### D - Dependency Inversion Principle (DIP - Nguyên tắc đảo ngược phụ thuộc)
83
+
84
+ **Kiểm tra trọng tâm:**
85
+ - Module cấp cao có phụ thuộc vào Abstraction (trừu tượng) thay vì Implementation (thực thi chi tiết) không?
86
+ - Có sử dụng Dependency Injection thay vì trực tiếp `new` Object không?
87
+ - Abstraction có được định nghĩa bởi Module cấp cao thay vì Module cấp thấp không?
88
+
89
+ **Dấu hiệu nhận biết:**
90
+ ```text
91
+ ⚠️ Module cấp cao trực tiếp `new` các Class cụ thể của Module cấp thấp.
92
+ ⚠️ Import thẳng Class thực thi thay vì Interface/Abstract class.
93
+ ⚠️ Cấu hình và chuỗi kết nối (connection strings) bị hardcode trong business logic.
94
+ ⚠️ Rất khó để viết Unit Test cho một Class cụ thể.
95
+ ```
96
+
97
+ **Câu hỏi Review:**
98
+ - "Các phụ thuộc (dependencies) của Class này có thể được mock khi viết test không?"
99
+ - "Nếu muốn đổi sang một Database/API khác, sẽ phải sửa bao nhiêu chỗ?"
100
+
101
+ ---
102
+
103
+ ## Nhận diện các Anti-patterns Kiến trúc
104
+
105
+ ### Các Anti-patterns Chí mạng (Fatal)
106
+
107
+ | Anti-pattern | Dấu hiệu nhận biết (Signals) | Hệ quả |
108
+ |--------|----------|------|
109
+ | **Big Ball of Mud** | Không có ranh giới module rõ ràng, bất kỳ code nào cũng có thể gọi đoạn code khác. | Khó hiểu, khó sửa, khó test. |
110
+ | **God Object** | Một Class gánh quá nhiều trách nhiệm, biết quá nhiều, làm quá nhiều. | Coupling cao, khó tái sử dụng và test. |
111
+ | **Spaghetti Code** | Luồng điều khiển rối rắm, lạm dụng `goto` hoặc lồng (nesting) quá sâu, khó theo dõi đường thực thi. | Khó bảo trì. |
112
+ | **Lava Flow** | Code cổ đại không ai dám đụng vào, thiếu tài liệu và test. | Tích tụ nợ kỹ thuật (Tech Debt). |
113
+
114
+ ### Các Anti-patterns Thiết kế (Design)
115
+
116
+ | Anti-pattern | Dấu hiệu nhận biết (Signals) | Lời khuyên |
117
+ |--------|----------|------|
118
+ | **Golden Hammer** | Dùng chung một công nghệ/design pattern cho tất cả mọi vấn đề. | Chọn giải pháp phù hợp với từng bài toán. |
119
+ | **Gas Factory (Over-engineering)** | Giải quyết vấn đề đơn giản bằng giải pháp phức tạp, lạm dụng Design patterns. | Tuân thủ YAGNI, làm từ đơn giản đến phức tạp. |
120
+ | **Boat Anchor** | Viết code "phòng hờ cho tương lai" nhưng hiện tại không dùng tới. | Xóa code không dùng, khi nào cần thì viết lại. |
121
+ | **Copy-Paste Programming** | Một logic xuất hiện ở nhiều nơi. | Đưa thành phương thức chung hoặc module chung. |
122
+
123
+ ---
124
+
125
+ ## Đánh giá Coupling (Độ kết dính) và Cohesion (Độ gắn kết)
126
+
127
+ ### Các loại Coupling (Từ Tốt đến Xấu)
128
+
129
+ | Loại | Mô tả | Ví dụ |
130
+ |------|------|------|
131
+ | **Message Coupling** ✅ | Truyền dữ liệu qua tham số | `calculate(price, quantity)` |
132
+ | **Data Coupling** ✅ | Chia sẻ cấu trúc dữ liệu đơn giản | `processOrder(orderDTO)` |
133
+ | **Stamp Coupling** ⚠️ | Truyền cấu trúc dữ liệu phức tạp nhưng chỉ xài 1 phần | Truyền cả Object `User` nhưng chỉ dùng `name` |
134
+ | **Control Coupling** ⚠️ | Truyền cờ (flags) điều khiển hành vi | `process(data, isAdmin=true)` |
135
+ | **Common Coupling** ❌ | Chia sẻ biến toàn cục (global state) | Nhiều module cùng đọc/ghi chung một global state |
136
+ | **Content Coupling** ❌ | Truy cập trực tiếp vào bên trong module khác | Thao tác trực tiếp với private properties của class khác |
137
+
138
+ ### Các loại Cohesion (Từ Tốt đến Xấu)
139
+
140
+ | Loại | Mô tả | Đánh giá |
141
+ |------|------|------|
142
+ | **Functional Cohesion** | Mọi thành phần cùng thực hiện MỘT nhiệm vụ duy nhất | ✅ Tốt nhất |
143
+ | **Sequential Cohesion** | Output của bước này là Input của bước sau | ✅ Tốt |
144
+ | **Communicational Cohesion** | Thao tác trên cùng một cấu trúc dữ liệu | ⚠️ Chấp nhận được |
145
+ | **Temporal Cohesion** | Các tác vụ thực thi cùng một thời điểm | ⚠️ Khá kém |
146
+ | **Logical Cohesion** | Có liên quan về mặt logic nhưng khác biệt chức năng | ❌ Kém |
147
+ | **Coincidental Cohesion** | Không hề có sự liên quan nào | ❌ Tệ nhất |
148
+
149
+ ---
150
+
151
+ ## Đánh giá Clean Architecture (Kiến trúc phân lớp)
152
+
153
+ ### Cấu trúc các Lớp
154
+
155
+ ```text
156
+ ┌─────────────────────────────────────┐
157
+ │ Frameworks & Drivers │ ← Lớp ngoài cùng: Web, DB, UI
158
+ ├─────────────────────────────────────┤
159
+ │ Interface Adapters │ ← Controllers, Gateways, Presenters
160
+ ├─────────────────────────────────────┤
161
+ │ Application Layer │ ← Use Cases, Application Services
162
+ ├─────────────────────────────────────┤
163
+ │ Domain Layer │ ← Entities, Domain Services
164
+ └─────────────────────────────────────┘
165
+ ↑ Hướng phụ thuộc (Dependency Rule) CHỈ ĐƯỢC hướng vào trong ↑
166
+ ```
167
+
168
+ ### Quy tắc Phụ thuộc (Dependency Rule)
169
+
170
+ **QUY TẮC CỐT LÕI: Mã nguồn chỉ được phép phụ thuộc hướng vào lớp bên trong.**
171
+
172
+ ```typescript
173
+ // ❌ VI PHẠM: Domain layer phụ thuộc vào Infrastructure
174
+ // domain/User.ts
175
+ import { MySQLConnection } from '../infrastructure/database';
176
+
177
+ // ✅ CHUẨN XÁC: Domain layer định nghĩa Interface, Infrastructure thực thi nó
178
+ // domain/UserRepository.ts (Interface)
179
+ interface UserRepository {
180
+ findById(id: string): Promise<User>;
181
+ }
182
+
183
+ // infrastructure/MySQLUserRepository.ts (Implementation)
184
+ class MySQLUserRepository implements UserRepository {
185
+ findById(id: string): Promise<User> { /* ... */ }
186
+ }
187
+ ```
188
+
189
+ ### Checklist Đánh giá
190
+ - [ ] Lớp **Domain** có dính líu gì tới các phụ thuộc bên ngoài (DB, HTTP, File system) không?
191
+ - [ ] Lớp **Application** có thao tác trực tiếp với DB hay gọi external API không?
192
+ - [ ] Lớp **Controller** có chứa Business Logic không?
193
+ - [ ] Có tồn tại việc gọi vượt lớp (VD: UI gọi thẳng Repository) không?
194
+
195
+ ---
196
+
197
+ ## Checklist Nhanh (5 phút review)
198
+
199
+ ```markdown
200
+ □ Hướng phụ thuộc có chính xác không? (Lớp ngoài gọi lớp trong).
201
+ □ Có bị Dependency Cycle (phụ thuộc vòng tròn) không?
202
+ □ Business Logic cốt lõi đã tách bạch khỏi UI/Framework/Database chưa?
203
+ □ Có vi phạm nguyên tắc SOLID không?
204
+ □ Có các Anti-patterns lộ liễu nào không?
205
+ ```
206
+
207
+ ### Red Flags 🔴 (Bắt buộc sửa)
208
+ - God Object: Class lớn hơn 1000 dòng.
209
+ - Circular Dependency: A → B → C → A.
210
+ - Tầng Domain chứa thư viện của Framework.
211
+ - Hardcode Config / API Keys trong source code.
212
+ - Gọi External Services mà không qua Interface.