Skip to content

Commit bddd040

Browse files
author
薛華慶, james.hsueh
committed
feat: integrate auto command
1 parent 51f1a50 commit bddd040

File tree

1 file changed

+212
-38
lines changed

1 file changed

+212
-38
lines changed

.claude/commands/sdd-auto.md

Lines changed: 212 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -54,56 +54,230 @@ Feature: <功能名稱>
5454
Then <預期結果>
5555
```
5656

57-
### 階段 2:結構(骨架)
57+
### 階段 2:架構設計(骨架)
5858
**角色:** 系統架構師
5959
**約束:**
6060
- 您是架構師。讀取階段 1 的 Gherkin。
61-
- 只定義資料模型和介面。
62-
- 不允許業務邏輯實作。
61+
- **首先掃描專案上下文**,理解現有技術棧和架構模式。
62+
- 定義功能架構:服務介面與資料模型。
63+
- 不包含業務邏輯實作,只做架構規劃。
6364
- 從 Gherkin 提取名詞 → 資料模型
6465
- 從 Gherkin 提取動詞 → 服務介面
66+
- **遵循專案既有架構風格**(若專案為新建,則使用最佳實踐)
67+
- **輸出為中文的結構化 Markdown 文件**
68+
69+
**核心原則:**
70+
-**語言無關**:不預設特定程式語言,根據專案上下文判斷
71+
-**專案感知**:掃描現有專案結構、技術棧、架構模式
72+
-**架構一致**:遵循專案既有的設計模式和命名慣例
73+
-**靈活適應**:支援 prompt 指定或自動偵測架構風格
6574

6675
**動作:**
67-
1. 讀取階段 1 建立的 Gherkin 檔案
68-
2. 執行名詞分析以建立資料模型(Pydantic/TypeScript 介面)
69-
3. 執行動詞分析以建立服務介面(抽象類別)
70-
4. 儲存為 `structure/<feature_name>_structure.py`(或 `.ts`
76+
1. **掃描專案上下文**(必須執行):
77+
- 偵測技術棧(package.json, requirements.txt, go.mod 等)
78+
- 分析現有架構模式(controllers/, services/, repositories/ 等)
79+
- 識別命名慣例(camelCase, snake_case 等)
80+
- 檢查配置檔案和依賴
7181

72-
**輸出格式(根據目標語言調整):**
82+
2. 讀取階段 1 建立的 Gherkin 檔案
7383

74-
語言無關原則:
75-
- 提取名詞 → 建立型別化資料結構
76-
- 提取動詞 → 建立介面/協定定義
77-
- 盡可能使用強型別
78-
- 記錄每個元素滿足哪個 Gherkin 情境
79-
80-
為目標語言選擇適當的慣用語:
81-
- **Python:** dataclasses、Pydantic 或 TypedDict + ABC
82-
- **TypeScript:** interfaces 和 types
83-
- **Go:** structs 和 interfaces
84-
- **Java:** interfaces 和 POJO
85-
- **Rust:** structs 和 traits
86-
- **C#:** interfaces 和 classes
87-
88-
範例結構(Python 使用 dataclasses):
89-
```python
90-
from dataclasses import dataclass
91-
from abc import ABC, abstractmethod
92-
from enum import Enum
84+
3. 執行名詞分析以建立資料模型設計
9385

94-
class EntityType(str, Enum):
95-
VALUE_1 = "VALUE_1"
86+
4. 執行動詞分析以建立服務介面設計
9687

97-
@dataclass
98-
class Entity:
99-
field1: str
100-
field2: float
88+
5. 生成架構決策說明
10189

102-
class IServiceInterface(ABC):
103-
@abstractmethod
104-
def method_name(self, param: Entity) -> Result:
105-
"""來自情境:'<名稱>'"""
106-
pass
90+
6. 儲存為 `docs/features/{feature_name}/architecture.md`(中文 Markdown)
91+
92+
**輸出格式:**
93+
94+
檔案位置:`docs/features/{feature_name}/architecture.md`(中文文件)
95+
96+
文件必須包含:
97+
98+
```markdown
99+
# {功能名稱} - 架構設計
100+
101+
> 來源:features/{feature_name}.feature
102+
> 建立日期:{日期}
103+
104+
## 0. 專案上下文
105+
106+
### 技術棧資訊
107+
- **程式語言**:{偵測或指定的語言}
108+
- **框架**:{偵測或指定的框架}
109+
- **資料庫**:{偵測或指定的資料庫}
110+
- **ORM/ODM**:{偵測或指定的 ORM}
111+
- **架構模式**:{偵測或指定的架構模式}
112+
113+
### 現有專案結構
114+
```
115+
{顯示掃描到的專案目錄結構}
116+
```
117+
118+
### 命名慣例
119+
- 檔案命名:{snake_case / camelCase / PascalCase}
120+
- 類別命名:{PascalCase / camelCase}
121+
- 方法命名:{camelCase / snake_case}
122+
123+
### 設計模式偵測
124+
- [ ] Repository Pattern
125+
- [ ] Service Layer
126+
- [ ] MVC
127+
- [ ] Clean Architecture
128+
- [ ] DDD
129+
130+
## 1. 功能概述
131+
132+
本功能提供 {功能簡述}。
133+
134+
**核心需求:**
135+
- {需求 1}
136+
- {需求 2}
137+
138+
## 2. 資料模型設計
139+
140+
### 2.1 列舉與常數
141+
142+
#### {EnumName}({描述})
143+
**來源情境:** "{Gherkin 語句}" (第 X 行)
144+
145+
| 值 | 說明 | 用途 |
146+
|---|---|---|
147+
| {VALUE_1} | {說明} | {用途} |
148+
149+
**實作建議(基於 {語言}):**
150+
```{language}
151+
{語言特定的列舉實作範例}
152+
```
153+
154+
### 2.2 核心實體
155+
156+
#### {EntityName}({描述})
157+
**來源情境:** "{Gherkin 語句}" (第 X 行)
158+
159+
| 欄位名稱 | 資料型別 | 必填 | 預設值 | 說明 |
160+
|---|---|---|---|---|
161+
| {field1} | {type} | ✅/- | {default} | {說明} |
162+
163+
**實作範例(基於 {language} + {orm}):**
164+
```{language}
165+
{語言和 ORM 特定的模型定義}
166+
```
167+
168+
## 3. 服務介面設計
169+
170+
### 3.1 {ServiceName}({服務描述})
171+
172+
**在專案架構中的位置:**
173+
```
174+
src/{path}/{ServiceName}.{ext}
175+
```
176+
177+
#### 方法:{methodName}()
178+
179+
**來源情境:**
180+
- "{Gherkin 語句}" (第 X-Y 行)
181+
182+
**方法簽名(基於 {language}):**
183+
```{language}
184+
{語言特定的方法簽名}
185+
```
186+
187+
**輸入參數:**
188+
189+
| 參數名稱 | 型別 | 說明 |
190+
|---|---|---|
191+
| {param1} | {type} | {說明} |
192+
193+
**回傳值:**
194+
195+
| 型別 | 說明 |
196+
|---|---|
197+
| {returnType} | {說明} |
198+
199+
**業務規則:**
200+
1. {規則 1}
201+
2. {規則 2}
202+
203+
**與現有服務的整合:**
204+
- 依賴服務:{依賴的現有服務}
205+
- 被依賴於:{可能依賴此服務的其他服務}
206+
207+
## 4. 架構決策
208+
209+
### 4.1 為什麼選擇此架構模式?
210+
211+
**基於專案分析:**
212+
- ✅ 專案現有架構:{偵測到的架構}
213+
- ✅ 保持一致性:{說明如何保持一致}
214+
- ✅ 整合考量:{與現有元件的整合方式}
215+
216+
### 4.2 資料模型設計理由
217+
218+
**與現有模型的關聯:**
219+
- 關聯模型:{現有的相關模型}
220+
- 關聯方式:{One-to-Many, Many-to-Many 等}
221+
222+
### 4.3 技術考量
223+
224+
#### 型別定義({language})
225+
{語言特定的型別定義建議}
226+
227+
#### 資料驗證({framework})
228+
{框架特定的驗證建議}
229+
230+
#### 錯誤處理({language})
231+
{語言特定的錯誤處理模式}
232+
233+
## 5. 情境對應關係
234+
235+
| Gherkin 情境 | 行數 | 相關資料模型 | 相關服務方法 | 驗證重點 |
236+
|---|---|---|---|---|
237+
| {情境描述} | {行號} | {Model} | {method()} | {驗證重點} |
238+
239+
## 6. 檔案結構規劃
240+
241+
**基於專案既有結構,新增以下檔案:**
242+
243+
```
244+
{project_root}/
245+
├── src/
246+
│ ├── {模型目錄}/
247+
│ │ └── {FeatureName}Model.{ext}
248+
│ ├── {服務目錄}/
249+
│ │ └── {FeatureName}Service.{ext}
250+
│ └── {介面目錄}/
251+
│ └── I{FeatureName}Service.{ext}
252+
└── docs/
253+
└── features/{feature_name}/
254+
└── architecture.md
255+
```
256+
257+
## 7. 下一步行動
258+
259+
### 階段 3:程式碼實作
260+
261+
**需要實作的元件(基於 {language} + {framework}):**
262+
263+
1. ✅ 定義列舉/常數
264+
2. ✅ 建立資料模型
265+
3. ✅ 實作服務介面/類別
266+
4. ✅ 整合現有架構
267+
5. ✅ 撰寫單元測試
268+
```
269+
270+
**專案上下文掃描命令:**
271+
```bash
272+
# 1. 檢測技術棧
273+
ls -la | grep -E "package.json|requirements.txt|go.mod|pom.xml|Cargo.toml"
274+
275+
# 2. 分析目錄結構
276+
find src -type d -maxdepth 2 2>/dev/null || find . -type d -maxdepth 2
277+
278+
# 3. 掃描現有程式碼模式
279+
find . -name "*.service.*" -o -name "*Service.*" 2>/dev/null | head -5
280+
find . -name "*.repository.*" -o -name "*Repository.*" 2>/dev/null | head -5
107281
```
108282

109283
### 階段 3:實作(血肉)

0 commit comments

Comments
 (0)