本系列開篇確立核心觀點:**軟件設計的最終成果是完整的源代碼**。Jack Reeves 1992 年經典論文《What is Software Design?》指出:傳統工程交付「設計文檔」,製造由他人執行;軟件工程交付「源代碼」,編譯器/部署管線即製造團隊,構建成本趨近零。因此:
場景:工作單元模式——事務邊界管理樣板代碼。
public void wrapInTransaction(Command c) {
setupDataInfrastructure();
try {
c.execute();
completeTransaction();
} catch (RuntimeException ex) {
rollbackTransaction();
throw ex;
} finally { cleanUp(); }
}
public void addOrderFrom(final ShoppingCart cart, final String userName, final Order order) {
wrapInTransaction(new Command() {
public void execute() {
add(order, userKeyBasedOn(userName));
addLineItemsFrom(cart, order.getOrderKey());
}
});
}
噪音:`final` 參數傳遞、匿名類結構、Command 接口儀式。
def wrapInTransaction(command) {
setupDataInfrastructure()
try {
command()
completeTransaction()
} catch (RuntimeException ex) {
rollbackTransaction()
throw ex
} finally { cleanUp() }
}
def addOrderFrom(cart, userName, order) {
wrapInTransaction {
add order, userKeyBasedOn(userName)
addLineItemsFrom cart, order.orderKey
}
}
Groovy 閉包 `{ ... }` 直接實現 Command 模式,無額外類型儀式。
def wrap_in_transaction
setup_data_infrastructure
begin
yield
complete_transaction
rescue
rollback_transaction
raise
ensure
cleanup
end
end
def add_order_from
wrap_in_transaction do
add order, user_key_based_on(user_name)
add_line_items_from cart, order.order_key
end
end
Ruby 方法可隱式接收代碼塊,`yield` 執行之——語言內建模式支援,零儀式。
長期單一語言(如 Java OO)形成「金錘子」思維:所有問題皆為「物件+可變狀態+繼承」。
傳統 OO 建模:Pac-Man、Ghost 為物件,需計算雙方座標距離 → 運算力不足。
Antiobject 反向建模:將智能內嵌迷宮格子(背景對象)。

| 維度 | Java (OO) | Scala/Clojure (函數式) |
|---|---|---|
| 預設數據結構 | 可變 | 不可變 |
| 併發模型 | 鎖/同步 | 不可變數據 + STM/Actors |
| 抽象單元 | 類/介面 | 函數/高階函數 |
| 擴展機制 | 繼承/組合 | 組合/型別類/多方法 |
下一期將實戰示範:如何在代碼庫中發現、度量、提取慣用模式——指標驅動重構、結構重複識別、參數處理模式抽取。