領(lǐng)域特定語言pdf_互聯(lián)網(wǎng)免費書庫第一站
本文關(guān)鍵詞:領(lǐng)域?qū)S谜Z言實戰(zhàn),由筆耕文化傳播整理發(fā)布。
作者: [美] Debasish Ghosh
出版社: 人民郵電出版社
原作名: DSLs in action
譯者: 郭曉剛
出版年: 2013-11
頁數(shù): 312
定價: 69.00
裝幀: 平裝
ISBN: 9787115331748
內(nèi)容簡介 · · · · · ·
本書是第一本領(lǐng)域?qū)S谜Z言(DSL)的實戰(zhàn)類圖書,它面向真正的實踐者,是一本讓奮戰(zhàn)在開發(fā)第一線的實干家備感實用的專著!
《領(lǐng)域?qū)S谜Z言實戰(zhàn)》基于一系列JVM語言(Java、Ruby、Groovy、Scala和Clojure),,分析了它們在實現(xiàn)DSL中的優(yōu)劣勢,同時也給出了豐富的示例。如果你是一位架構(gòu)師,希望設(shè)計出極具表現(xiàn)力的API,讓它既能滿足領(lǐng)域用戶的需要,又能達到高效開發(fā)的要求;如果你是一位有技術(shù)背景的特定領(lǐng)域用戶,期待著改善與開發(fā)團隊的溝通效果;如果你是一名程序員,正為如何與領(lǐng)域用戶對接業(yè)務(wù)規(guī)則而苦惱……那么,請看這本書。
本書分三部分,以金融中介系統(tǒng)為例全面細致介紹從頭設(shè)計、實現(xiàn)與使用領(lǐng)域?qū)S谜Z言的方方面面。它不僅講解了DSL的實現(xiàn)手法,而且從最基本的技術(shù)入手,逐漸深入到高級技術(shù),如元編程、解析器組合子,以及ANTLR、Xtext等開發(fā)框架?赐赀@本書,你將全面、深入地理解領(lǐng)域?qū)S谜Z言的定位、規(guī)范、術(shù)語,同時還可以把它作為具體開發(fā)工作的指導(dǎo),學(xué)以致用,提高工作效率和質(zhì)量。
作者簡介 · · · · · ·
作者簡介:
Debasish Ghosh
Anshinsoft公司()首席技術(shù)布道師,開發(fā)者推薦博客“Ruminations of a Programmer”的作者,ACM協(xié)會高級會員。他擁有跨國IT企業(yè)20余年工作經(jīng)驗,擅長為各種客戶(無論是中小型公司還是財富500強企業(yè))交付企業(yè)級解決方案,對自己將軟件設(shè)計和編程最佳實踐制度化而引以為傲,熱愛Java、Ruby、Scala、OO及函數(shù)式編程,關(guān)注DSL和NoSQL數(shù)據(jù)庫。電子郵件:dghosh@acm.org。Twitter賬號:@debasishg。
譯者簡介:
郭曉剛
大學(xué)肄業(yè),有過兩次創(chuàng)業(yè)和創(chuàng)業(yè)失敗的經(jīng)驗,從嵌入式硬件到企業(yè)軟件開發(fā)皆無所成。作為愛好的翻譯反倒堅持不輟,積攢了五六本獨譯、合譯的作品。長期在InfoQ中文站從事編輯工作,順帶磨練了技術(shù)觸覺和翻譯、寫作的技藝,F(xiàn)在家照顧本書拖稿期間出生的兒子。
目錄 · · · · · ·第一部分 領(lǐng)域?qū)S谜Z言入門
第1章 初識DSL 2
1.1 問題域與解答域 2
1.1.1 問題域 3
1.1.2 解答域 3
1.2 領(lǐng)域建模:確立共通的語匯 4
1.3 初窺DSL 6
1.3.1 何為DSL 7
1.3.2 流行的幾種DSL 8
1.3.3 DSL 的結(jié)構(gòu) 10
1.4 DSL 的執(zhí)行模型 11
1.5 DSL 的分類 13
1.5.1 內(nèi)部DSL 13
1.5.2 外部DSL 14
1.5.3 非文本DSL 15
1.6 何時需要DSL 15
1.6.1 優(yōu)點 16
1.6.2 缺點 16
1.7 DSL 與抽象設(shè)計 17
1.8 小結(jié) 18
1.9 參考文獻 18
第2章 現(xiàn)實中的DSL 19
2.1 打造首個Java DSL 20
2.1.1 確立共通語匯 21
2.1.2 用Java 完成的首個實現(xiàn) 21
2.2 創(chuàng)造更友好的DSL 24
2.2.1 用XML 實現(xiàn)領(lǐng)域的外部化 25
2.2.2 Groovy:更具表現(xiàn)力的實現(xiàn)語言 25
2.2.3 執(zhí)行Groovy DSL 27
2.3 DSL 實現(xiàn)模式 28
2.3.1 內(nèi)部DSL 模式:共性與差異性 29
2.3.2 外部DSL 模式:共性與差異性 35
2.4 選擇DSL 的實現(xiàn)方式 39
2.5 小結(jié) 41
2.6 參考文獻 42
第3章 DSL 驅(qū)動的應(yīng)用程序開發(fā) 43
3.1 探索DSL 集成 44
3.2 內(nèi)部DSL 的集成模式 47
3.2.1 通過Java 6 的腳本引擎進行集成 48
3.2.2 通過DSL 包裝器集成 52
3.2.3 語言特有的集成功能 59
3.2.4 基于Spring 的集成 61
3.3 外部DSL 集成模式 62
3.4 處理錯誤和異! 64
3.4.1 給異常命名 64
3.4.2 處理輸入錯誤 65
3.4.3 處理異常的業(yè)務(wù)狀態(tài) 66
3.5 管理性能表現(xiàn) 67
3.6 小結(jié) 68
3.7 參考文獻 68
第二部分 實現(xiàn)DSL
第4章 內(nèi)部DSL 實現(xiàn)模式 70
4.1 充實DSL“工具箱” 71
4.2 內(nèi)嵌式DSL:元編程模式 72
4.2.1 隱式上下文和靈巧API 73
4.2.2 利用動態(tài)裝飾器的反射式元編程 78
4.2.3 利用buider 的反射式元編程 83
4.2.4 經(jīng)驗總結(jié):元編程模式 85
4.3 內(nèi)嵌式DSL:類型化抽象模式 86
4.3.1 運用高階函數(shù)使抽象泛化 86
4.3.2 運用顯式類型約束建模領(lǐng)域邏輯 93
4.3.3 經(jīng)驗總結(jié):類型思維 95
4.4 生成式DSL:通過模板進行運行時代碼生成 96
4.4.1 生成式DSL 的工作原理 97
4.4.2 利用Ruby 元編程實現(xiàn)簡潔的DSL 設(shè)計 97
4.5 生成式DSL:通過宏進行編譯時代碼生成 100
4.5.1 開展Clojure 元編程 100
4.5.2 實現(xiàn)領(lǐng)域模型 102
4.5.3 Clojure 宏之美 103
4.6 小結(jié) 104
4.7 參考文獻 105
第5章 Ruby、Groovy、Clojure 語言中的內(nèi)部DSL 設(shè)計 106
5.1 動態(tài)類型成就簡潔的DSL 107
5.1.1 易讀 107
5.1.2 鴨子類型 108
5.1.3 元編程——又碰面了 110
5.1.4 為何選擇Ruby、Groovy、Clojure 111
5.2 Ruby 語言實現(xiàn)的交易處理DSL 112
5.2.1 從API 開始 113
5.2.2 來點猴子補丁 115
5.2.3 設(shè)立DSL 解釋器 116
5.2.4 以裝飾器的形式添加領(lǐng)域規(guī)則 119
5.3 指令處理DSL:精益求精的Groovy實現(xiàn) 123
5.3.1 指令處理DSL 的現(xiàn)狀 123
5.3.2 控制元編程的作用域 124
5.3.3 收尾工作 127
5.4 思路迥異的Clojure 實現(xiàn) 128
5.4.1 建立領(lǐng)域?qū)ο蟆 ?29
5.4.2 通過裝飾器充實領(lǐng)域?qū)ο蟆 ?30
5.4.3 通過REPL 進行的DSL 會話 134
5.5 告誡 135
5.5.1 遵從最低復(fù)雜度原則 135
5.5.2 追求適度的表現(xiàn)力 135
5.5.3 堅持優(yōu)秀抽象設(shè)計的各項原則 136
5.5.4 避免語言間的摩擦 136
5.6 小結(jié) 137
5.7 參考文獻 138
第6章 Scala 語言中的內(nèi)部DSL設(shè)計 139
6.1 為何選擇Scala 140
6.2 邁向Scala DSL 的第一步 141
6.2.1 通過Scala DSL 測試Java對象 142
6.2.2 用Scala DSL 作為對Java 對象的包裝 142
6.2.3 將非關(guān)鍵功能建模為ScalaDSL 142
6.3 正式啟程 142
6.3.1 語法層面的表現(xiàn)力 143
6.3.2 建立領(lǐng)域抽象 144
6.4 制作一種創(chuàng)建交易的DSL 147
6.4.1 實現(xiàn)細節(jié) 148
6.4.2 DSL 實現(xiàn)模式的變化 152
6.5 用DSL 建模業(yè)務(wù)規(guī)則 153
6.5.1 模式匹配如同可擴展的Visitor模式 153
6.5.2 充實領(lǐng)域模型 155
6.5.3 用DSL 表達稅費計算的業(yè)務(wù)規(guī)則 157
6.6 把組件裝配起來 160
6.6.1 用trait 和類型組合出更多的抽象 160
6.6.2 使領(lǐng)域組件具體化 161
6.7 組合多種DSL 162
6.7.1 擴展關(guān)系的組合方式 163
6.7.2 層級關(guān)系的組合方式 167
6.8 DSL 中的Monad 化結(jié)構(gòu) 171
6.9 小結(jié) 175
6.10 參考文獻 176
第7章 外部DSL 的實現(xiàn)載體 178
7.1 解剖外部DSL 179
7.1.1 最簡單的實現(xiàn)形式 179
7.1.2 對領(lǐng)域模型進行抽象 179
7.2 語法分析器在外部DSL 設(shè)計中的作用 182
7.2.1 語法分析器、語法分析器生成器 183
7.2.2 語法制導(dǎo)翻譯 184
7.3 語法分析器的分類 190
7.3.1 簡單的自頂向下語法分析器 191
7.3.2 高級的自頂向下語法分析器 192
7.3.3 自底向上語法分析器 193
7.4 工具支持下的DSL 開發(fā)——Xtext 194
7.4.1 文法規(guī)則和大綱視圖 195
7.4.2 文法的元模型 197
7.4.3 為語義模型生成代碼 198
7.5 小結(jié) 201
7.6 參考文獻 202
第8章 用Scala 語法分析器組合子設(shè)計外部DSL 203
8.1 分析器組合子 204
8.1.1 什么是分析器組合子 205
8.1.2 按照分析器組合子的方式設(shè)計DSL 206
8.2 Scala 的分析器組合子庫 207
8.2.1 分析器組合子庫中的基本抽象 208
8.2.2 把分析器連接起來的組合子 209
8.2.3 用Monad 組合DSL 分析器 213
8.2.4 左遞歸DSL 語法的packrat分析 214
8.3 用分析器組合子設(shè)計DSL 的步驟 217
8.3.1 第一步:執(zhí)行文法 218
8.3.2 第二步:建立DSL 的語義模型 219
8.3.3 第三步:設(shè)計Order 抽象 220
8.3.4 第四步:通過函數(shù)施用組合子生成AST 221
8.4 一個需要packrat 分析器的DSL實例 223
8.4.1 待解決的領(lǐng)域問題 223
8.4.2 定義文法 225
8.4.3 設(shè)計語義模型 227
8.4.4 通過分析器的組合來擴展DSL語義 229
8.5 小結(jié) 231
8.6 參考文獻 231
第三部分 DSL開發(fā)的未來趨勢
第9章 展望DSL 設(shè)計的未來.234
9.1 語言層面對DSL 設(shè)計的支持越來越充分 235
9.1.1 對表現(xiàn)力的不懈追求 235
9.1.2 元編程的能力越來越強 237
9.1.3 S 表達式取代XML 充當(dāng)載體 237
9.1.4 分析器組合子越來越流行 238
9.2 DSL 工作臺 238
9.2.1 DSL 工作臺的原理 239
9.2.2 使用DSL 工作臺的好處240
9.3 其他方面的工具支持 241
9.4 DSL 的成長和演化 242
9.4.1 DSL 的版本化 242
9.4.2 DSL 平穩(wěn)演化的最佳實踐 242
9.5 小結(jié) 244
9.6 參考文獻 244
附錄A 抽象在領(lǐng)域建模中的角色 246
A.1 設(shè)計得當(dāng)?shù)某橄髴?yīng)具備的特質(zhì) 246
A.1.1 極簡 247
A.1.2 精煉 247
A.1.3 擴展性和組合性 247
A.2 極簡,只公開對外承諾的 247
A.2.1 用泛化來保留演化余地 248
A.2.2 用子類型化防止實現(xiàn)的泄露 248
A.2.3 正確實施實現(xiàn)繼承 249
A.3 精煉,只保留自身需要的 250
A.3.1 什么是非本質(zhì)的 250
A.3.2 非本質(zhì)復(fù)雜性 250
A.3.3 撇除雜質(zhì) 251
A.3.4 用DI 隱藏實現(xiàn)細節(jié) 252
A.4 擴展性提供成長的空間 253
A.4.1 什么是擴展性 253
A.4.2 mixin:滿足擴展性的一種設(shè)計模式 254
A.4.3 用mixin 擴展Map 255
A.4.4 函數(shù)式的擴展性 256
A.4.5 擴展性也可以臨時抱佛腳 256
A.5 組合性,源自純粹 257
A.5.1 用設(shè)計模式滿足組合性 257
A.5.2 回歸語言 259
A.5.3 副作用和組合性 260
A.5.4 組合性與并發(fā) 262
A.6 參考文獻 262
附錄B 元編程與DSL 設(shè)計 263
B.1 DSL 中的元編程 263
B.1.1 DSL 實現(xiàn)中的運行時元編程 264
B.1.2 DSL 實現(xiàn)中的編譯時元編程 265
B.2 作為DSL 載體的Lisp 268
B.2.1 Lisp 的特殊之處 268
B.2.2 代碼等同于數(shù)據(jù) 269
B.2.3 數(shù)據(jù)等同于代碼 269
B.2.4 簡單到只分析列表結(jié)構(gòu)的語法分析器 270
B.3 參考文獻 271
附錄C Ruby 語言的DSL 相關(guān)特性 272
C.1 Ruby 語言的DSL 相關(guān)特性 272
C.2 參考文獻 275
附錄D Scala 語言的DSL 相關(guān)特性 276
D.1 Scala 語言的DSL 相關(guān)特性 276
D.2 參考文獻 279
附錄E Groovy 語言的DSL 相關(guān)特性 280
E.1 Groovy 語言的DSL 相關(guān)特性 280
E.2 參考文獻 282
附錄F Clojure 語言的DSL 相關(guān)特性 283
F.1 Clojure 語言的DSL 相關(guān)特性 283
F.2 參考文獻 285
附錄G 多語言開發(fā) 286
G.1 對IDE 的特性要求 287
G.2 搭建Java 和Groovy 的混合開發(fā)環(huán)境 287
G.3 搭建Java 和Scala 的混合開發(fā)環(huán)境 288
G.4 常見的多語言開發(fā)IDE 288
索引 290
領(lǐng)域?qū)S谜Z言(DSL)實際上是個很好的技術(shù),但最近很熱門,這得益于Martin Fowler 等人的包裝、推廣。
本文關(guān)鍵詞:領(lǐng)域?qū)S谜Z言實戰(zhàn),由筆耕文化傳播整理發(fā)布。
本文編號:215091
本文鏈接:http://sikaile.net/wenshubaike/mishujinen/215091.html