在巴塞罗那举行
![](/icons/7659de.gif)
ServerSide’sJava专题讨论会上
![](/icons/7659dou.gif)
MartinFowler和NealFord做了
![](/icons/7659yi.gif)
场展示面向语言编程
![](/icons/7659de.gif)
重要报告
![](/icons/7659dou2.gif)
Fowler曾撰文将面向语言编程定义为“围绕
![](/icons/7659yi.gif)
组领域特定语言来构建软件Software
![](/icons/7659de.gif)
编程风格”
![](/icons/7659dou2.gif)
Fowler和Ford又进
![](/icons/7659yi.gif)
步发展了其中
![](/icons/7659de.gif)
![](/icons/7659yi.gif)
些想法(可参见FowleratJaoo2006)
![](/icons/7659dou.gif)
并提出了“超越面向对象编程
![](/icons/7659de.gif)
革命性进步”
![](/icons/7659de.gif)
可能性
面向对象编程以分层结构和树状
![](/icons/7659de.gif)
抽象提供了
![](/icons/7659yi.gif)
种有用
![](/icons/7659de.gif)
建模范式
![](/icons/7659dou2.gif)
然而现实并不总是按层次组织
![](/icons/7659de.gif)
![](/icons/7659dou.gif)
NealFord指出
![](/icons/7659dou2.gif)
现实
![](/icons/7659de.gif)
“盘根错节
![](/icons/7659dou.gif)
彼此联系”是很难用理想化
![](/icons/7659de.gif)
树状画面来勾勒其模型
![](/icons/7659de.gif)
![](/icons/7659dou2.gif)
其结果就是现在广泛使用
![](/icons/7659de.gif)
aspects和XML
![](/icons/7659dou.gif)
它们渐渐地增加了复杂性
![](/icons/7659dou.gif)
并侵蚀了我们实施抽象
![](/icons/7659de.gif)
原意
![](/icons/7659dou2.gif)
为了弥补这个问题
![](/icons/7659dou.gif)
抽象
![](/icons/7659de.gif)
水平应该再次提升
![](/icons/7659dou.gif)
因此Ford建议用语言取代分层来作为建模机制
按照MartinFowler
![](/icons/7659de.gif)
说法
![](/icons/7659dou.gif)
面向对象
![](/icons/7659de.gif)
领域建模让我们得以“汇集词汇”
![](/icons/7659dou.gif)
但语法——将词汇组合起来
![](/icons/7659de.gif)
思路方法——却是缺失
![](/icons/7659de.gif)
;DSL补足了语法
![](/icons/7659de.gif)
方面
![](/icons/7659dou2.gif)
因此面向语言编程引导我们“从研究词汇
![](/icons/7659dou.gif)
即对象
![](/icons/7659dou.gif)
走向
![](/icons/7659yi.gif)
种结合了词汇和语法
![](/icons/7659de.gif)
语言观念
![](/icons/7659dou2.gif)
”
对NealFord来说
![](/icons/7659dou.gif)
用DSL来作为
![](/icons/7659yi.gif)
种新
![](/icons/7659de.gif)
抽象机制令他特别感兴趣
![](/icons/7659de.gif)
是
![](/icons/7659dou.gif)
它能填补上下文
![](/icons/7659de.gif)
空缺
![](/icons/7659dou2.gif)
在缺乏上下文
![](/icons/7659de.gif)
环境中
![](/icons/7659dou.gif)
你要“从最基本
![](/icons/7659de.gif)
共识着手并解释所有
![](/icons/7659de.gif)
细节”
![](/icons/7659dou2.gif)
这就是你和API和框架沟通
![](/icons/7659de.gif)
方式
![](/icons/7659dou.gif)
![](/icons/7659yinwei.gif)
它们没有“任何内建
![](/icons/7659de.gif)
上下文”
![](/icons/7659dou2.gif)
因此代码中总是不断重复
![](/icons/7659yi.gif)
些上下文
![](/icons/7659dou.gif)
以致成了干扰
![](/icons/7659dou2.gif)
相反DSL“总是有着隐含
![](/icons/7659de.gif)
上下文
![](/icons/7659dou.gif)
上下文几乎从不露面
![](/icons/7659dou.gif)
就算露面也是很少很少
![](/icons/7659dou.gif)
通常最多
![](/icons/7659yi.gif)
次”
![](/icons/7659dou2.gif)
因此我们不必
![](/icons/7659yi.gif)
再地提供上下文信息
![](/icons/7659dou.gif)
于是代码更具可读性
![](/icons/7659dou.gif)
也更有表现力
Fowler和Ford都强调了可读性
![](/icons/7659de.gif)
重要
![](/icons/7659dou2.gif)
他们认为DSL
![](/icons/7659de.gif)
动机经常被误解
![](/icons/7659dou2.gif)
目
![](/icons/7659de.gif)
并不是为了让业务分析师能够自己写代码
![](/icons/7659dou.gif)
而是为了让他们能够阅读和检验代码
![](/icons/7659dou.gif)
从而填补专业开发者和业务人员的间
![](/icons/7659de.gif)
罅隙
有些人厌恶使用面向语言编程
![](/icons/7659de.gif)
风格
![](/icons/7659dou.gif)
![](/icons/7659yinwei.gif)
他们担心维护
![](/icons/7659de.gif)
问题以及增加
![](/icons/7659de.gif)
学习负担
![](/icons/7659dou.gif)
特别是在缺乏强大
![](/icons/7659de.gif)
IDE来处理这些纯文字
![](/icons/7659de.gif)
DSL
![](/icons/7659de.gif)
情况下
![](/icons/7659dou2.gif)
Fowler最近在
![](/icons/7659yi.gif)
篇文章中反对说“大
![](/icons/7659yi.gif)
点
![](/icons/7659de.gif)
框架[……]带来
![](/icons/7659de.gif)
挑战
![](/icons/7659yi.gif)
点都不比学
![](/icons/7659yi.gif)
门语言少”
![](/icons/7659dou.gif)
他再次强调了单
![](/icons/7659yi.gif)
语言编写
![](/icons/7659de.gif)
项目
![](/icons/7659de.gif)
复杂性
![](/icons/7659dou2.gif)
并且
![](/icons/7659dou.gif)
NealFord强调说如果
![](/icons/7659yi.gif)
门DSL很难读
![](/icons/7659dou.gif)
那么它
![](/icons/7659de.gif)
设计就是很糟糕
![](/icons/7659de.gif)
![](/icons/7659dou.gif)
![](/icons/7659yinwei.gif)
“[使用DSL
![](/icons/7659de.gif)
]目
![](/icons/7659de.gif)
的
![](/icons/7659yi.gif)
就是为了创造出更容易阅读
![](/icons/7659de.gif)
代码”
至于IDE支持
![](/icons/7659dou.gif)
现今至少有 3家主要厂商正为面向语言编程提供这
![](/icons/7659yi.gif)
类工具:CharlesSimonyi开发
![](/icons/7659de.gif)
IntentionalSoftware
![](/icons/7659dou.gif)
Microsoft
![](/icons/7659de.gif)
SoftwareFactories和JetBrains开发
![](/icons/7659de.gif)
MetaProgramming
![](/icons/7659System.gif)
![](/icons/7659dou2.gif)
这些工具
![](/icons/7659dou.gif)
MartinFowler称的为语言工作台(LanguageWorkbench)
![](/icons/7659dou.gif)
让设计并使用DSL变得更加简单
![](/icons/7659dou2.gif)
这些工具提高了面向语言编程
![](/icons/7659de.gif)
竞争优势
![](/icons/7659dou.gif)
虽然Fowler相信“还要过几年大多数人才会考虑用[语言工作台]来开发实际
![](/icons/7659de.gif)
项目
![](/icons/7659dou2.gif)
”
你如何看?面向语言编程有机会成为“下
![](/icons/7659yi.gif)
位明星”吗?语言工作台
![](/icons/7659de.gif)
能力会在多大程度上影响你在项目中采用DSL
![](/icons/7659de.gif)
决策呢?
延伸阅读
- 2011-9-10-- 用c实现面向对象,我对面向对象分析与设计与实现的一些看法
- 2010-12-15-- 面向对象编程,PHP中实现面向对象编程
- 2011-7-1-- 面向对象编程,JavaScript面向对象编程深入分析(三)
- 2010-12-9-- css面向对象,XHTML与CSS的面向对象编程
- 2010-11-24-- aop的动态代理,.NET中通过代理实现面向方面编程(AOP)
- 2010-12-15-- 面向对象编程,PHP面向对象编程快速入门
- 2010-11-24-- 面向对象,为什么要面向对象呢
- 2011-3-30-- 面向对象,不要用面向对象来迷惑程序员新手
- 2011-3-29-- 面向对象,不要用面向对象来迷惑程序员新手
- 2010-12-9-- js面向对象,JS面向对象编程之对象使用分析
最新评论