Posted on 2006-03-10 11:49
killvin 阅读(561)
评论(0) 编辑 收藏 所属分类:
feeling
很久都不骂人了,可是一不留心又看到了他写了恶心文章,实在是让人愤慨!这位板桥里人的"大名"是从透明的blog上知道的,首先就是感觉这个人的脑子有点问题!不去评论他发布的那个所谓的框架,就看看他写的一些文章就足以知道这个人脑袋非常的混乱,在这样混乱的情况下写出来的文章也就可想而知了,最近这位所谓的"大侠"又开始害人了
你还在用if else吗?- http://www.jdon.com/artichect/ifelse.htm
面向过程设计和面向对象设计的主要区别是:是否在业务逻辑层使用冗长的if else判断。如果你还在大量使用if else,当然,界面表现层除外,即使你使用Java/C#这样完全面向对象的语言,也只能说明你的思维停留在传统的面向过程语言上。
-我很纳闷了作者怎么可以从是否使用if else来判断一个设计是否符合OO特性呢?我们看到的if else属于语言这个层次的东西,而if else仅仅是完成逻辑判断的语句;如果说作者的这个观点成立的话,java、c#的语言发明者应该早就明白或者预测到if else 的"不OO"的特性,也会考虑到在语言层面删除这样的逻辑判断语句,但事实呢?发明者非但没有删除相反其他语言的发明者也一起发明了if else语句?!难道是大师们错了?
还是以大家熟悉的论坛帖子为例子,如ForumMessage是一个模型,但是实际中帖子分两种性质:主题贴(第一个根贴)和回帖(回以前帖子的帖子),这里有一个朴素的解决方案:
建立一个ForumMessage,然后在ForumMessage加入isTopic这样判断语句,注意,你这里一个简单属性的判断引入,可能导致你的程序其他地方到处存在if else 的判断。
如果我们改用另外一种分析实现思路,以对象化概念看待,实际中有主题贴和回帖,就是两种对象,但是这两种对象大部分是一致的,因此,我将ForumMessage设为表达主题贴;然后创建一个继承ForumMessage的子类ForumMessageReply作为回帖,这样,我在程序地方,如Service中,我已经确定这个Model是回帖了,我就直接下溯为ForumMessageReply即可,这个有点类似向Collection放入对象和取出时的强制类型转换。通过这个手段我消灭了以后程序中if else的判断语句出现可能。
-作者在这里似乎列举了一个例子,可是对于帖子和回帖这样简单的问题,只要遵守OO的设计师都会抽象出一个帖子的父类,然而这又能说明什么呢?在具体的业务逻辑中难道你不判断传递过来的对象的类别?(现在主题贴与回帖的处理方法是不同的),同样你无法避免在具体的编码中使用if else的可能?!
最后总结:将if else用在小地方还可以,如简单的数值判断;但是如果按照你的传统习惯思维,在实现业务功能时也使用if else,那么说明你的思维可能需要重塑,你的编程经验越丰富,传统过程思维模式就容易根深蒂固,想靠自己改变很困难;建议接受专业头脑风暴培训。
用一句话总结:如果你做了不少系统,很久没有使用if else了,那么说明你可能真正进入OO设计的境地了。(这是本人自己发明的实战性的衡量考核标准)。
-显然作者并不是去讨论if else的语言问题,而是为自己的"洗脑培训"打广告!并讲这样的问题上升到设计模式、禅的境界,可谓是煞费苦心呀,没有人说设计模式不好也没有人怀疑禅的境界的高深,但不是作者这样的人靠读一两篇文章或者发布个所谓的"毫无实际意义"的框架就可以领悟到的,还是那句话:长得丑不要紧,不要出来吓人!不过我还要补充一句就是,不懂不要紧,不要乱说免得害人(因为我们都知道泼妇骂街的道理,虽然没文化但确实能够带来眼球效应)。