Files
gh-dennisliuck-claude-plugi…/commands/analyze-java-domain-flow.md
2025-11-29 18:18:29 +08:00

375 lines
10 KiB
Markdown
Raw 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.
---
description: 高效分析 Java Spring Boot 專案的調用鏈與流程圖(單一檔案輸出)
allowed-tools:
- Task
- TodoWrite
- Read
- Write
- Glob
- Grep
- Bash
---
# Legacy Java Domain Flow Analyzer
專注於**調用鏈追蹤與流程圖生成**的高效領域分析工具。
**使用方式**
```
/legacy-analyzer:analyze-java-domain-flow 商品建立
/legacy-analyzer:analyze-java-domain-flow 訂單取消
/legacy-analyzer:analyze-java-domain-flow 用戶登入
```
**與 analyze-java-domain 的差異**
| 比較項目 | analyze-java-domain | analyze-java-domain-flow |
|---------|---------------------|--------------------------|
| 輸出檔案 | 6 個 Markdown 檔案 (~850行) | 單一檔案 (~300行) |
| 執行時間 | 4-6 分鐘 | 2-3 分鐘 |
| 核心內容 | 完整領域文件 | 調用鏈 + 流程圖 |
| 資料模型 | 詳細 DTO/Entity 說明 | 僅列出涉及類別 |
| 業務規則 | 完整規則文件 | 不包含 |
---
## 搜尋範圍
**只搜尋**`.java``.xml`MyBatis Mapper
**排除**`pom.xml``.yml``.properties`
---
要執行此操作,請精確遵循以下步驟:
## 階段 1: 入口點發現Haiku~30秒
1. **解析使用者輸入**,產生搜尋策略:
```json
{
"domain": "商品建立",
"keywords": {
"chinese": ["商品", "產品", "建立", "新增"],
"english": ["Product", "Item", "Create", "Add", "Save"],
"patterns": ["create.*Product", "add.*Product", "Product.*Controller"]
}
}
```
2. 使用 **Haiku 代理**快速定位入口點:
**搜尋策略**(必須限制檔案類型):
```
Grep: pattern="@(Post|Put|Get|Delete)Mapping.*{keyword}" glob="*.java"
Grep: pattern="class.*{keyword}.*(Controller|Service)" glob="*.java"
```
**輸出入口點 JSON**
```json
{
"entry_points": [
{
"file": "ProductController.java",
"method": "createProduct",
"http": "POST /api/products",
"line": 67
}
],
"related_classes": ["ProductController", "ProductService", "ProductRepository"]
}
```
3. **如果找不到入口點**,終止並建議:
```
找不到與「{關鍵字}」相關的程式碼。
建議:使用英文關鍵字如 "Product" 或 "Order"
```
---
## 階段 2: 調用鏈追蹤Sonnet~1-2分鐘
4. 對每個入口點(最多 3 個),啟動 **Sonnet 代理**並行追蹤。
**追蹤規則**
- 從 Controller → Service → Repository → MyBatis XML
- 最大深度5 層
- 只追蹤專案內程式碼(遇到框架類別標記為「框架內建」停止)
**追蹤步驟**
a. 讀取 Controller 方法,找出調用的 Service
b. 讀取 Service 實現類別,找出調用的 Repository/其他 Service
c. 讀取 Repository識別 JPA 方法或 MyBatis Mapper
d. 如果是 MyBatis讀取對應的 XML Mapper 檔案
**輸出調用鏈 JSON**
```json
{
"chain_id": "chain-1",
"entry": "POST /api/products → ProductController.createProduct",
"nodes": [
{
"level": 0,
"layer": "Controller",
"class": "ProductController",
"method": "createProduct(ProductDTO)",
"file": "src/.../ProductController.java:67-85",
"calls": ["productService.create"]
},
{
"level": 1,
"layer": "Service",
"class": "ProductServiceImpl",
"method": "create(ProductDTO)",
"file": "src/.../ProductServiceImpl.java:45-78",
"annotations": ["@Transactional"],
"logic": "檢查名稱重複 → 轉換 DTO → 保存",
"calls": ["productRepo.existsByName", "productRepo.save"]
},
{
"level": 2,
"layer": "Repository",
"class": "ProductRepository",
"method": "save(Product)",
"file": "src/.../ProductRepository.java:12",
"type": "JPA 內建方法"
}
],
"classes_involved": ["ProductController", "ProductServiceImpl", "ProductRepository", "Product", "ProductDTO"]
}
```
5. 收集所有調用鏈結果
---
## 階段 3: 流程驗證與評分Haiku~20秒
6. 對每條調用鏈啟動 **Haiku 代理**進行驗證評分:
**驗證維度**
- **路徑完整性 (40%)**:調用鏈是否從入口到資料層完整
- **證據準確性 (40%)**:檔案路徑和行號是否正確
- **邏輯清晰度 (20%)**:流程描述是否清楚
**輸出評分 JSON**
```json
{
"chain_id": "chain-1",
"scores": {
"completeness": 95,
"accuracy": 90,
"clarity": 85
},
"total": 91,
"status": "verified"
}
```
**狀態判定**
- `total >= 80`verified (已驗證)
- `total >= 60`partial (部分驗證)
- `total < 60`unverified (未驗證,標記警告)
---
## 階段 4: 流程圖與文件生成Sonnet~1分鐘
7. 啟動 **Sonnet 代理**生成單一 Markdown 文件。
**文件結構**(目標 ~300 行):
```markdown
# {領域名稱} 調用鏈分析
> 自動生成於 {timestamp} | 驗證狀態: {N} 條已驗證
## 快速概覽
| 項目 | 數值 |
|------|------|
| 入口點 | {N} 個 |
| 調用鏈 | {M} 條 |
| 涉及類別 | {K} 個 |
| 平均深度 | {D} 層 |
## 入口點總覽
| HTTP 方法 | 路徑 | Controller.方法 | 驗證狀態 |
|-----------|------|-----------------|----------|
| POST | /api/products | ProductController.createProduct | verified |
---
## 調用鏈 1: {簡短描述}
**入口**: `POST /api/products` → `ProductController.createProduct`
**狀態**: verified (91分)
### 流程圖
```mermaid
sequenceDiagram
participant C as Controller
participant S as Service
participant R as Repository
participant DB as Database
C->>S: productService.create(dto)
S->>S: 檢查名稱重複
S->>R: productRepo.existsByName(name)
R->>DB: SELECT EXISTS
DB-->>R: boolean
R-->>S: false
S->>R: productRepo.save(product)
R->>DB: INSERT
DB-->>R: Product
R-->>S: Product
S-->>C: ProductDTO
```
### 調用層級
| 層級 | 類別.方法 | 檔案位置 | 說明 |
|------|----------|----------|------|
| 0 | ProductController.createProduct | ProductController.java:67 | 接收請求 |
| 1 | ProductServiceImpl.create | ProductServiceImpl.java:45 | 業務邏輯 |
| 2 | ProductRepository.save | ProductRepository.java:12 | 資料存取 |
### 關鍵邏輯 (`ProductServiceImpl.java:50-55`)
```java
if (productRepo.existsByName(dto.getName())) {
throw new ProductExistsException();
}
Product product = mapper.toEntity(dto);
return productRepo.save(product);
```
---
## 整體架構圖
```mermaid
flowchart TD
subgraph Controller Layer
A[ProductController]
end
subgraph Service Layer
B[ProductServiceImpl]
end
subgraph Repository Layer
C[ProductRepository]
end
subgraph Database
D[(products)]
end
A -->|createProduct| B
B -->|existsByName| C
B -->|save| C
C --> D
```
---
## 涉及類別清單
| 類別 | 類型 | 檔案位置 |
|------|------|----------|
| ProductController | Controller | src/.../ProductController.java |
| ProductServiceImpl | Service | src/.../ProductServiceImpl.java |
| ProductRepository | Repository | src/.../ProductRepository.java |
| Product | Entity | src/.../Product.java |
| ProductDTO | DTO | src/.../ProductDTO.java |
---
## 驗證摘要
| 調用鏈 | 完整性 | 準確性 | 清晰度 | 總分 | 狀態 |
|--------|--------|--------|--------|------|------|
| chain-1: 建立商品 | 95 | 90 | 85 | 91 | verified |
```
**文件撰寫規則**
- 使用繁體中文
- 每條調用鏈必須有 **Mermaid sequenceDiagram**
- 文件末尾必須有 **整體架構 flowchart**
- 程式碼片段限制 5-10 行
- 所有檔案引用必須包含行號
- **禁止**:改善建議、效能優化、測試策略
8. 將文件寫入:`.legacy-analysis/flow-{keyword}-{timestamp}/DOMAIN-FLOW.md`
---
## 完成
9. 顯示完成摘要:
```
╔═══════════════════════════════════════════════════════════╗
║ Domain Flow Analyzer - 分析完成 ║
╚═══════════════════════════════════════════════════════════╝
🎯 分析領域: {領域關鍵字}
📁 輸出位置: .legacy-analysis/flow-{keyword}-{timestamp}/DOMAIN-FLOW.md
📊 分析結果:
- 入口點: {N} 個
- 調用鏈: {M} 條 (已驗證: {V} 條)
- 涉及類別: {K} 個
- 平均驗證分數: {score}
📈 調用鏈概覽:
1. POST /api/products → ProductController.createProduct [91分]
2. ...
🔗 快速導覽:
- 整體架構圖: DOMAIN-FLOW.md#整體架構圖
- 調用鏈詳解: DOMAIN-FLOW.md#調用鏈-1-{描述}
💡 特色:
- 單一檔案輸出(約 300 行)
- 包含 Mermaid 序列圖與架構圖
- 所有調用鏈經過驗證評分
```
---
## 執行時間估算
| 階段 | 時間 | 模型 |
|------|------|------|
| 入口點發現 | ~30秒 | Haiku |
| 調用鏈追蹤 | ~1-2分鐘 | Sonnet (並行) |
| 流程驗證 | ~20秒 | Haiku (並行) |
| 文件生成 | ~1分鐘 | Sonnet |
| **總計** | **~2-3分鐘** | |
---
## 與 analyze-java-domain 的配合使用
```
場景 1: 快速了解流程
→ 使用 analyze-java-domain-flow2-3分鐘
→ 獲得調用鏈圖表
場景 2: 深度了解領域
→ 先用 analyze-java-domain-flow 掌握流程
→ 再用 analyze-java-domain 獲得完整文件
```
---
## 重要注意事項
- **核心輸出**:調用鏈 + Mermaid 流程圖(不包含資料模型、業務規則詳解)
- **單一檔案**:所有內容整合到一個 Markdown 檔案
- **驗證機制**:每條調用鏈都有驗證評分,確保準確性
- **效率優先**:比 analyze-java-domain 快約 50%