登入帳戶  | 訂單查詢  | 購物車/收銀台( 0 ) | 在線留言板  | 付款方式  | 運費計算  | 聯絡我們  | 幫助中心 |  加入書簽
會員登入 新用戶登記
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2023年度TOP分類瀏覽雜誌 臺灣用戶
品種:超過100萬種各類書籍/音像和精品,正品正價,放心網購,悭钱省心 服務:香港台灣澳門海外 送貨:速遞郵局服務站

新書上架簡體書 繁體書
暢銷書架簡體書 繁體書
好書推介簡體書 繁體書

八月出版:大陸書 台灣書
七月出版:大陸書 台灣書
六月出版:大陸書 台灣書
五月出版:大陸書 台灣書
四月出版:大陸書 台灣書
三月出版:大陸書 台灣書
二月出版:大陸書 台灣書
一月出版:大陸書 台灣書
12月出版:大陸書 台灣書
11月出版:大陸書 台灣書
十月出版:大陸書 台灣書
九月出版:大陸書 台灣書
八月出版:大陸書 台灣書
七月出版:大陸書 台灣書
六月出版:大陸書 台灣書

『簡體書』领域专用语言实战

書城自編碼: 2134054
分類:簡體書→大陸圖書→計算機/網絡程序設計
作者: Debasish
國際書號(ISBN): 9787115331748
出版社: 人民邮电出版社
出版日期: 2013-11-01
版次: 1
頁數/字數: 312/479000
書度/開本: 16开 釘裝: 平装

售價:HK$ 182.9

我要買

 

** 我創建的書架 **
未登入.


新書推薦:
希腊文明3000年(古希腊的科学精神,成就了现代科学之源)
《 希腊文明3000年(古希腊的科学精神,成就了现代科学之源) 》

售價:HK$ 82.8
粤行丛录(岭南史料笔记丛刊)
《 粤行丛录(岭南史料笔记丛刊) 》

售價:HK$ 80.2
岁月待人归:徐悲鸿自述人生艺术
《 岁月待人归:徐悲鸿自述人生艺术 》

售價:HK$ 61.4
女人的中国医疗史:汉唐之间的健康照顾与性别
《 女人的中国医疗史:汉唐之间的健康照顾与性别 》

售價:HK$ 103.8
资治通鉴熊逸版:第四辑
《 资治通鉴熊逸版:第四辑 》

售價:HK$ 470.8
中国近现代名家精品——项维仁:工笔侍女作品精选
《 中国近现代名家精品——项维仁:工笔侍女作品精选 》

售價:HK$ 66.1
宋瑞驻村日记(2012-2022)
《 宋瑞驻村日记(2012-2022) 》

售價:HK$ 115.6
汗青堂丛书138·帝国的切口:近代中国口岸的冲突与交流(1832-1914)
《 汗青堂丛书138·帝国的切口:近代中国口岸的冲突与交流(1832-1914) 》

售價:HK$ 127.4

 

建議一齊購買:

+

HK$ 183.2
《PHP编程(第3版)》
+

HK$ 90.7
《HTML5+CSS3+jQuery Mobile轻松构造AP》
+

HK$ 90.7
《.NET框架设计 模式、配置、工具》
+

HK$ 205.9
《PHP从入门到精通(第3版)(附光盘1张)》
+

HK$ 182.9
《Perl语言入门 第六版(中文版)》
編輯推薦:
著名博客“Ruminations of a Programmer”作者、ACM高级会员20余年经验总结
多位业内大牛鼎力推荐
全面涵盖5种JVM语言
真正讲透DSL设计与实现
內容簡介:
本书是第一本领域专用语言(DSL)的实战类图书,它面向真正的实践者,是一本让奋战在开发第一线的实干家备感实用的专著!
《领域专用语言实战》基于一系列JVM语言(Java、Ruby、Groovy、Scala和Clojure),分析了它们在实现DSL中的优劣势,同时也给出了丰富的示例。如果你是一位架构师,希望设计出极具表现力的API,让它既能满足领域用户的需要,又能达到高效开发的要求;如果你是一位有技术背景的特定领域用户,期待着改善与开发团队的沟通效果;如果你是一名程序员,正为如何与领域用户对接业务规则而苦恼……那么,请看这本书。
本书分三部分,以金融中介系统为例全面细致介绍从头设计、实现与使用领域专用语言的方方面面。它不仅讲解了DSL的实现手法,而且从最基本的技术入手,逐渐深入到高级技术,如元编程、解析器组合子,以及ANTLR、Xtext等开发框架。看完这本书,你将全面、深入地理解领域专用语言的定位、规范、术语,同时还可以把它作为具体开发工作的指导,学以致用,提高工作效率和质量。
關於作者:
Debasish Ghosh
Anshinsoft公司 首席技术布道师,开发者推荐博客“Ruminations of a
Programmer”的作者,ACM协会高级会员。他拥有跨国IT企业20余年工作经验,擅长为各种客户(无论是中小型公司还是财富500强企业)交付企业级解决方案,对自己将软件设计和编程最佳实践制度化而引以为傲,热爱Java、Ruby、Scala、OO及函数式编程,关注DSL和NoSQL数据库。Twitter账号:@debasishg。
译者简介:
郭晓刚
大学肄业,有过两次创业和创业失败的经验,从嵌入式硬件到企业软件开发皆无所成。作为爱好的翻译反倒坚持不辍,积攒了五六本独译、合译的作品。长期在InfoQ中文站从事编辑工作,顺带磨练了技术触觉和翻译、写作的技艺。现在家照顾本书拖稿期间出生的儿子。
目錄
第一部分  领域专用语言入门
第1章  初识DSL2
1.1  问题域与解答域2
1.1.1  问题域3
1.1.2  解答域3
1.2  领域建模:确立共通的语汇4
1.3  初窥DSL6
1.3.1  何为DSL7
1.3.2  流行的几种DSL8
1.3.3  DSL 的结构10
1.4  DSL 的执行模型11
1.5  DSL 的分类13
1.5.1  内部DSL13
1.5.2  外部DSL14
1.5.3  非文本DSL15
1.6  何时需要DSL15
1.6.1  优点16
1.6.2  缺点16
1.7  DSL 与抽象设计17
1.8  小结18
1.9  参考文献18
第2章  现实中的DSL19
2.1  打造首个Java DSL20
2.1.1  确立共通语汇21
2.1.2  用Java 完成的首个实现21
2.2  创造更友好的DSL24
2.2.1  用XML 实现领域的外部化25
2.2.2  Groovy:更具表现力的实现语言25
2.2.3  执行Groovy DSL27
2.3  DSL 实现模式28
2.3.1  内部DSL 模式:共性与差异性29
2.3.2  外部DSL 模式:共性与差异性35
2.4  选择DSL 的实现方式39
2.5  小结41
2.6  参考文献42
第3章  DSL 驱动的应用程序开发43
3.1  探索DSL 集成44
3.2  内部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  处理异常的业务状态66
3.5  管理性能表现67
3.6  小结68
3.7  参考文献68
第二部分  实现DSL
第4章  内部DSL 实现模式70
4.1  充实DSL“工具箱”71
4.2  内嵌式DSL:元编程模式72
4.2.1  隐式上下文和灵巧API73
4.2.2  利用动态装饰器的反射式元编程78
4.2.3  利用buider 的反射式元编程83
4.2.4  经验总结:元编程模式85
4.3  内嵌式DSL:类型化抽象模式86
4.3.1  运用高阶函数使抽象泛化86
4.3.2  运用显式类型约束建模领域逻辑93
4.3.3  经验总结:类型思维95
4.4  生成式DSL:通过模板进行运行时代码生成96
4.4.1  生成式DSL 的工作原理97
4.4.2  利用Ruby 元编程实现简洁的DSL 设计97
4.5  生成式DSL:通过宏进行编译时代码生成100
4.5.1  开展Clojure 元编程100
4.5.2  实现领域模型102
4.5.3  Clojure 宏之美103
4.6  小结104
4.7  参考文献105
第5章  Ruby、Groovy、Clojure 语言中的内部DSL 设计106
5.1  动态类型成就简洁的DSL107
5.1.1  易读107
5.1.2  鸭子类型108
5.1.3  元编程——又碰面了110
5.1.4  为何选择Ruby、Groovy、Clojure111
5.2  Ruby 语言实现的交易处理DSL112
5.2.1  从API 开始113
5.2.2  来点猴子补丁115
5.2.3  设立DSL 解释器116
5.2.4  以装饰器的形式添加领域规则119
5.3  指令处理DSL:精益求精的Groovy实现123
5.3.1  指令处理DSL 的现状123
5.3.2  控制元编程的作用域124
5.3.3  收尾工作127
5.4  思路迥异的Clojure 实现128
5.4.1  建立领域对象129
5.4.2  通过装饰器充实领域对象130
5.4.3  通过REPL 进行的DSL 会话134
5.5  告诫135
5.5.1  遵从最低复杂度原则135
5.5.2  追求适度的表现力135
5.5.3  坚持优秀抽象设计的各项原则136
5.5.4  避免语言间的摩擦136
5.6  小结137
5.7  参考文献138
第6章  Scala  语言中的内部DSL设计139
6.1  为何选择Scala140
6.2  迈向Scala DSL 的第一步141
6.2.1  通过Scala DSL 测试Java对象142
6.2.2  用Scala DSL 作为对Java  对象的包装142
6.2.3  将非关键功能建模为ScalaDSL142
6.3  正式启程142
6.3.1  语法层面的表现力143
6.3.2  建立领域抽象144
6.4  制作一种创建交易的DSL147
6.4.1  实现细节148
6.4.2  DSL 实现模式的变化152
6.5  用DSL 建模业务规则153
6.5.1  模式匹配如同可扩展的Visitor模式153
6.5.2  充实领域模型155
6.5.3  用DSL 表达税费计算的业务规则157
6.6  把组件装配起来160
6.6.1  用trait 和类型组合出更多的抽象160
6.6.2  使领域组件具体化161
6.7  组合多种DSL162
6.7.1  扩展关系的组合方式163
6.7.2  层级关系的组合方式167
6.8  DSL 中的Monad 化结构171
6.9  小结175
6.10  参考文献176
第7章  外部DSL  的实现载体178
7.1  解剖外部DSL179
7.1.1  最简单的实现形式179
7.1.2  对领域模型进行抽象179
7.2  语法分析器在外部DSL  设计中的作用182
7.2.1  语法分析器、语法分析器生成器183
7.2.2  语法制导翻译184
7.3  语法分析器的分类190
7.3.1  简单的自顶向下语法分析器191
7.3.2  高级的自顶向下语法分析器192
7.3.3  自底向上语法分析器193
7.4  工具支持下的DSL 开发——Xtext194
7.4.1  文法规则和大纲视图195
7.4.2  文法的元模型197
7.4.3  为语义模型生成代码198
7.5  小结201
7.6  参考文献202
第8章  用Scala 语法分析器组合子设计外部DSL203
8.1  分析器组合子204
8.1.1  什么是分析器组合子205
8.1.2  按照分析器组合子的方式设计DSL206
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  用分析器组合子设计DSL 的步骤217
8.3.1  第一步:执行文法218
8.3.2  第二步:建立DSL 的语义模型219
8.3.3  第三步:设计Order 抽象220
8.3.4  第四步:通过函数施用组合子生成AST221
8.4  一个需要packrat 分析器的DSL实例223
8.4.1  待解决的领域问题223
8.4.2  定义文法225
8.4.3  设计语义模型227
8.4.4  通过分析器的组合来扩展DSL语义229
8.5  小结231
8.6  参考文献231
第三部分  DSL开发的未来趋势
第9章  展望DSL 设计的未来.234
9.1  语言层面对DSL 设计的支持越来越充分235
9.1.1  对表现力的不懈追求235
9.1.2  元编程的能力越来越强237
9.1.3  S 表达式取代XML  充当载体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 平稳演化的最佳实践242
9.5  小结244
9.6  参考文献244
附录A  抽象在领域建模中的角色246
A.1  设计得当的抽象应具备的特质246
A.1.1  极简247
A.1.2  精炼247
A.1.3  扩展性和组合性247
A.2  极简,只公开对外承诺的247
A.2.1  用泛化来保留演化余地248
A.2.2  用子类型化防止实现的泄露248
A.2.3  正确实施实现继承249
A.3  精炼,只保留自身需要的250
A.3.1  什么是非本质的250
A.3.2  非本质复杂性250
A.3.3  撇除杂质251
A.3.4  用DI 隐藏实现细节252
A.4  扩展性提供成长的空间253
A.4.1  什么是扩展性253
A.4.2  mixin:满足扩展性的一种设计模式254
A.4.3  用mixin 扩展Map255
A.4.4  函数式的扩展性256
A.4.5  扩展性也可以临时抱佛脚256
A.5  组合性,源自纯粹257
A.5.1  用设计模式满足组合性257
A.5.2  回归语言259
A.5.3  副作用和组合性260
A.5.4  组合性与并发262
A.6  参考文献262
附录B  元编程与DSL  设计263
B.1  DSL 中的元编程263
B.1.1  DSL 实现中的运行时元编程264
B.1.2  DSL 实现中的编译时元编程265
B.2  作为DSL 载体的Lisp268
B.2.1  Lisp 的特殊之处268
B.2.2  代码等同于数据269
B.2.3  数据等同于代码269
B.2.4  简单到只分析列表结构的语法分析器270
B.3  参考文献271
附录C  Ruby 语言的DSL 相关特性272
C.1  Ruby 语言的DSL 相关特性272
C.2  参考文献275
附录D  Scala 语言的DSL 相关特性276
D.1  Scala 语言的DSL 相关特性276
D.2  参考文献279
附录E  Groovy 语言的DSL 相关特性280
E.1  Groovy 语言的DSL 相关特性280
E.2  参考文献282
附录F  Clojure 语言的DSL 相关特性283
F.1  Clojure 语言的DSL 相关特性283
F.2  参考文献285
附录G  多语言开发286
G.1  对IDE 的特性要求287
G.2  搭建Java 和Groovy 的混合开发环境287
G.3  搭建Java  和Scala  的混合开发环境  288
G.4  常见的多语言开发IDE288
索引290
內容試閱
2001年春天,我供职的Anshinsoft公司
开始涉足企业应用开发业务,客户是一家在亚太区数一数二的证券中介和资产管理企业。这段经历激起了我对一个专门的问题领域进行建模,然后将模型转换成软件的兴趣。于是我开始了一段考验毅力的学习旅程,仔细参详了Eric
Evans的领域驱动设计著作(Domain-Driven Design: Tackling Complexity in the
Heart of Software ),聆听了Josh Bloch关于如何设计优秀API的教诲(How to Design a
Good API Why it Matters,以及Martin
Fowler关于DSL的教义。
精心设计的DSL旨在向目标用户提供人性化的界面,而做到这一点的最佳途径是让编程模型使用领域专用语言来“说话”。我们一直以来总是把程序设计得像个“黑盒”,很少让业务人员得知其内部细节,这种做法可以休矣。经验告诉我,所有用户都希望查看一下你建模在代码里的业务规则,而不是白板上杂乱的框框和箭头。
嵌在代码里的规则要容易被用户理解,用户必须能看懂你使用的语言,这就是我从事十年领域建模的领悟。当规则可被理解的时候,DSL也就呼之欲出了。随之得到改善的不仅有开发团队和业务人员的沟通效率,还有软件面向用户的表达能力。
对于我们能否为用户提供表现力充沛的语法和语义,实现语言无论何时都是一个决定性的因素。有赖于当今生态环境的巨大发展,我们所设计的语言得以在表现力上有了长足进步。以鼓励开发者编写精炼而富有表现力的代码而论,Ruby、Groovy、Scala和Clojure是先行的表率。在这几种语言下的第一手编程经验让我感觉到,它们的语言风格和表达习惯远比大多数前代语言更适合领域建模。
写这样一本关于DSL的书是很大的挑战。我试图关注DSL的一切现实事物,所以从一开始就设定了具体的领域。当我们渐次展开论述,领域模型随着各种业务需求的累加而变得越来越复杂。这正好充分体现了DSL驱动的开发方式对问题域复杂度增长的适应能力。DSL方式并不是对API设计的颠覆,它只是鼓励你在API的设计思路上多考虑一个维度。请务必记住,你的用户才是DSL的使用者。凡事多从用户的角度去考虑,你一定会成功的!

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 香港用户  | 台灣用户 | 大陸用户 | 海外用户
megBook.com.hk
Copyright © 2013 - 2024 (香港)大書城有限公司  All Rights Reserved.