@@ -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