.NET在蹉跎中一路前行2

www.chinacs.net  2005-03-18  中文C#技术站
<script type="text/javascript"> var arrBaiduCproConfig=new Array(); arrBaiduCproConfig['uid'] = 118747; arrBaiduCproConfig['n'] = 'sunportcpr'; arrBaiduCproConfig['tm'] = 44; arrBaiduCproConfig['cm'] = 134; arrBaiduCproConfig['um'] = 44; arrBaiduCproConfig['rad'] = 1; arrBaiduCproConfig['w'] = 300; arrBaiduCproConfig['h'] = 250; arrBaiduCproConfig['bd'] = '#377ED0'; arrBaiduCproConfig['bg'] = '#ffffff'; arrBaiduCproConfig['tt'] = '#0000ff'; arrBaiduCproConfig['ct'] = '#000000'; arrBaiduCproConfig['url'] = '#666666'; arrBaiduCproConfig['bdl'] = '#377ED0'; arrBaiduCproConfig['wn'] = 1; arrBaiduCproConfig['hn'] = 3; arrBaiduCproConfig['ta'] = 'center'; arrBaiduCproConfig['tl'] = 'top'; arrBaiduCproConfig['bu'] = 1; </script><script src="http://cpro.baidu.com/cpro/ui/ui.js" type="text/javascript"> </script><script type="text/javascript"> </script>
  .NET重要技术思考

  .NET Remoting

  从COM(Component Object Model)时代到DCOM(Distributed COM),微软扮演了一个推动者的角色。如果说COM提供了一个Windows平台上的对象通讯技术,并且逐渐成为应用程序之间彼此通讯及互动的技术主流,那么DCOM则是解决了计算机的通信和互动技术。

  COM的着眼点是在于同一台计算机上不同应用程序之间的通讯需求,跨到另外一台计算机之外,就不是一开始COM所设想到的领域。所幸跨程序的通讯和跨计算机的通讯差异仅在于通讯协议的处理(也就是定位问题),对于数据交换上型别差异的处理并不会因此而有区别。所以要让COM的环境能更进一步延伸到跨计算机的领域,只要妥善解决计算机定位的需求,就有机会克服。同样幸运的是,COM在一开始的设计中完全不去碰触跨计算机的问题,使得要在COM的架构之上再架上一层跨计算机的处理环境并不会去破坏到原本的架构。于是COM的网络延伸版本DCOM(Distributed COM)就此出现,专责让COM组件可以在网络环境下持续提供服务。DCOM最主要处理的是两个议题,第一个议题是网络通讯能力,第二个议题则是权限的问题。之前COM是在同一台计算机中找特定的组件,而DCOM则要更进一步去找网络上的某台计算机,之后沿用COM的机制找到计算机上的组件。

  到了.NET当中,跨计算机的问题同样也需要对应的技术进行处理,.NET Remoting就是一个对应于DCOM的技术,它让存活在不同应用程序域(AppDomain,一个 .NET中的新概念)、不同执行程序、以及不同计算机上的对象能够顺畅的进行沟通协作。在累积了长期以来分布式应用的经验之后,微软没有理由把东西设计的更难用。从某种意义来说,.NET Remoting提供了比过去更易于使用的开发架构,用来来支持跨计算机的沟通作业,省却开发人员建立分布式应用程序时必须花费的心力,不过这样一个“出色”的分布式应用应用框架并没有得到本来应该得到的“待遇”。相对于Java的RMI而言,它更加简单同时保持设计方面的弹性,同时摈弃了DCOM的一些缺点,在对于一个前后端必须以有状态紧密结合方式进行互动作业,同时又期望呼叫和数据交换的动作上能以最有效的方式进行的环境而言,.NET Remoting是一个比较恰当的选择方案。

  可是问题在于微软本身对于XML Web Services的狂热推崇让.NET Remoting迷失了本来属于它自己的阵地,也就是说XML Web Services的过火让.NET Remoting忘记了自己应该承担的角色,于是在开发者眼中成为了一个“可有可无”的作品,至少对于很多开发人员而言,在需要创建分布式应用程序的时候首先考虑的是XML Web Services,而在于企业内部应用,特别是在可以控制服务器和客户端平台的情况下(比如完全基于.NET平台的应用),Web Service因为效率等等各个方面的原因并无法体现出优势。从技术本身来讲,.NET Remoting是一个非常出色的架构,但在商业方面,这是一个失败,毕竟,设计一个出色的产品然后束之高阁难免“不像话”。

  .NET Remoting恰恰是这个战略的牺牲品,虽然拥有与生俱来的优点,不过依然生不逢时。

  Enterprise Services

  从一个很直接的感觉来说,Enterprise Services只是对于COM+的一个包装,从使用方式和技术实现本身而言,和VB或者VC下使用COM+服务没有本质的区别,而更多的只是在于多了一层托管代码的包装,让.NET开发人员能够比较顺利的使用这些服务的功能。

  相对于J2EE平台上的应用服务器如BEA的WebLogic,IBM的WebSphere或者开放源代码的JBoss,微软是希望能够在企业级应用之中分一杯羹,可是因为先天不足的原因,在企业应用中需要的事务、负载平衡、故障转移等等技术中的表现不是那么尽如人意,至少缺乏非常清晰的应用服务器(Application Server)的概念,虽然微软不止一次的强调操作系统本身就是一个应用服务器,一个IT信息的基础结构。但是从开发人员实际的使用来看,这是一个“晦涩难懂”的产品。

  虽然.NET Framework改变了很多东西,但是作为企业级应用中最重要的支撑技术——事务和服务,并没有得到同等程度的发展,我想这个也就是很多大型企业应用目前不选择.NET的一个理由吧,毕竟从MTS——COM+——Enterprise Services,这一路走来微软始终不是提供一个非常透明的机制让开发人员去控制各个环节(可能和微软一贯以来的策略有关,只是关心最广泛的应用而不是最高端的应用),而.NET中的所谓企业服务,和竞争对手提供的相当的EJB还是有比较大的差距,这是一个日前的微软无法解决的软肋。

  Web Service

  从一开始,微软就将其作为“重头戏”推出,并且饶有意思的增加了XML,然后那个“XML Web Services”就成为了.NET战略中一个非常重要的术语,就如微软的白皮书所言“Microsoft? .NET 是Microsoft XML Web Services 平台”,微软通过.NET来改变现有的互联网络结构,“Windows正在走向过去”这样的宣传是在于希望各个子系统之间的通信完全基于Web Service,那样的话,作为Win32开发人员一直困扰的组建注册,分发等等一系列问题都能够得到解决,并且能够用更多的语言更多的平台去开发应用。

  “一切皆是Web Service”,这是一个冒进的举动,至少对于4年以前的世界,而这四年以来,虽然Web Service有很多很多的优点可以让我们“歌功颂德”,但是不是“万金油”,比如一直称垢的性能和安全问题也阻碍了Web Service一统天下,于是其他分布式应用架构在特定的领域依然能够有自己的生存空间。

  这一次,微软高估了Web Service,虽然目前的.NET是实现XML Web Services最好的平台,Visual Studio .NET也提供了从上至下的包装,让开发人员完全可以不关心协议的底层实现,比如SOAP,比如对象序列化,比如WSDL,因为一切的一切都可以在IDE中自动完成。我们不否认因为.NET,Web Service从概念已经走进应用,而WSE 2.0的出台更加Web Service具备了互操作能力,不过依然无法改变开发人员的观点,只有在企业外网应用集成或者内部异种平台整合的时候才能够体现出优势,在于需要高度响应和服务支持的应用方面,Web Service只是一个臆造的神话。

  ASP.NET

  我们无法否认,这项技术对于开发人员而言是一个颠覆性的改变,从静态的HTML到CGI再到ASP/JSP/PHP时代,我们都必须去了解HTML,了解HTTP,对于高水平的开发人员而言,需要掌握的还远远不止这个,在脚本横行的时代,我们必须很清楚的去了解实现的各个细节,包括HTML,JavaScript,CSS,还有和服务器相关的Request、Response。最直接而言,开发人员必须严格控制所有HTML及其相关内容的产生,脚本带来的只是一个相对于CGI层次更加高级的“自动化”罢了。

  然后,ASP.NET将这一切完全改变,WebForm让Web开发人员能够和Windows开发人员一样处理页面事件,同时可以完全的访问强大的.NET Framework类库,而且预先编译机制解决了ASP一直以来的效率低下问题。而在服务器端的设计,在原先ISAPI的基础上从新实现了HttpHandler和HttpMoudle,从而为开发人员提供了高度扩展的可能,而日前比较成熟的WebLog引擎.Text正是这些技术的经典之作。

  XML Web Services的内置集成则使ASP.NET成为Web Service应用的最好实现,日前市场上相当大部分的Web Service都是基于ASP.NET的,在这点方面ASP.NET已经远远超出Java社群的技术,包括JSP,包括Struct,包括JSF还有其他相关的Web应用技术,在ASP.NET都能够得到非常好的集成。

  我们不可能否认这个事实,相当大一部分(我个人认为是大部分)的开发人员转向.NET是因为ASP.NET,对于ASP开发人员而言,ASP.NET提供了更加强大的功能,很多在ASP中必须依赖组件技术来解决的问题比如文件上传在新的平台上已经成为内置支持,当然更加重要的是依赖Visual Stuio.NET强大的集成开发环境能够成倍的提高生产率。而另外平台的开发人员转向ASP.NET我想也是因为弹性的设计及其便捷的开发,我相信没有太多人会怀疑ASP.NET已经走在Web开发的最前沿。

  当然,任何事情没有绝对的完美,在.NET Framework 1.1(也就是.NET的第二个版本)之前,太多的Postback也是让开发人员抱怨之处,而且采用WebForm的开发方式让很多开发人员不是那么容易的处理客户端脚本,所有的事件实现都是依赖于ViewState,因此在低带宽下的网络应用,不断地提交也让有些用户感到“恼火”。

  这个世界没有绝对的完美,但是会一点一点走向完美,也许ASP.NET 2.0就有太多东西值得期待。

  ADO.NET

  相信大家不会忘记ADO(ActiveX Data Object),我想Windows上面数据库开发流行它功不可没,通过统一的接口来实现对于数据库的访问,从而屏蔽复杂的数据库访问协议。而到了.NET时代,ADO.NET进一步将数据访问“进化”,不要以为ADO.NET只是ADO的一个升级,在ADO的技术上提供了一个托管类库,除了都是数据访问框架,其他没有太多本质的关联。

  虽然ADO.NET带来的震撼远远不如其他技术,可依然有很多东西值得我们去欣喜,毕竟创新总是一件好事情,何况是这个最成功的软件公司带来的创新,那么我们就来看看到底带来了什么:

  1. 除了提供了传统ADO的Connection,Command以外,我们意外的没有看到Recordset这样的对象,而是提供了DataReader用来处理向前滚动的数据访问,最最重要的是加入了DataSet这样的概念,因为如此,我们能够实现很多数据库应用中需要的“Disconnected Application”,能够实现“InProc-Database”,而这一切,通过DataSet能够得到很好的解决。

  2. 以更加透明的方式提供了数据库连接池,同时开发人员能够通过变成的方式控制具体的运行方式。

  3. 提出DataAdapter,让开发人员能够以一种统一的方式去访问异种数据库,唯一的区别在于具体适配器的实现不同罢了。

  4. “Typed Dataset”让开发人员能够非常方便的将DataSet 中的Table、Field映射到自定义类。

  5. 对于XML提供了良好的支持,所有的DataSet都能够非常容易的系列化或者反系列化成XML文档。

  当然ADO.NET不是万能的,在数据持久层(Data Presistent Layer)方面的支持显然不如Java,到现在为止都没有一个很好的O/R Mapping工具,而Java方面的Hibernate已经非常成熟,ADO.NET 2.0中的ObjectSapce也许能够改变目前的现状,就让我们耐心去等待,虽然需要到2005年。

  “我们离破产只有18个月”,这是全球最成功的软件公司对于自己的告诫,于是他始终走在最前端,通过概念——务实——再概念的循环一次又一次的改变自己,同时改变了整个世界。

  .NET改变了什么?

  Microsoft,是否依旧“Micro”?

  原先的Microsoft已经不再“Micro”,20多年的高速成长,这家从PC起家的软件公司已经早早称霸全球,除了在PC机方面保持绝对的垄断优势以外,在服务器市场,也已经发起对于高端应用的冲击,Windows 2000就是这个战役的经典之作,按照一贯的策略,微软依赖其价格优势和最简单的操作界面一点一点地换取中小企业的“芳心”,而对于大企业应用,虽然还无法改变其“小丑”形象,但是显而易见,那样的关系越来越“暧昧”。

  评论界很多人都认为微软是一个以销售起家的公司,毕竟微软的技术从来不是最好,却能够笑到最后,我们无法否认过去很长一段时间微软是依靠Windows和Office的销售来支撑整个公司的高速运转,但.NET战略的推出则展现出微软从销售型转向服务型企业。毕竟随着技术的发展,在操作系统和办公软件上面的利润已经越来越透明,加上Linux的冲击和微软自身旧产品如Windows 98,Office 97等等已经足够“好用”,这样带来的结果必然是企业IT采购成本的大幅度缩减,微软自身也必须找寻更好的商业模式来获取稳定的收入。

  将“Windows时代”带入“.NET时代”,对于微软公司而言,需要做的有很多很多,包括自身定位,包括如何打破用户的顾虑和恐惧,当然还有一直以来不是很友好的公关形象。于是.NET战略成了微软一个新的战场。

  改变了开发人员

  很多人在会抱怨新的技术更新太快了,如果跟着微软走总是需要不断地学习新技术,而相对来说其他的技术更新就没有如此之外,至少能够保持一段时期的稳定,这点就从C++那么多年以来的发展还有Java就可以看得出来。

  不过,世界总是在变化,有很多东西总是在不断改变,与其拒绝变化然后徘徊不前,不如去拥抱变化,当然这里提到的并不是盲动的跟随改变,然后成为“语言学习机器”。4年的发展,.NET已经渐渐的成长为可以和J2EE对抗的应用平台,并且在中低端的应用开发中,能够显著的提高生产力,这是何乐而不为。

  不过微软在.NET的营销并不是非常成功而干脆,至少在Web Service方面对于广大的开发人员是一种误导,这个世界没有绝对的“银弹”,Java不是,.NET也不会是,而XML Web Service在微软自身的定位的反复不定也让人有点疲惫。

  带来一个新的选择,带来更高的生产力,带来一种新的理念, 作为一线的开发人员,我们曾经为选择一个工具或者平台困惑、迷惘、狂热、追逐,最后坚定或者放弃。

  这个世界本来就是一个需要不断探索的世界,.NET同样如此。从总体上来说.NET,经历从狂热到迷惘,在到务实,从而逐步走向成熟的过程。

比较有意思的.NET反调—《.NET在蹉跎中一路前行》相关推荐

  1. 突然间思考PID 有意思的地方-为什么说开环控制最优这句话也对也不对

    突然间思考PID 有意思的地方-为什么说开环控制最优这句话也对也不对 控制的目的在于,如何基于系统(X'=AX+Bu,y=CX+Du)的特性设定控制变量u,从而达到一定的控制目标y,简单说就是被控对象 ...

  2. 2个用到数学归纳法的有意思的证明

    数学归纳法是一种很有效的证明方法,同时,在很多时候它也能证明一些很有意思的问题,下面我们来看两个有趣的例子: 问题1:我们如何证明一个由2n × 2n个小方格组成的正方形,在放上一个小方块后,剩下的格 ...

  3. 几个非常有意思的javascript API

    作为一名前端爱好者, 笔者利用空余时间研究了几个国外网站的源码,发现不管是库,还是业务代码,都会用到了一些比较有意思的API,虽然平时在工作中部分接触过,但是经过这次的研究,觉得很有必要总结一下,毕竟 ...

  4. 几个非常有意思的javascript知识点总结

    作为一名前端爱好者, 笔者利用空余时间研究了几个国外网站的源码,发现不管是库,还是业务代码,都会用到了一些比较有意思的API,虽然平时在工作中部分接触过,但是经过这次的研究,觉得很有必要总结一下,毕竟 ...

  5. 《非诚勿扰》搞笑剧情台词

    上周六去电影院看了冯小刚新拍的电影<非诚勿扰>,排队买票的人还真多,排了差不多半个小时才买上.呵呵,还真是挺有意思的,让人笑声不断,下面给大家分享一下搞笑剧情和台词. 1.开头就挺有意思, ...

  6. 【非诚勿扰】搞笑台词

    [非诚勿扰]搞笑台词 01.只谈心不上床,那不是爱情,顶多是交情 02.秦奋:要倒插门?你们家怎么走啊? 相亲者:先坐飞机到昆明,再坐一天的长途车到敏自,再坐汽车到平边,再坐一天的拖拉机,一天的牛车就 ...

  7. PE文件和COFF文件格式分析——节信息

    在<PE文件和COFF文件格式分析--签名.COFF文件头和可选文件头3>中,我们看到一些区块的信息都有偏移指向.而我们本文讨论的节信息是没有任何偏移指向的,所以它是紧跟在可选文件头后面的 ...

  8. 小晶粒zsm分子筛合成表征实验报告_Nat. Mater.:区域选择性合成亚纳米金属-分子筛材料...

    本文来自微信公众号:X-MOLNews 亚纳米尺度的负载型催化剂是近些年多相催化领域以及相关材料科学领域的热门方向.围绕着单原子催化剂.团簇催化剂的论文如井喷一般出现在各大期刊上.关于亚纳米尺度金属催 ...

  9. 从HP发布BSM新版套件看网管与安管的融合

    2012年11月底,HP发布了新版的BSM套件.在这个新的套件有一个BSM与ArcSight Logger整合的方案.我之前在RSA2012大会观后感系列文章中也提及过HP的这个动向,就是将网管与安管 ...

  10. 不服来战!多伦多大学教授500美元挑战整个机器学习圈子

    翻译 | 王赫 编辑 | Donna [AI科技大本营导读]Hinton大神CSC321课程的"接班人",加拿大多伦多大学副教授http://www.cs.toronto.edu/ ...

最新文章

  1. 有雄心的男人才有出息
  2. 《计算机网络》常考概念、英文缩写、公式大全
  3. 模块的使用,包,及程序开发规范
  4. 自定义ListView【通用】适配器并实现监听控件
  5. windows mysql 开启日志功能_Windows下开启mysql日志功能
  6. SAP 库存相关表格
  7. iphone3G恢复到3.1.2遇到的问题
  8. JavaScript Try Catch:异常处理说明
  9. linux 文件字典排序,linux - 强制linux排序使用字典顺序 - 堆栈内存溢出
  10. 五十二 常用第三方模块 图形界面
  11. UBUNTU启动到BusyBox,怎么办?
  12. 云豹直播源码v8.2
  13. 私塾在线精品原创系列文章
  14. 利用mysql元数据自动生成hive建表语句
  15. GPS导航知识——DGPS
  16. 大数据处理技术-头歌平台-答案
  17. Unity打包篇:能够解决Unity打包Gradle遇到的所有问题方法整合!(持续更新中!)
  18. voyage java_Voyage:Java 实现的基于 Netty 的轻量、高性能分布式 RPC 服务框架
  19. 2009年第一天上班,祝大家工作顺利!
  20. 如何做一个员工管理系统

热门文章

  1. 三十岁,研究生毕业的你,现在收入多少?
  2. 华为服务器管理口在哪个位置,华为服务器默认管理口地址吗
  3. 通用能力-智力题专项练习(2)
  4. 蓝桥杯——鲁卡斯队列
  5. 【前端】你真的理解JavaScript中的变量和数据类型吗
  6. Python使用进程池管理进程和进程间通信
  7. java 学习7.13 正则表达式 Pattern和Matcher类 Math类 Random类 System类 BigDecimal类 Date类 SimpleDateFormat类 Cale
  8. 在java中 数组是作为_2.在Java中,数组是作为____来处理的。
  9. uni-app 背景图片处理
  10. LLC谐振变换器工作模态分析