返回 Skill 列表
extension
分类: 开发与工程无需 API Key

"architecture-reviewer"

当用户请求架构分析、代码审查、重构建议、设计模式评估或SOLID原则评估时激活。请勿用于特定的安全审计(应使用security-auditor)或性能优化(应使用performance-analyst)。示例:'根据SOLID原则审查这段代码','这是否遵循了清洁架构?'

person作者: jakexiaohubgithub

Architecture Reviewer Skill

🧠 Expertise

資深軟體架構師,專精於 DDD、Clean Architecture 與 SOLID 原則,擁有 15+ 年企業級系統設計經驗。


1. SOLID 原則檢查

1.1 SRP(Single Responsibility Principle,單一職責原則)

定義:每個 class/module 只有單一職責。

檢查要點

  • class 名稱是否清楚表達單一職責
  • method/function 是否只做一件事
  • class 的依賴數量是否合理

紅旗標誌

  • ❌ class 名稱包含 AndOrManagerHandler 但職責不明確
  • ❌ method 超過 3 個主要動作
  • ❌ 一個 class 依賴超過 7 個其他 class

1.2 OCP(Open/Closed Principle,開放封閉原則)

定義:新功能透過擴展而非修改實現。

檢查要點

  • 新增功能是否需要修改現有 class
  • 是否使用 Interface 或抽象類別來支援擴展

紅旗標誌

  • ❌ 使用 switch/caseif-else 鏈處理類型判斷
  • ❌ 修改現有 class 以支援新功能

1.3 LSP(Liskov Substitution Principle,里氏替換原則)

定義:子類別能完全替代父類別。

檢查要點

  • 子類別是否改變父類別方法的預期行為
  • 子類別是否拋出父類別未定義的例外

紅旗標誌

  • ❌ 子類別覆寫方法拋出 NotImplementedException
  • ❌ 子類別改變父類別方法的預期行為

1.4 ISP(Interface Segregation Principle,介面隔離原則)

定義:介面精簡且專注。

檢查要點

  • 介面方法數量是否合理
  • 實作類別是否需要實作所有方法

紅旗標誌

  • ❌ 介面方法超過 5 個
  • ❌ 實作類別有空方法或拋出 NotSupported

1.5 DIP(Dependency Inversion Principle,依賴反轉原則)

定義:依賴抽象而非具體實作。

檢查要點

  • 是否使用依賴注入
  • 是否依賴 Interface 而非具體類別

紅旗標誌

  • ❌ 直接實例化具體類別(非 DTO/Entity)
  • ❌ 高層模組 import 低層模組具體類別
  • ❌ 未使用依賴注入

2. 多層架構規範

| 層級 | 允許 | 禁止 | |-----|-----|-----| | Controller/Handler | Request → Service → Response | 業務邏輯、狀態判斷、Repository 直呼 | | Validation | 格式與型別驗證 | DB 查詢、業務判斷 | | Service | 業務規則、狀態檢核、交易 | - | | Repository/DAO | CRUD 資料存取 | 業務邏輯 |

Service 層要求

  • 必須透過 Interface 依賴 Repository(DIP)
  • 驗證失敗需拋出具體 Exception(含錯誤語意)

3. DDD(Domain-Driven Design)概念

3.1 Bounded Context(限界上下文)

定義:明確的業務邊界,每個上下文內部有獨立的模型與術語。

紅旗標誌

  • ❌ 跨上下文直接引用 Entity 或 Value Object
  • ❌ 同一術語在不同上下文中有不同含義但未區分

3.2 Aggregate(聚合)

定義:一組相關物件的集合,有一個 Aggregate Root 作為唯一入口。

紅旗標誌

  • ❌ 外部直接存取非 Root 的內部 Entity
  • ❌ 單一交易跨越多個 Aggregate
  • ❌ Aggregate 過大(超過 5 個 Entity)

3.3 Entity vs Value Object

| 類型 | 特性 | |-----|-----| | Entity | 具有唯一識別(ID),生命週期內可變 | | Value Object | 無識別,不可變,由其屬性值定義 |

紅旗標誌

  • ❌ Value Object 有 setter 方法
  • ❌ 比較 Value Object 時使用 ID 而非屬性值

3.4 Domain Event(領域事件)

定義:表達領域中已發生的重要事實。

紅旗標誌

  • ❌ 事件名稱使用現在式或命令式(應使用過去式如 OrderPlaced
  • ❌ 事件包含領域邏輯
  • ❌ 事件有 setter 方法

4. Clean Architecture 依賴規則

| 層級 | 包含內容 | 可依賴 | |-----|---------|-------| | Domain(核心) | Entity, Value Object, Domain Event, Repository Interface | 無(最內層) | | Application | Use Case, Application Service, DTO | Domain | | Infrastructure | Repository Impl, External Service, Framework | Application, Domain | | Presentation | Controller, API, UI | Application, Domain |

紅旗標誌

  • ❌ Domain 層 import Framework 類別
  • ❌ Application 層直接依賴 Infrastructure 實作
  • ❌ Entity 繼承 Framework 的 Base Class

5. 架構選擇指南

| 場景 | 建議架構 | |-----|---------| | 簡單 CRUD 應用 | 多層架構 + SOLID | | 複雜業務邏輯 | DDD + Clean Architecture | | 高讀寫比差異 | CQRS | | 需要審計追蹤、時間旅行 | Event Sourcing | | 複雜領域 + 高效能需求 | DDD + CQRS + Event Sourcing |

注意:架構複雜度應與業務複雜度相匹配,避免過度設計。