Files
2025-11-30 09:05:49 +08:00

173 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## PR 審查
通過 Pull Request 的系統化審查確保代碼質量和架構健全性。
### 使用方法
```bash
# PR 的全面審查
gh pr view 123 --comments
"系統化審查這個 PR從代碼質量、安全性、架構角度提供反饋"
# 安全性專注審查
gh pr diff 123
"專注于安全風險和漏洞進行審查"
# 架構視角的審查
gh pr checkout 123 && find . -name "*.js" | head -10
"從層級分離、依賴關系、SOLID 原則的角度評估架構"
```
### 基本示例
```bash
# 代碼質量的數值評估
find . -name "*.js" -exec wc -l {} + | sort -rn | head -5
"評估代碼的復杂度、函數大小、重復度並指出改進點"
# 安全漏洞檢查
grep -r "password\|secret\|token" . --include="*.js" | head -10
"檢查敏感資訊洩露、硬編碼、認證绕過的風險"
# 架構违規檢測
grep -r "import.*from.*\\.\\./\\.\\." . --include="*.js"
"評估層級违規、循環依賴、耦合度問題"
```
### 評論分類體系
```text
🔴 critical.must: 致命問題
├─ 安全漏洞
├─ 數據一致性問題
└─ 系統故障風險
🟡 high.imo: 高優先級改進
├─ 功能故障風險
├─ 性能問題
└─ 可維護性大幅降低
🟢 medium.imo: 中優先級改進
├─ 可讀性提升
├─ 代碼結構改進
└─ 測試質量提升
🟢 low.nits: 轻微指摘
├─ 風格統一
├─ 拼寫錯誤更正
└─ 注釋添加
🔵 info.q: 問題·資訊提供
├─ 實現意圖確認
├─ 設計決策背景
└─ 最佳實践分享
```
### 審查觀點
#### 1. 代碼正確性
- **邏輯錯誤**: 邊界值、Null 檢查、異常處理
- **數據一致性**: 類型安全、驗證
- **錯誤處理**: 全面性、適当處理
#### 2. 安全性
- **認證·授權**: 適当檢查、權限管理
- **輸入驗證**: SQL 注入、XSS 對策
- **敏感資訊**: 禁止日誌輸出、加密
#### 3. 性能
- **算法**: 時間復杂度、內存效率
- **數據庫**: N+1 查询、索引優化
- **資源**: 內存洩漏、緩存利用
#### 4. 架構
- **層級分離**: 依賴方向、適当分離
- **耦合度**: 松耦合、接口使用
- **SOLID 原則**: 單一职責、開闭原則、依賴倒置
### 審查流程
1. **事前確認**: PR 資訊、變更差異、相關 Issue
2. **系統化檢查**: 安全性 → 正確性 → 性能 → 架構
3. **建設性反饋**: 具體改進建議和代碼示例
4. **後續跟進**: 更正確認、CI 狀態、最終批準
### 有效的評論示例
#### 安全問題模板
**格式:**
```text
**critical.must.** [問題描述]
[改進建議代碼]
[説明文字]
```
**示例:**
```text
**critical.must.** 密碼以明文保存
// 更正建議
const bcrypt = require('bcrypt');
const hashedPassword = await bcrypt.hash(password, 12);
為防止安全風險,必须進行哈希處理。
```
#### 性能改進模板
**格式:**
```text
**high.imo.** [性能問題描述]
[改進建議代碼]
[效果說明]
```
**示例:**
```text
**high.imo.** 會發生 N+1 查询問題
// 改進建議: Eager Loading
const users = await User.findAll({ include: [Post] });
可以大幅减少查询數量。
```
#### 架構违規模板
**格式:**
```text
**high.must.** [架構問題描述]
[具體說明和解決方案]
```
**示例:**
```text
**high.must.** 發生了層級违規
領域層直接依賴基礎設施層。
請通過依賴倒置原則引入接口。
```
### 注意事項
- **建設性語气**: 協作而非攻擊性的沟通
- **具體建議**: 不仅指出問題,還要提供解決方案
- **優先級排序**: 按 Critical → High → Medium → Low 顺序處理
- **持續改進**: 將審查結果知識庫化