
設計與架構原則
|
117
運用了 Lambda 的領域專用語言
領域專用語言
(
domain-specific language
, DSL)是著重在軟體系統中特定部份的程式設
計語言。它們通常是小型語言,對多數程式設計任務而言,經常不若 Java 之類的通用性
語言(general-purpose language)那麼有表達力。DSL 的任務特殊化了:捨棄了樣樣精
通,DSL 只專攻某些事物。
DSL 通常被分為兩類:
內部
(
internal
)與
外部
(
external
)。外部 DSL 是在程式原始碼
外獨立撰寫,而後獨立地剖析與實作。例如,CSS(Cascading Style Sheet)與規則表達
式是常用的外部 DSL。
使用某程式語言撰寫,並被嵌入該語言中的是內部 DSL。如果你用過 mock 程式庫,像
是 JMock、Mockito,或是 JOOQ 或 Querydsl 之類的 SQL 建造者 API,那麼對內部 DSL
並不陌生。某些意義上,它們只是有流暢 API 設計的一般程式庫。儘管內部 DSL 簡
單,然而價值在於它們是能讓程式碼變得更簡潔且易於閱讀的強大工具。理想上,DSL
撰寫的程式碼閱讀起來,就像在反映出問題域中之對話。
導入了 lambda 表達式,實作具流暢性的 DSL 就更為容易,而想嘗試 DSL 的人們也多了
樣工具。我們會建立一個用於行為驅動開發(behavior-driven development, BDD), 稱
為
LambdaBehave
的 DSL,藉此探討這類議題。 ...