这几天又吵得好热闹,以前我是比较热衷于这类活动的,但是现在已经失去了兴趣。无论.Net还是JAVA都是工具而已,只要你能做出客户想要的东西就可以了,就算.Net比JAVA更让人失望吧,如果我用烂工具做出的东西比你用好工具还强,那不是显得我比你牛X许多?不过这几天看帖子,还是有一些感想想记录一下,其中针对.Net大量对COM、API包装,以及不能跨平台的一些个人看法(纯技术上的):

.NET是一个抽象层,这个抽象层正是类似三层结构中的中间层,他的好处是简化了直接对底层的开发(这个是微软一直所大力宣传的),但是同时所带来的一个好处是为将底层替换掉提供了一种方便,虽然微软没有大力宣传这个好处,但是从技术上这是不可避免的。
是的,正如大家广泛抨击的,.Net目前的大量实现都是封装了COM,WIN32API,Managed只是提供了一个接口而已。但是请注意,假如你能充分的理解面向对象思想,你就知道这个“接口”意味着什么,“接口”最大的好处就是提供了松散耦合结构。换句话说,你可以很轻易的替换其它的底层API而保持上层应用程序不需要任何修改,这个就是所谓“跨平台”的基本技术原理。
实际举一个例子,.Net中的WinForm的底层大量的调用了GDI和WIN32系统环境接口,那么是否WinForm就被绑死在Windows平台上了呢?不一定,MWF实现了Managed Winform,基本原理就是采用.Net自带的绘图接口来实现Winform的GUI界面,那么这样只要采用不同的底层绘图接口,那么Winform就能跨平台,正如你所看到的那样,他们已经用实际的行动证明了计划的可行性。
无论微软愿不愿意,.Net实际上已经跨平台了,但是我觉得这并没有出乎微软的意料,甚至微软也可能会乐意看到这个情况,至少我觉得.Net的跨平台特点让微软在战略上“进可攻(尽量保持.Net平台在Windows上的技术先进性,让用户优先采用Windows平台),退可守(如果万一操作系统失守,将来可以通过.Net作为侵蚀其它操作系统的B计划,至少可以不用推出JAVA版的OFFICE吧)。