Files
app-store-optimization/docs/vietnamese/skills/clean-code/SKILL.vi.md

201 lines
8.1 KiB
Markdown

---
name: clean-code
description: Tiêu chuẩn code thực dụng - súc tích, trực tiếp, không kỹ thuật quá mức, không có comments thừa thãi.
allowed-tools: Read, Write, Edit
version: 2.0
priority: CRITICAL
---
# Clean Code - Tiêu chuẩn Coding AI Thực dụng
> **KỸ NĂNG QUAN TRỌNG** - Hãy **súc tích, trực tiếp và tập trung vào giải pháp**.
---
## Các Nguyên tắc Cốt lõi
| Nguyên tắc | Quy tắc |
|-----------|------|
| **SRP** | Trách nhiệm Duy nhất (Single Responsibility) - mỗi hàm/lớp làm MỘT việc |
| **DRY** | Đừng Lặp lại Chính mình (Don't Repeat Yourself) - trích xuất phần trùng lặp, tái sử dụng |
| **KISS** | Giữ nó Đơn giản (Keep It Simple) - giải pháp đơn giản nhất có thể hoạt động |
| **YAGNI** | Bạn Sẽ Không Cần Nó Đâu (You Aren't Gonna Need It) - đừng xây dựng tính năng chưa dùng đến |
| **Hướng đạo sinh** | Để lại code sạch hơn lúc bạn tìm thấy nó |
---
## Quy tắc Đặt tên
| Thành phần | Quy ước |
|---------|------------|
| **Biến** | Bộc lộ ý định: `userCount` không phải `n` |
| **Hàm** | Động từ + danh từ: `getUserById()` không phải `user()` |
| **Booleans** | Dạng câu hỏi: `isActive`, `hasPermission`, `canEdit` |
| **Hằng số** | SCREAMING_SNAKE: `MAX_RETRY_COUNT` |
> **Quy tắc:** Nếu bạn cần comment để giải thích tên, hãy đổi tên nó.
---
## Quy tắc Hàm (Function)
| Quy tắc | Mô tả |
|------|-------------|
| **Nhỏ** | Tối đa 20 dòng, lý tưởng là 5-10 dòng |
| **Một việc** | Làm một việc, làm tốt việc đó |
| **Một cấp độ** | Một cấp độ trừu tượng trên mỗi hàm |
| **Ít tham số** | Tối đa 3 tham số, ưu tiên 0-2 |
| **Không tác dụng phụ** | Không thay đổi đầu vào một cách bất ngờ |
---
## Cấu trúc Code
| Mẫu | Áp dụng |
|---------|-------|
| **Guard Clauses** | Return sớm cho các trường hợp biên |
| **Phẳng > Lồng nhau** | Tránh lồng nhau sâu (tối đa 2 cấp) |
| **Kết hợp (Composition)** | Các hàm nhỏ kết hợp lại với nhau |
| **Đặt cùng nhau (Colocation)** | Giữ code liên quan ở gần nhau |
---
## Phong cách Coding của AI
| Tình huống | Hành động |
|-----------|--------|
| Người dùng yêu cầu tính năng | Viết nó trực tiếp |
| Người dùng báo lỗi | Sửa nó, đừng giải thích lòng vòng |
| Không rõ yêu cầu | Hỏi, đừng giả định |
---
## Anti-Patterns (KHÔNG NÊN)
| ❌ Mẫu | ✅ Cách sửa |
|-----------|-------|
| Comment mỗi dòng | Xóa comment hiển nhiên |
| Helper cho code 1 dòng | Viết thẳng code (Inline) |
| Factory cho 2 objects | Khởi tạo trực tiếp |
| utils.ts với 1 hàm | Đặt code ở nơi sử dụng |
| "Đầu tiên chúng ta import..." | Chỉ viết code thôi |
| Lồng nhau sâu | Dùng Guard clauses |
| Số ma thuật (Magic numbers) | Dùng hằng số có tên |
| Hàm thần thánh (God functions) | Tách nhỏ theo trách nhiệm |
---
## 🔴 Trước khi Sửa BẤT KỲ File nào (HÃY NGHĨ TRƯỚC!)
**Trước khi thay đổi một file, hãy tự hỏi:**
| Câu hỏi | Tại sao |
|----------|-----|
| **Cái gì import file này?** | Chúng có thể bị hỏng |
| **File này import cái gì?** | Thay đổi Interface |
| **Test nào bao phủ file này?** | Test có thể fail |
| **Đây có phải component chia sẻ?** | Nhiều nơi bị ảnh hưởng |
**Kiểm tra Nhanh:**
```
File cần sửa: UserService.ts
└── Ai import nó? → UserController.ts, AuthController.ts
└── Họ có cần thay đổi không? → Kiểm tra chữ ký hàm (function signatures)
```
> 🔴 **Quy tắc:** Sửa file + tất cả các file phụ thuộc trong CÙNG một task.
> 🔴 **Không bao giờ để lại import hỏng hoặc thiếu cập nhật.**
---
## Tóm tắt
| Nên | Không Nên |
|----|-------|
| Viết code trực tiếp | Viết hướng dẫn (tutorials) |
| Để code tự tài liệu hóa | Thêm comment hiển nhiên |
| Sửa lỗi ngay lập tức | Giải thích cách sửa trước |
| Inline những thứ nhỏ | Tạo file không cần thiết |
| Đặt tên rõ ràng | Dùng viết tắt |
| Giữ hàm nhỏ | Viết hàm dài hơn 100 dòng |
> **Hãy nhớ: Người dùng muốn code chạy được, không phải một bài học lập trình.**
---
## 🔴 Tự Kiểm tra Trước khi Hoàn thành (BẮT BUỘC)
**Trước khi nói "nhiệm vụ hoàn tất", hãy xác minh:**
| Kiểm tra | Câu hỏi |
|-------|----------|
| ✅ **Đạt mục tiêu?** | Tôi đã làm chính xác những gì người dùng yêu cầu chưa? |
| ✅ **File đã sửa?** | Tôi đã sửa tất cả file cần thiết chưa? |
| ✅ **Code chạy được?** | Tôi đã test/xác minh thay đổi chưa? |
| ✅ **Không lỗi?** | Lint và TypeScript pass chứ? |
| ✅ **Không quên gì?** | Có bỏ sót trường hợp biên nào không? |
> 🔴 **Quy tắc:** Nếu BẤT KỲ kiểm tra nào thất bại, hãy sửa nó trước khi hoàn thành.
---
## Script Xác minh (BẮT BUỘC)
> 🔴 **QUAN TRỌNG:** Mỗi agent CHỈ chạy script thuộc skill của mình sau khi hoàn thành công việc.
### Ánh xạ Agent → Script
| Agent | Script | Lệnh |
|-------|--------|---------|
| **frontend-specialist** | UX Audit | `python ~/.claude/skills/frontend-design/scripts/ux_audit.py .` |
| **frontend-specialist** | A11y Check | `python ~/.claude/skills/frontend-design/scripts/accessibility_checker.py .` |
| **backend-specialist** | API Validator | `python ~/.claude/skills/api-patterns/scripts/api_validator.py .` |
| **mobile-developer** | Mobile Audit | `python ~/.claude/skills/mobile-design/scripts/mobile_audit.py .` |
| **database-architect** | Schema Validate | `python ~/.claude/skills/database-design/scripts/schema_validator.py .` |
| **security-auditor** | Security Scan | `python ~/.claude/skills/vulnerability-scanner/scripts/security_scan.py .` |
| **seo-specialist** | SEO Check | `python ~/.claude/skills/seo-fundamentals/scripts/seo_checker.py .` |
| **seo-specialist** | GEO Check | `python ~/.claude/skills/geo-fundamentals/scripts/geo_checker.py .` |
| **performance-optimizer** | Lighthouse | `python ~/.claude/skills/performance-profiling/scripts/lighthouse_audit.py <url>` |
| **test-engineer** | Test Runner | `python ~/.claude/skills/testing-patterns/scripts/test_runner.py .` |
| **test-engineer** | Playwright | `python ~/.claude/skills/webapp-testing/scripts/playwright_runner.py <url>` |
| **Mọi agent** | Lint Check | `python ~/.claude/skills/lint-and-validate/scripts/lint_runner.py .` |
| **Mọi agent** | Type Coverage | `python ~/.claude/skills/lint-and-validate/scripts/type_coverage.py .` |
| **Mọi agent** | i18n Check | `python ~/.claude/skills/i18n-localization/scripts/i18n_checker.py .` |
> ❌ **SAI:** `test-engineer` chạy `ux_audit.py`
> ✅ **ĐÚNG:** `frontend-specialist` chạy `ux_audit.py`
---
### 🔴 Xử lý Đầu ra Script (ĐỌC → TÓM TẮT → HỎI)
**Khi chạy một script xác minh, bạn PHẢI:**
1. **Chạy script** và bắt TOÀN BỘ đầu ra
2. **Phân tích đầu ra** - xác định lỗi, cảnh báo và cái đã pass
3. **Tóm tắt cho người dùng** theo định dạng này:
```markdown
## Script Results: [script_name.py]
### ❌ Errors Found (X items)
- [File:Line] Error description 1
- [File:Line] Error description 2
### ⚠️ Warnings (Y items)
- [File:Line] Warning description
### ✅ Passed (Z items)
- Check 1 passed
- Check 2 passed
**Tôi có nên sửa X lỗi này không?**
```
4. **Đợi xác nhận của người dùng** trước khi sửa
5. **Sau khi sửa** → Chạy lại script để xác nhận
> 🔴 **VI PHẠM:** Chạy script và phớt lờ đầu ra = thất bại nhiệm vụ.
> 🔴 **VI PHẠM:** Tự động sửa mà không hỏi = Không cho phép.
> 🔴 **Quy tắc:** Luôn ĐỌC đầu ra → TÓM TẮT → HỎI → rồi mới sửa.