既要马儿跑的快,又要马儿不吃草
2011-02-28 01:01 by 老赵, 8647 visits这年头技术社区里的一些观点让我很看不惯,例如动辄就说什么什么要被淘汰,什么什么要被替换。比如微软出个F#,就以为它要淘汰C#了,但C#和VB.NET不都已经共存很多年了吗?在我看来,明明是“多了一个选择”,绝对是好事情,又没逼你学,也没人说不学就落伍(不学VB.NET您就不觉得落伍吗?)。ASP.NET MVC也是如此,但非要有人说ASP.NET WebForms要被淘汰了,却“选择性忽视”至今WebForms还在不断成长的事实。MVC和WebForms都是好东西,各有千秋,两种选择罢了,仅此而以。
某段时间常会看到很多人说WebForms是垃圾,一大堆问题,比如说ViewState放在页面上很占空间。我说,ViewState是个很神奇的东西,自动保持状态,许多场景下都能十分方便。如果你嫌它占空间,也可以选择性地关闭,不会影响你什么。可是,某些人还是不愿接受,嗷嗷数落WebForms的不是。好吧,MVC编程模型的确在许多方面胜过WebForms,用好就好。但是,怎么现在就会有人写信问我,诸如在ASP.NET MVC里怎么实现多个下拉框联动这种问题呢?此时往往还会提到WebForms时代实现这个功能有多么方便。我说,您也体会到WebForms的优势了么?结果某位兄台还继续抱怨说,用MVC也真是麻烦,进而说ASP.NET上面怎么就没好用东西。于是我说爱干嘛去干嘛去,还“既要马儿跑得快,又要马儿不吃草”么?
ASP.NET不是傻瓜设计的,否则也无法如此轻易地实现出ASP.NET MVC。WebForms模型也十分精妙,尤其是带上UpdatePanel,绝对让人耳目一新(我知道某些人又要说UpdatePanel性能差了,我还是那句话,我读过UpdatePanel的完整代码,性能绝对不差)。只要不是愚蠢的作品,基本有失就会有得。刚好,前两天和公司里某个项目的弟兄聊天,他说他建议后台数据管理系统使用WebForms开发,结果项目组还是决定使用传统的方式写,原本计划三天完成,现在已经做了两个星期了,还在和大堆数据表的增删改查以及六个下拉框联动搏斗。
还有个“马儿”的例子是关于.NET的。我见过有人抱怨说.NET的程序集管理很混乱,例如一个程序集还会在系统中存在多个版本。有趣的是,他同时还提到了Dll Hell,认为微软怎么总是搞不定此类问题。其实.NET程序集的管理方式,不就是为了解决Dll Hell问题嘛。所谓Dll Hell,往往就是因为不同程序间同名的库文件相互覆盖所造成的。如果高版本的库文件被低版本所覆盖,那么依赖高版本中新增API的程序就无法正常运行了。而且,即使是高版本的库,也有可能无法做到百分百兼容低版本(疏忽谁都会有)。因此,最合适的做法其实就是如.NET那样,同名没有问题,版本不同也不会相互影响,程序集自带元数据。A程序用1.9版本,B程序用2.0版本,大家和平共处,互不干涉。如果一个程序依赖1.0版本的程序集,那么即便系统中已经存在2.0版本也照样无法运行。如果没有这样的机制,即便是传说中伟大的Java平台也会有类似Jar Hell问题,最终可能还是需要一个类似于.NET中GAC的东西。
很多东西都是这种权衡。世界上聪明人不多,但也没那么多笨蛋,我们大家其实都差不多。
支持老赵,现在很多人就是浅尝辄止就觉得自己很明白了,东西存在肯定有其价值。