反驳“你的编程语言能这样做吗? ”
这篇文章讥笑Java是一个名词王国,其实C也是,“名词”是因为来自于领域建模,现实世界中有很多结构性名词,也就是实体,反映到软件世界的名词,DDD本身也是一种名词建模方法,结合SOA服务,名动词可以完美结合,当然函数式语言可以认为是将SOA服务动词织入语言层次的一种做法。
文中提到因为名词语言的局限,便不容易有Map/Reduce这样伟大云计算产生,这其实也有失偏颇,首先Map/Reduce分两层含义,一种是抽象层面的方法学:分与合;还有一种层面是实现执行层面,也就是算法,很多注重算法的人包括那个李开(始)复(制)一开始介绍google的Map/Reduce也是加上算法两个字,这其实盲人摸象,一管之见而已,
我们看看Map/Reduce其实在每天Java中经常碰到(抽象层面):
我们经常做下面的事情:
1.创建一个输出集合list,
2.从输入集合中遍历每个元素,再调用相应转换方法,然后把转换结果保存到另外一个输出集合中。
3.返回这个输出集合list.
这三步模式其实一种Map操作模式,使用Google Guava 的 Iterables 类提供Map操作如下:
|
Reduce/Fold模式也是经常碰到:
Fold是这样一个方法someMethod(T),方法内部有一个的可变状态。 反复调用输入集合中每一个元素,直至到最后,我们得到fold操作的结果。
|