从2002年微软发布.NET 1.0,其间历经了8年的发展,再到.NET 4.0,其已经成为一个庞大而复杂的软件开发与运行平台,架构日益复杂,应用领域也在不断地扩展,包容了“一堆”的子技术领域。

在.NET 4.0即将发布之际,回顾一下已发布的各项.NET技术,看看哪些技术用得很火,哪些被打入冷宫,再猜猜.NET 4.0中可能会有哪些技术会得到“青睐”,是件有意思的事。

1 桌面应用程序开发技术(WindowsForm和WPF)

在.NET桌面应用程序开发领域,WindowsForm是“前辈”,相比以前的MFC,其开发效率高得多,即使比一向以“高效率”著称的VB、Delphi之类,也不逊色,因此在很长的一段时间内,WindowsForm成为.NET桌面领域的主流技术,而且有一大批各式各样的第3方控件,其功能可谓应有尽有,使用方便,WindowsForm的问题是“千人一面”,要想做出“与众不同”的界面,真得费不少力气。

.NET 3.0中出现的WPF,在界面设计和用户体验上比WindowsForm要强得多,比如其强大的数据绑定、动画、依赖属性和路由事件机制,都非常棒。然而,WPF最头痛的是性能,另外,在需要快速开发原型的场景,WPF暂时还比不上WindowsForm方便。

.NET 4.0中,WPF在性能上有较大的改进,这点在使用WPF开发的Visual Studio 2010上体现极为明显,Visual Studio 2010 CTP和Beta1只能用“惨不忍睹”一词来形容,Beta2就有一个性能上的飞越,但还时不时地玩点“崩溃”、“挂死”的把戏,而当前的RC版本,我觉得其使用体验已经超越了Visual Studio 2008,我认为,WPF取代WindowsForm是必然的。

2 数据存取技术

(1)ADO.NET。这不用多说了,在实际开发中用得太多了,事实证明了它的成功。

(2)LINQ。

这也是个很大的领域,里面最牛的是LINQ To Object,我一用就喜欢上了,LINQ To XML也很好,它把程序员从代码中解放出来,可以完成大部分XML存取功能,让大家很高兴有机会能和原先.NET所提供的“一堆”XML相关类说声“不见”,LINQ To DataSet。作为一个ADO.NET技术的补充,这是一个无足轻重的小卒子,在开发中可以用,也可以直接忽略。

LINQ To SQL和ADO.NET实体框架。这两个技术功能重叠,基本上让人怀疑其中有一个是不是“没有存在的必要”,所以曾有“LINQ To SQL已死”的传言。当然,后来微软公司表态说仍然会继续开发LINQ To SQL的后续版本,争论平息。

但我个人觉得,在实际开发中还是使用ADO.NET实体框架更合适。LINQ To SQL有的功能它都有,而且用起来更为灵活,难得的是它的使用并不比LINQ To SQL复杂多少,ADO.NET实体框架还延伸到了其它的技术领域,是一项重要的基础数据存取技术。

因此,ADO.NET实体框架VS LINQ To SQL,前者胜出。

(3)WCF Data Service。

这是一项非常值得关注的技术,原先叫ADO.NET DataService,它体现了“数据是一种服务”的思想,让数据可以通过HTTP请求直接获取,它设计了一套URI模式,可以完成投影、选择、分页等功能,用起来方便灵活,我觉得在SOA大行于世的分布式系统时代,WCF Data Service应该会得到应用。

但这一技术问题在于性能,由于数据需要走互联网,所以如果网速很慢的话,基于此技术搭建的应用程序其用户体验将“惨不忍睹”。而且,互联网服务安全问题非常关键,保证基于WCF Data Service技术搭建的应用程序数据安全,想必将成为开发者最费脑筋的地方。

(4)WCF RIA Service。

这个技术与Silverlight密不可分。我还没有系统地了解这一技术领域,不予评说。

3 Web开发技术

这一领域,没说的,ASP.NET中的WebForm是当之无愧的主流。经过多年的发展,WebForm已高度成熟。Visual Studio 2008中加入的Ajax系列组件,如ScriptManger、UpdataPanel之类,再配合一堆的应用了Ajax技术的控件,让WebForm更是如虎添翼。基于这种成熟技术开发Web网站,不管是用户还是开发企业,都比较放心,而且从.NET 3.5 SP1开始,Web领域多了些新东西。

(1)ASP.NET MVC,MVC这一设计模式已有多年的历史,也有很多的成熟的框架,但在.NET“官方”平台上,却是个新加入的“成员”,并不算成熟,我觉得其应用前景要看看再说。我不知道业界是否已有基于此技术开发的实际项目,有这方面项目经验的朋友,不妨谈谈自己的看法。

(2)ASP.NET DynamicData,这是一个看上去很酷的技术。当使用它来创建网站时,Visual Studio 2010会帮你创建一个DynamicData文件夹,里面放了数十个模板文件,构建了一个网站的“脚手架”,几乎不用编码,就可以生成一个全功能的“CRUD”数据驱动网站。

它的设计思想很好:底层使用ADO.NET实体框架或LINQ To SQL构造数据模型,通过提取数据模型中的元数据,动态选择合适的模板生成网页。这就避免了真实项目中不得不为每个数据存取任务设计不同网页的负担,而且这一技术提供了很多的方式去允许你定制网站。

我当初刚一接触时,也很兴奋,这是个好东西啊!但后来我改变了看法,这一技术的问题在于它过于“自动化”了,而且需要包容数十个文件,让其与现有的ASP.NET网站集成相当不便,配置起来麻烦。

我个人认为,在现有.NET Web开发技术应用现状之下,任何一个与现有的ASP.NET网站(以WebForm+Ajax为主体技术)集成麻烦的技术,都很难有“美好”的前途。很不幸,ASP.NET DynamicData是这样的例子,ASP.NET MVC也有同样的问题,但没有ASP.NET DynamicData严重,而且ASP.NET MVC架构清晰,还是比较易于维护。

(3)Silverlight。这实际上是另一种Web应用架构的代表技术,其立足点在于充分利用客户端的计算资源,可以大大地降低对服务端的依赖,而且易于构造良好的用户体验,我个人认为其发展大有可观。是一个需要重点关注的技术。

4 插件技术

.NET 4.0引入了一个“ManagedExtensibilityFramework(MEF)”,MEF通过简单地给代码附加“[Import]”和“[Export]”标记,我们就可以清晰地表明组件之间的“服务消费”与“服务提供”关系,MEF在底层使用反射动态地完成组件识别、装配工作。从而使得开发基于插件架构的应用系统变得简单。

另外,请忘记.NET 3.5所引入的“MAF(ManagedAdd-inFramework)”吧,MAF引入了一个复杂的宿主与插件间的通讯管道架构,仅仅是创建一个最简单的SayHello宿主和插件,你也必须创建多达8个项目!

最要命的是MAF设计者“想”得过多,设计了复杂的接口和类继承体系,而且选择让插件运行于与宿主不同的应用程序域中,这就使得插件与宿主之间的通讯变得复杂。个人认为,这些实在不是一个好的设计决策,而且我估计,MAF会“无疾而终”。

5 WCF和.NETRemoting

其实这是一个不需要讨论的问题,有了WCF,我还要Remoting干什么?因为前者包容后者的所有功能,而且还提供了更多,WCF的问题是微软企图用一个框架解决所有的问题,因此其架构非常复杂,任何一名想探究其底层运行机理的人,都必须要有足够的心理准备和耐心。

我们可以看到WCF向其它领域的渗透,比如前面的WCFDataService,还有Work Flow Service(将工作流发布为WCF服务),看来微软是将“宝”押在WCF上了,凡是带有“服务”字样的,微软都有把它改造为WCF服务的冲动,因此,WCF是不得不学习和掌握的技术。

6 多线程与并行计算

关于并行计算,在多核时代,我认为.NET并行计算中的任务并行库和并行LINQ,会得到较多的应用。

7 工作流

这个技术,我看是微软自己把事弄砸了。工作流从.NET 3.0开始引入,到.NET 3.5已经比较完善了,也有了一些实际的应用。但.NET 4.0就来了个另起炉灶,WF4与WF3.5相比,简直是另一个产品,而且WF4的Beta1和Beta2相比,居然在对象模型上也有大的改动,RC版本中的WF4我还没看,不知又有什么变动,应该不会再变了吧!

8 函数式编程语言F#

函数式编程很有趣,Visual Studio 2010中F#成为.NET正式成员。F#中的许多特性,比如不可更改(immutable)的数据结构,声明性编程风格,强大的类型推断,所有东西都是表达式等,都让习惯了面向对象风格的程序员感到新奇。

我个人觉得,F#如果用于开发多线程并行计算程序,会有较高的开发效率,而函数式编程的特点,也会使它在科学计算中有较好的表现。但用于开发CRUD之类的MIS系统,至少目前还是免谈吧。

9 云计算

Visual Studio 2010集成了云计算开发的项目模板,而且云计算是一个说不完的话题。微软在这方面投入巨大,它精心打造了Azure这个云计算平台。

虽然我个人认可云计算是一个大的发展方向,但对于中国,这个技术是一道远方的亮丽风景,仅供观赏。因为国内还没有一个成熟的云计算平台,而微软的Azure目前又没有开放中国大陆的云计算购买服务,加上中国又有特殊的国情,所以一切都只是空中楼阁,云计算真正应用于国内,诸位请继续等待吧。

本文来自金旭亮的博客,

微软.NET各子技术领域的应用前景的更多相关文章

  1. 期待微软平台即服务技术Service Fabric 开源

    微软的Azure Service Fabric的官方博客在3.24日发布了一篇博客 Service Fabric .NET SDK goes open source ,介绍了社区呼声最高的Servic ...

  2. 商务部公开微软持有的Android技术专利

    微软与众多Android厂商签署了专利授权协议,但从来没有公开它持有多少项Android技术专利.出人意料的是,为了收购诺基亚手机业务,微软今年4月递交到中国商务部的文件中完整公开了它的Android ...

  3. 微软下一代Web前端技术Blazor(C#编译为WebAssembly)

    W3C Web标准化机构在制定下一代的网页技术WebAssembly.目前版本是1.0,主流浏览器的最新版本都已经支持.其特点是浏览器可以执行编译后的二进制程序,不需要像之前的程序,浏览器下载Java ...

  4. 首次揭秘:阿里巴巴中间件在 Serverless 技术领域的探索

    Serverless 话题涉及范围极广,几乎包含了代码管理.测试.发布.运维和扩容等与应用生命周期关联的所有环节.AWS Lambda 是 Serverless 领域的标志性产品,但如果将其应用于核心 ...

  5. Python语言的技术领域

    第一部分:各个领域应用的语言 大家看这个内容,其实你很明显发现,其实各个语言都有他的用处.我们可以说Python是应用最广的.但是暂时还是不能说它是全能的,因为他也有它的短板,但是对于一般的小公司和小 ...

  6. 2017微软 MVP 数据实践技术活动日(北京站)

    Power BI | 交互式数据可视化 BI 工具 EXCEL BI :无所不能的业务数据分析利器 EXCEL +POWERBI=EXCEL BI https://edu.hellobi.com/co ...

  7. 微软ASP.NET技术“乱谈”

    微软ASP.NET技术“乱谈” 2014新年了,顺手写的一点文字,主要谈谈我对当前微软ASP.NET技术的看法,比较随意,大伙儿随便看看吧. 1 当前微软Web平台技术全貌 从2002年发布.NET ...

  8. 从ThoughtWorks 2017技术雷达看微软技术

    ThoughtWorks在每年都会出品两期技术雷达,这是一份关于技术趋势的报告,它比起一些我们能在市面上见到的其他各种技术行情和预测报告,更加具体,更具可操作性,因为它不仅涉及到新技术大趋势,比如云平 ...

  9. 中国.NET:各地微软技术俱乐部汇总(持续更新中...)

    中国.NET:各地微软技术俱乐部汇总(持续更新中...)   本文是转载文,源地址: https://www.cnblogs.com/panchun/p/JLBList.html by ​史记微软. ...

随机推荐

  1. PHP使用Mysql事务实例解析

    <?php //数据库连接 $conn = mysql_connect('localhost', 'root', ''); mysql_select_db('test', $conn); mys ...

  2. 为Windows 7添加“Internet打印”功能

    http://wangchunhai.blog.51cto.com/225186/1156589/

  3. Linux下执行程序出现 Text file busy 提示时的处理方式

    使用 fuser xxx 命令查看xxx文件被哪个进程占用,然后关闭该进程,解决问题. # fuser xxxxxx:              2878# kill -9 2878 注:xxx是文件 ...

  4. poj 2488 A Knight's Journey( dfs )

    题目:http://poj.org/problem?id=2488 题意: 给出一个国际棋盘的大小,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径. #include <io ...

  5. Jquery动画第二部分

    效果图:     →→→→→→ <%@ Page Language="C#" AutoEventWireup="true" CodeFile=" ...

  6. linux mkfs命令参数及用法详解---linux格式化文件系统命令(包括swap分区)

    mkfs 命令  linux格式化磁盘命令           linux mkfs         指令:mkfs 使用权限 : 超级使用者 使用方式 : mkfs [-V] [-t fstype] ...

  7. 【jQuery】jQuery操作<input>的聚焦与全选其内容

    实现效果: 源代码: $(function() { $("#exist_code_remind").attr("style","display:non ...

  8. jQuery 属性操作 - val() 方法

    val() 方法返回或设置被选元素的值. 元素的值是通过 value 属性设置的.该方法大多用于 input 元素. 如果该方法未设置参数,则返回被选元素的当前值. <html> < ...

  9. HDU 5698 瞬间移动

    瞬间移动 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

  10. Java虚拟机笔记 – JVM 自定义的类加载器的实现和使用2

    1.用户自定义的类加载器: 要创建用户自己的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的findClass(String name)方法即可,该方法根据参数指定类的名 ...