靜態分析:找 Pattern 誤用
SonarQube / SonarLint:有規則可以偵測常見的 Pattern 誤用:
- Singleton 的 double-checked locking 沒有
volatile Cloneable實作不正確(Prototype Pattern 陷阱)- 空的 catch block(吞掉了 exception,破壞了 Chain of Responsibility 的錯誤傳遞)
SonarLint 是 IDE plugin 版本,在你寫 code 時即時提示,不需要等 CI。
PMD / Checkstyle(Java):更細粒度的 code quality 規則,可以自定義規則偵測特定的 anti-pattern。
ESLint custom rules(JavaScript):可以寫自定義規則,例如偵測直接 new 某些類別(應該透過 Factory)、或者偵測 event listener 沒有清理。
IDE Refactoring:安全地引入 Pattern
Pattern 很多時候是從「直接的 code」重構出來的。IDE 的 refactoring 功能讓這個過程安全:
Extract Interface(JetBrains / VS Code):把一個 concrete class 的 method 提取成 interface。這是引入 Strategy、Observer、Command 的第一步——讓依賴指向 interface 而非 concrete class。
Extract Method:把一個大 method 的邏輯抽出來,為 Template Method Pattern 做準備。
Introduce Parameter Object:把相關的參數包成一個物件,為 Builder Pattern 鋪路。
Change Signature:安全地修改 method 簽名,IDE 會幫你找到所有呼叫點。
這些 refactoring 有 IDE 保護,不容易漏改——比手動搜尋取代安全。
UML 工具:讓設計討論有共同語言
PlantUML:文字描述生成 UML 圖,可以在 *.puml 文件裡寫,版本控制友善。
@startuml
interface Observer {
+ update(event: Event): void
}
class EventBus {
- subscribers: List<Observer>
+ subscribe(observer: Observer): void
+ publish(event: Event): void
}
EventBus --> Observer
@endumlMermaid:在 Markdown 裡直接畫圖,GitHub 和許多 wiki 原生支援:
classDiagram class Strategy { <<interface>> +execute(data) } class ConcreteStrategyA { +execute(data) } Strategy <|-- ConcreteStrategyA Context --> Strategy
draw.io / Lucidchart:拖拉介面,適合快速的 whiteboard 討論,可以 export 成 XML 版控。
哪個工具最重要
對日常開發:IDE 的 refactoring 功能 > 其他所有工具。
安全地做 Extract Interface 和 Extract Method,比學會 100 個 Pattern 更實用。Pattern 是目標,Refactoring 是達成目標的路徑。