MF老马不是神

Martin Fowler是OO大师,但是他不是神,他不可能在OO所有领域都有创意和正确引导。

他喜欢玩ROR,结果很多人跟着说好,完全置普通消费者感情不顾,新的语言有的新的误区,中国老子早就说:只要是有形的东西‘必有亏(大概意思)。

Martin Fowler是位于OO研究前列,和普通消费者有很大距离,这就象经济学界真正前卫大师是很少露脸说话的。

在域建模上,我极力推荐四色原型这本书,看看他对MDA“酸劲”如下,结果人家将四色原型模式和UML挂上沟,省得在老马的微词下有所不畅,其实看看Building Better Software with Archetype Patterns and UML这本书就是在谈MDA:

一些人认为MDA将是软件开发上最大的变革:从对象装配到最高级的语言。其它人认为它不过是现在这些CASE工具的暮年而已。我站在后者的阵营中,但我还想多说几句。

现在MDA所说的很多东西CASE工具社区在80年代就讨论过了。我认为CASE工具失败的原因有很多,但最根本的是它们没有能够提供一个一致的编程环境,允许人们以比其它方法更有效的方式构建通用的企业应用。

当然,在某些工作上CASE工具是很有帮助的。例如,我更愿意使用图形化的工具来设计数据库而不是在记事本上敲SQL命令。但是,很多工作根本就没有可能或者说很难在CASE环境上实现。

因此,我所怀疑的就是, MDA是否改变了这一点。UML最早是很合理的,目的就是要帮助人们表达设计的思路,我偏向于这么使用UML,UmlAsSketch(http://martinfowler.com/bliki/UmlAsSketch.html)。但MDA需要从UML得到最终的产品,它对UML的形式化和一致性的要求要高得多。当然UML2是很多人在这方面的努力,试图保证其计算完整性(computationally complete)。但很多工作只是停留在纸面上,并没有清晰的例子或者将UML应用于哪个平台上的实际经验。即使UML具有计算完整性,也需要有效的环境来应用它,以取代其它的开发方法。作为一个同时了解双方的人,我不得不说,这样一个环境,我还没有看到。

举例说吧,以行为逻辑(behavioral logic)为例,我看不出使用序列图或者活动图比使用现代语言直接写代码有什么长处。我发现,即使我必须要以更细节的方式来写代码,我也愿意,而不是选择画这些图,因为我可以执行代码并且测试它们。

即使UML提供了一个高效的编程环境,也有一个推广的过程。作为一个过去的smalltalker,我明白一点:即使是最好的语言,也不一定能够成为主流。

支持MDA的观点还有一些,但也都难以令人信服。

1)拥有一系列OMG标准的支持,固然这是80年代的CASE工具所缺乏的,但这得看人们是不是都遵循这些标准。我很想知道到底有多少MDA的fans把UML当做了不想要的语言UnwantedModelingLanguage。
2)MDA的支持者说到平台无关性,我在PlatformIndependentMalapropism.中已经谈到这个问题,(译者注:Martin在那篇文章中认为这是一个可笑的说法)。
3)我听说MDA将如何通过模式的自动生成来简化开发。但我并没有看到用UML来实现这一点和借助好的库(library)和框架来实现这一点有什么区别。
4)大部分UML的支持者都有一个基本的论断:图要好过文字。有时候这是成立的,但我没有发现有证据证明它总是成立的-比较过流程图和伪代码的人可以得到自己的结论。

不管怎么说,如果我发现我的判断错了,我会非常高兴。我真的愿意看到软件开发的抽象层次再提高一层(更不要说UML的成功对我个人而言绝对是利好啊)。但我就是没有看见UML如何提高了抽象层次,而这,正是MDA成功的必要条件。

有趣地是现在有一种现象:越来越多的人希望不遵循OMG的标准来实现MDA。我听的更多是借助工具实现模型驱动开发,而不是借助OMG的MDA标准族。

这里还有一些其它关于MDA的富有思想的批评声音:

*Steve Cook关于Microsoft's views on MDA和更多的关于MDA的谈话。Steve是UML的主要贡献者之一,也是英国OO早期的领袖之一。
*在OOPSLA 2003会议上,"Bedarra" Dave Thomas对MDA的方方面面提出了怀疑。遗憾的是我没有当时他演讲的视频,但jot column上摘录了他的一些观点。

老马的分析模式一书比奉为和GOF设计模式同样重要,这样推荐的人总算还谦虚补充一句:当然,老马这本书发挥得不好。

好书有两种:真正创意高深有用,如GoF设计模式一书;还有一种,可能并不有创意,但是作者写得不好变成难懂;这就是老马的“分析模式”。

在GoF设计模式中;案例只是理论的进一步阐述,这才是严谨理论书籍的风格,在老马“分析模式”中,特此用一节是使用实例Inventory and Accounting介绍,比喻谁不会啊,但是你做抽象的东西就要审慎使用具象案例;所以这不能算一个简明经典理论书籍,只能算一本解释性的普通书籍。

台湾的蔡学(中)庸的《java夜未眠》中还好像提到老马这本书,他如果去读GoF设计模式,那不是整日整夜都睡不着了?大量初学者在地铁公交车捧着这本书,除了看到童话,能学到什么呢?所以,我抨击的是,这些最早软件的所谓启蒙者,没有一个是正确对初学者进行引导的,还有一个大师是引导大家去分析Java Collection的字节码,所以我对蔡去搞.NET一点不奇怪,但是他最终还是要走到设计这条路上的,补设计模式这一课的。

如果你想了解分析模式,[Peter Coad]Java Modeling in Color with UML和上贴的Building Better Software with Archetype Patterns and UML值得你一读,在当前使用Ioc/AOP架构下(无论你使用EJB3/Jdon/Spring),Model建模变成一个非常重要的工作了。

>无论你使用EJB3/Jdon/Spring
补充一下:我一直使用Together建模,所以,一直使用的是EJB2,然后我开始学会建模分析,所以,如果单就建模这一块,EJB2依然支持,只是没那么时髦而已。

具体技术和你的模式思维是分离的,时髦的技术表示你有一把更好的宝剑罢了,但是更重要的是你的思维:心。

在google中文里面搜索一下老马的分析模式,很多;搜索一下四色原型模型;很少。

如果国人有人真正理解老马的分析模式,他就不难发现Building Better Software with Archetype Patterns and UML一书更具权威,和GOF设计模式同等重要,如果说GOF设计模式开辟了OO对象设计新时代,那么这本书将开辟后十年的MDA新时代。当然,有可能在老马的反对下夭折!

从这两本书的遭遇看到:国人中没有一个真正理解分析模式,只是叶公好龙罢了,当然我也不是完全理解,但是我更容易发现Building Better Software with Archetype Patterns and UML可用,在Together中我经常使用四色模型。

前几天听了一个IBM关于UML2.0和MDA的培训。
说实话,给人特别振奋的东西不多。

如果说真有那么一天,MDA代替的编码,我斗胆说一句,第一个支持的语言一定是java
但这一天需要多久?10年?
想想window95到今天差不多也是10年了,还是蓝天白云的老样子

我看了一晚上《分析模式》就放弃了,可能是写的太差了,并且没有用UML画类图,让我看的头晕。老实说,老马的POEAA是算是最好的。

彭老师能不能推荐本介绍四色原型的书最好是中文版的

继续观望。个人学习UML只是为了找到一个容易沟通的表达工具,感觉还是比较有用的,绝大多数情况下,其实别无选择。
LZ在这喷MF没用,什么时候说话的分量比他还重,就有力量多了。

>LZ在这喷MF没用,什么时候说话的分量比他还重,就有力量多了
误解,我只是强调对待MF要有自己的想法,不能走极端,做跟屁虫;或什么不了解。

MF说个POJO,而且没有严格定义,结果Java世界前几年以POJO为荣,等EJB自己也宣称是POJO了,似乎都是POJO了,如果一个类实现JDK5.0元注释和接口,有什么区别?是否都是POJO?这些都是疑问。

MF搞个分析模式,理论不错,实战性不强,Evans DDD出来后,才对其有一个好的可操作方式。

MF又提了贫血模型,害得大家陷入无谓的讨论,
http://www.jdon.com/jivejdon/thread/31369.html

不过。总体来说poEAA不错,是java在OO企业指导,有MF他们存在,才对OO有一个来自非盈利机构的监督和审核,否则容易被商业公司误导。

这本书有两种看法。一种是学习理论,一种是补充经验。对后一种来说,这书是相当有用的。一个系统分析员需要对用户业务有相当的了解,问题是许多新转行的系统分析员恰恰欠缺的就是这种经验。分析模式一书在补足这些经验方面还是给予了很大的作用。