Declarative programming声明性编程
DDD中经常谈到一个名词是Declarative Design声明式设计,目前比较流行,尤其是并行计算开始走热背景下。
定义:无需表达程序控制流程。只要表达逻辑计算即可,就是表达应该干什么,而不是详细说明如何去完成它。 declarative 设计意思是一种目标设计。
比如MDA和DSL都属于一种declarative Design,它们描述业务目标应该是这样,通过代码生成器生成代码,这样我们无需关注软件语言细节,不再纠缠于数据库的数据和算法,也不要成天在OO和数据之间徘徊选择了。
declarative design能够降低边界影响side effects 或者是意料外的结果,本来我设计目的是这样,但是会产生额外的副作用,其他没有想到的坏影响,这是设计的大忌讳。
Martin Fowler提出Functional programming最小化甚至忽视边界影响,所以被认为是declarative的。function的定义是这个方法只要是相同输入永远是相同输出,无论被执行多少遍,这样,这个方法就可以被多CPU并行计算,这是多核并行计算的基础要求。
所以,并行计算的前提是OO足够好。而不是满嘴数据怎么样怎么样。这也就是为什么你学了国内计算机课程后,看目前世界最新软件技术文献,还是看不懂的原因,因为就是两个世界观。
象Domain specific languages 类型的并行计算语言Scala等框架,都是非常好的declarative Design,可以准确表达设计意图,不会与设计产生意外效应。还有Hybrid languages。
正如Evans 在DDD中所说:当你设计时使用了明确的接口 无边际影响的方法function和断言,我们就能逐渐进入declarative王国。如果能够熟练掌握DDD的Specification(规定 规则 规格),我们可以在任何语言比如Java上构建自己的declarative王国。
新的软件王国就在那里,你是否认识它的存在,抑或已经站在它的门口,或者已经在其中游弋?
原文:
http://en.wikipedia.org/wiki/Declarative_programming
[该贴被admin于2009-04-21 11:33修改过]
[该贴被admin于2009-04-21 12:01修改过]