马丁·福勒(Martin Fowler),世界级软件开发大师,ThoughtWorks首席科学家。他是一位作家、演说者、咨询师和泛软件开发领域的意见领袖。他致力于改善企业级的软件设计,对优秀的设计以及支撑优秀设计的工程实践孜孜以求。他在重构、面向对象分析设计、模式、XP和UML等领域都有卓越贡献,著有《重构:改善既有代码的设计》《分析模式:可复用的对象模型》《领域特定语言》《企业应用架构模式》等经典著作。
世界软件开发大师Martin Fowler历时多年完成,堪称DSL领域的丰碑之作,通过Java和C语言分析具体案例,讲解DSL的构造方式和通用原则,软件开发程序员的必备教程,软件开发大师马丁·福勒全新力作。
本书介绍的技巧可用于大多数现代面向对象语言。书中给出了许多采用Java和C#编写的示例,并精选了部分适合采用Ruby编写的示例。
全书共57章,分为6个部分,全面介绍了DSL概念、DSL常见主题、外部DSL主题、内部DSL主题、备选计算模型以及代码生成等内容,揭示了与编程语言无关的通用原则和模式,阐释了如何通过DSL有效提高开发人员的生产力以及增进与领域专家的有效沟通,能为开发人员选择和使用DSL提供有效的决策依据和指导方法。
原版豆瓣评分8.2
豆瓣评论
DSL在中国IT界一直不受重视并且被严重低估。它是应对复杂度的利器。很多人虽然使用过一些类似的手段,但是缺乏明确的DSL设计指导,以至于系统晦涩难懂。例如一直为人所诟病的java企业级开发里面充斥的奇奇怪怪的配置,很多实际上就是一个野生DSL。这本书可以看做是一本手册,也可以看做是一门讨论语言设计的指南。总体来说,每一个有志于成为顶尖工程师的人,都需要读一下。
简要目录
第一部分 叙述
第1章 入门示例 2
第2章 使用DSL 21
第3章 实现DSL 34
第4章 实现内部DSL 53
第5章 实现外部DSL 71
第6章 在内部DSL和外部DSL之间做选择 83
第7章 备选计算模型 89
第8章 代码生成 95
第9章 语言工作台 102
第二部分 常见主题
第10章 DSL集锦 114
第11章 语义模型(Semantic Model) 123
第12章 符号表(Symbol Table) 127
第13章 上下文变量(Context Variable) 135
第14章 构造型构建器(Construction Builder) 139
第15章 宏(Macro) 142
第16章 通知(Notification) 150
第三部分 外部DSL主题
第17章 分隔符制导翻译(Delimiter-Directed Translation) 156
第18章 语法制导翻译(Syntax-Directed Translation) 171
第19章 巴克斯-诺尔范式(BNF) 179
第20章 基于正则表达式表的词法分析器(Regex Table Lexer) 188
第21章 递归下降语法分析器(Recursive Descent Parser) 193
第22章 语法分析器组合子(Parser Combinator) 202
第23章 语法分析器生成器(Parser Generator) 214
第24章 树构造(Tree Construction) 224
第25章 内嵌翻译(Embedded Translation) 239
第26章 内嵌解释(Embedded Interpretation) 244
第27章 外来代码(Foreign Code) 247
第28章 可变分词方式(Alternative Tokenization) 255
第29章 嵌套运算符表达式(Nested Operator Expression) 262
第30章 换行分隔符(Newline Separator) 267
第31章 外部DSL拾遗 271
第四部分 内部DSL主题
第32章 表达式构建器(Expression Builder) 276
第33章 函数序列(Function Sequence) 283
第34章 嵌套函数(Nested Function) 287
第35章 方法级联(Method Chaining) 300
第36章 对象作用域(Object Scoping) 310
第37章 闭包(Closure) 320
第38章 嵌套闭包(Nested Closure) 325
第39章 字面量列表(Literal List) 336
第40章 字面量映射(Literal Map) 338
第41章 动态接收(Dynamic Reception) 344
第42章 注解(Annotation) 359
第43章 语法分析树操作(Parse Tree Manipulation) 367
第44章 类符号表(Class Symbol Table) 377
第45章 文本打磨(Textual Polishing) 385
第46章 字面量扩展(Literal Extension) 389
第五部分 备选计算模型
第47章 适应性模型(Adaptive Model) 394
第48章 决策表(Decision Table) 400
第49章 依赖网络(Dependency Network) 408
第50章 产生式规则系统(Production Rule System) 414
第51章 状态机(State Machine) 426
第六部分 代码生成
第52章 基于转换器的代码生成(Transformer Generation) 430
第53章 基于模板的代码生成(Templated Generation) 435
第54章 嵌入助手(Embedment Helper) 442
第55章 基于模型的代码生成(Model-Aware Generation) 448
第56章 无视模型的代码生成(Model Ignorant Generation) 458
第57章 代沟(Generation Gap) 461
模式清单 468
速查表 470
第二本
重构,一言以蔽之,是在不改变外部行为的前提下,有条不紊地改善代码。20 多年前,正是《重构:改善既有代码的设计》第1 版的出版,使重构终于从编程高手们的小圈子走出,成为众多普通程序员日常开发工作中不可或缺的一部分。如今,Martin Fowler 的《重构:改善既有代码的设计》一书已经成为全球有经验的程序员手中的利器,既可用来改善既有代码的设计、提升软件的可维护性,又可用于使既有代码更易理解、焕发出新的活力。
这本备受关注的第2 版在第1 版的基础上做了全面修订,反映了编程领域业已发生的许多变化。第2 版中介绍的重构列表更加内聚,并用JavaScript 语言重写了代码范例。此外,第2 版中还新增了与函数式编程相关的重构范例,旨在教会读者如何在没有类的环境下开展重构。
新版沿袭了第1 版的结构,依次解释什么是重构,为什么要重构,如何通过“坏味道”识别出需要重构的代码,以及如何在实践中成功实施重构(无论用的是什么编程语言)。
● 理解重构的过程和重构的基本原则;
● 快速有效地应用各种重构手法,提升程序的表达力和可维护性;
● 识别代码中能指示出需要重构的地方的“坏味道”;
● 深入了解各种重构手法,每个手法都包含解释、动机、做法和范例4 个部分;
● 构建稳固的测试,以支持重构工作的开展;
● 理解重构过程的权衡取舍以及重构存在的挑战等。
豆瓣评分9.2
豆瓣评论
最近半年代码写太多了,老大直接推荐我看完这本书然后去重构代码
最近在做代码迁移,顺便要做重构。其实一直不是特别理解重构是什么?之前一直觉得重构是挺难的一件事。好比重新开发!无意发现这本书,讲解还是挺详细的。让我重新认识了重构。开发进行中,小的重构就要加入进来,这可以使你代码更健壮。重构也可以优化逻辑,提高代码质量,减少沉余代码,还可以发现一些功能缺陷等等。重构也可以是一种思想,贯穿你开发过程的始终,这样更有利于后期开发,维护,版本迭代等等。
很喜欢书中的一句经典语录
傻瓜都能写出计算机可以理解的代码。唯有能写出人类容易理解的代码的,才是优秀的程序员。
第三本
典型的方法论书籍只关注工具和技术,面向对象社区期望有一本书能够突破这一局限,而这本开创性的著作正好满足了这一需求。在本书中,作者关注的是面向对象分析和设计的最终结果,也就是模型本身。作者在本书中分享了丰富的对象建模经验,以及识别重复问题并将其转化为可复用的模型的敏锐洞察力,并给出了一系列来自不同领域(包括交易、测量、会计和组织关系等)的模式。
概念模式无法孤立地存在,基于这一认识,作者还给出了一系列“支持模式”。这些模式探讨了如何将概念模型转化为软件,并使其适合于大型信息系统的架构。对每种模式的讲解都包含了其背后的设计思路、应该(或不应该)使用这些模式的时机以及实现中的诀窍。本书中展示的例子构成了一本实用手册,既包含有用的模型,又涵盖对复用技能的深刻洞见,这些都有助于改进分析、建模和实现。
专业评论:
“本书是对不断发展的模式文献的一个重要贡献。它捕捉来自不同领域的深奥的对象建模专业知识,形成一个模式目录。这些领域模式将有助于你解决不同领域中具有挑战性的建模问题。”
———Erich Gamma
“Martin Fowler为我们给出答案,而不仅仅是一个可以找到这些答案的过程。在本书中,透过作者平实朴素的语言,你将找到自己下一个业务对象模型的重要内容。”
———Ward Cunningham
“就像‘四人帮’在他们的经典著作《设计模式》中总结出了通用的设计模式,Martin Fowler在这本让人期待已久的书中为我们总结出应用领域的诸多模式。本书是从事面向对象业务建模和业务过程重组工作的所有分析人员和设计人员的必备之书。”
——Donald G. Firesmith