MDS 和 DSL

2008 年 7 月 14 日

模型驅動軟體開發 (MDSD) 和特定領域語言 (DSL) 之間有什麼關聯?

在 MDSD 的脈絡中看到「DSL」這個術語是很常見的。事實上,有些 MDSD 人士似乎認為 DSL 僅存在於 MDSD 世界中。我最近為我的書寫了很多關於 DSL 的內容,但到目前為止,我還沒有真正觸及 MDSD 的角度。相反地,我專注於 DSL 在更傳統程式設計中的角色。DSL 存在於文字語言和 MDSD 世界中,並且對兩者都扮演著幾乎相同的角色。

在 MDSD 脈絡中,DSL 再次是一種針對特定類型的問題而設計的語言,而不是像 UML 這樣的通用語言。因此,它們可以有相同的關係:在通用建模語言中建立系統,並使用 DSL 處理各種特定面向。然而,由於 MDSD 尚未廣泛採用,因此您也會看到一種不同的方法,其中建模 DSL 用於傳統語言環境中。在這裡,您可能會使用多個建模 DSL 來產生 Java 程式碼,並將它們組合在 Java 專案中。在這種情況下,沒有通用的 MDSD 模型——您相對獨立地為每個 DSL 使用 MDSD。

為了使用面向模型的 DSL,您需要一種不同的工具化方法,即投影編輯。由於此類工具的通用支援環境尚未建立,因此這會帶來相當多的務實問題。為了定義您自己的 DSL,您需要更專業的工具——我稱之為語言工作台

與主流程式設計世界相比,DSL 似乎在 MDSD 世界中佔有更高的比例。憤世嫉俗者認為這是因為 MDSD 社群迫切尋找一種方法來保持相關性,而 MDSD 的愛好者則認為這是 MDSD 優越精緻的象徵。我認為這主要是因為 MDSD 社群較小,而且在既定的實務方面遠遠不足。

MDSD 的一個特別明顯的次級社群集中在模型驅動架構 (MDA) 周圍。我特別不喜歡 MDA,但特別懷疑 MDA DSL

面向模型的 DSL 與文字 DSL 有許多共同點。我在文字 DSL 中非常重視以語意模型為基礎的工作。正如其名稱所示,MDSD 非常注重從這種模型驅動系統。不同之處在於,大多數 MDSD 人員假設您希望從該模型產生程式碼,而不是直接執行該模型。

在我寫這篇文章時,我不確定我將在我的書中涵蓋多少語言工作台。當然,我至少會討論它們背後的整體概念,但涵蓋範圍可能不會那麼深入。這部分是因為我似乎在文字 DSL 上產生了大量的素材,部分是因為語言工作台較新,因此較不穩定且較不成熟。