表现与逻辑的分离

昨天一个同学在MSN上问我一些问题,他正在用DELPHI做一个东西,类似于QQ这样的,即对不同的IP发来的UDP包信息,用不同的窗口显示。其类图大致如下:

可以看出,这是一个很明显的表现与逻辑混合的设计:其中MainForm除了作为主窗体以外,还要负责创建ChatForm,并维护ChatForms列表,并且当收到UDP包时,还要负责将其分发到相应的ChatForm。结果只能是出现一个巨大无比的MainForm,在其中包罗万有,最后常常会造成难以维护的下场。

这是从RAD开始编程的人的通常做法,同时也是RAD工具被人垢病的一个主要方面。

所以我给他提了一个建议,如下图:

在其中插入一个中间类,用于把MainForm中创建和维护ChatForms的功能剥离出来。至于分发UDP消息的功能,暂时可以继续放在MainForm里,由TChatFormManager提供一个根据源IP查询ChatForm的方法,MainForm通过调用此方法取得相应的ChatForm,并将UDP消息交由此ChatForm处理。

其实这就是一种消除“坏味道”的重构,其做法便是所谓的“Extract Class”。

因为他这个东西我也没看到,不知道他具体要做成什么样,所以只能给一个这样的简单意见。在实际的开发中,情况应该会复杂一些,比如有可能需要把UDP的分发放到一个单独的类中处理,或者可能有不同种类的ChatForm,则需要有一个Factory Method来处理创建工作……等等。

随便说说,仅供参考。^O^

抗战胜利五十九周年

五十九年前的今天,日本鬼子签下了投降书,标志着抗战的最终胜利。

全国人民经历了八年多、东北人民更是经历了近十四年的艰苦抗争,终于坚持到了这一天。

BTW:本来早上看新闻说教育部反对教育产业化,还正高兴着呢,看了华前辈的《教育不敢产业化了》后,发现高兴得太早了。

BTW2:访问量过两万了。^O^

BTW3:在CSDN被人说了,算了,还是不说了,做人,要低调。-_-|||

忏悔ing

昨天发了两篇驳斥伪科学的东东,结果普遍反映没看明白。

俺要忏悔,是俺的错!

真正的高手,应该是把复杂的问题说得简单明白。像俺这种菜鸟就只会把简单的问题给说复杂了。

失败-_-|||

不过,无论如何,俺要是再碰上伪科学,还是要跟它没完的。^O^

BTW:看俺今天在王兄那就.net的相关问题与王兄、ARI等的讨论:《我始终不明白的事.》、《邓主席说: 不管黑猫白猫,抓耗子都是好猫 -有感于跟风学习》。

反重力-_-|||

前几天一个朋友从QQ上给我发来了这么一个贴子:《有谁知道别隆采圆盘,知道人工反重力系统》

让我想起去年我回过的一个MAIL,后来还发到CSDN的水园,不过现在找不到了,只好把邮件内容和我的反驳贴在这里。

网络促进了信息的交流,同时也带来了伪科学的高速传播。

回到那个贴子上,原贴引用了三篇报道,除第二篇没有出处以外,第一篇和第三篇分别来自:国际先驱导报(新浪转载)和中国科技日报。不论它的来源是否真实,如果是真的,那这两位记者以及那些编辑的水平就太差了。

照例一条条来说:

>只要以很高的电压将电能输入电容器,就会在某个方向产生一个微弱的推力

大屏幕彩电里有大量的高压电容,其承受的电压通常高达数十万伏,不过好像从来没有听说里面的电容自己飞出来过。

>把两个2英尺宽的金属盘装载在10英尺长的转轴末端,用50瓦特的电力以高达5万伏的电压冲击该装置,金属盘以每秒16转的速度旋转起来了。

从基本的电学常识可以知道,这个装置正在以1毫安的电流在消耗电力,对应的每秒做了50焦耳的功,只要金属盘够轻,有很多方法可以实现用这些能量让它转起来,没有证据可以证明这种旋转是由于子虚乌有的所谓“别费尔德-布朗效应”。

>把高压电打入该飞行器,它果真立即飘升到空中,飘升机就此诞生。

又是这个XX效应,不过照文中对这个装置的说明,完全不像是一个电容器,而且同样没有证据证明使之飘升的是所谓的XX效应提供。

至于离子风,文中所引用的所谓“正统科学家”说的也都是外行话,不足凭信。

还有那个超导的实验,这是典型的超磁浮现象,是由于产生的电磁作用力与重力相抵消而造成的,并非什么“反重力”现象。

>关于引力,牛顿力学与爱因期坦相对论是两种互为补充但并非完全协致的理论。

牛顿引力理论一样可以证明光在引力作用下弯曲,只是用爱因斯坦的广义相对论计算的结果是,弯曲角度比牛顿的方法大一倍,而后来证明爱因斯坦是对的。小爱证明了引力是时空弯曲的一种表现。

而有质量就有引力,要“反重力”(即“反地球引力”),就要设法消除物体的质量(总不能消除地球的质量吧)。按照E=mc2,质量消失后就要转化为相应的能量(简单算一下,c取约=3 * 10E8 m/s,以文中的超导例子,设物体为100克,即0.1kg,失重1%,即1g,则转为能量约相当于2500万度电),而能量必须有它的存在方式,如质量、热或运动等。总不可能如此巨大的能量就这样消失了?

结论只能是:这个贴子不过是一帮连“重力”是什么都不知道的人搞的“反重力”而已。