系统架构设计笔记(80)—— .NET

Microsoft .NET 战略基于一组开放的互联网协议,推出了一系列的产品 、 技术和服务,吹响了互联网技术变革的号角。关于 .NET ,微软公司 CEO 鲍尔默这样描述:“ Microsoft .NET 代表了一个集合 、 一个环境 、 一个可以作为平台支持下一代 Internet 的可编程结构 。” 这句话简单扼要地概括了 .NET 的外部特性。

1 .NET 平台

.NET 首先是一个环境。这是一个理想化的未来互联网环境,微软的构想是一个 “ 不再关注单个网站 、 单个设备与 Internet 相连的网络环境,而是要让所有的计算机群 、 相关设备和服务商协同工作 ” 的网络计算环境。简而言之,互联网提供的服务,要能够完成更高程度的自动化处理。

未来的互联网,应该以一个整体服务的形式展现在最终用户面前,用户只需要知道自己想要什么,而不需要一步步地在网上搜索 、 操作来达到自己的目的。而要搭建这样一种互联网环境,首先需要解决的问题是针对现有 Internet 的缺陷来设计和创造一种新一代 Internet 结构。这种结构不是物理网络层次上的拓扑结构,而是面向软件和应用层次的一种有别于浏览器只能静态浏览的可编程 Internet 软件结构。因此 .NET 把自己定位为可以作为平台支持下一代 Internet 的可编程结构。

.NET 的最终目的就是让用户在任何地方 、 任何时间,以及利用任何设备都能访问他们所需要的信息 、 文件和程序。而用户不需要知道这些东西存在于什么地方,甚至连如何获得等具体细节都不需要知道。他们只需发出请求,然后只负责接收即可,而所有后台的复杂性是完全屏蔽起来的。故而,对于企业的 IT 人员来说,工作量将大大减少,他们也不需要管理复杂的平台及了解各种分布应用之间的工作是如何协调的。 .NET 包括4个重要特点:一是软件变服务,二是基于 XML 的共同语言,三是融合多种设备和平台,四是新一代的人机界面。这4个特点基本上复盖了 .NET 的技术特征。

(1)软件变服务

鲍尔默在谈到软件服务时说道: “ 今天的软件产品仅仅是一张光盘,用户购买软件,亲自安装 、 管理和维护。但是软件服务是来自 Internet 的服务,它替用户安装 、 更新和跟踪这些软件,并让它们和用户一同在不同的机器间漫游。它为用户存储自己的信息和参考资料。这些就是软件和软件服务各自不同的风格 。” 这段话概括了软件变服务的核心。伴随着 ASP (应用服务提供)产业的兴起,软件正逐渐从产品形式向服务形式转化,这是 IT 行业的整体趋势。

在 .NET 中,最终的软件应用是以 Web 服务的形式出现并在 Internet 发布的。 Web 服务是一种包装后的 、 可以在 Web 上发布的构件, .NET 通过 WSDL 协议来描述和发布这种 Web 服务信息,通过 DISCO 协议来查找相关的服务,通过 SOAP 协议进行相关的简单对象的传递和调用。如图 1 所示, .NET 平台中 Orchestration 可视化编程工具用于产生基于 XML 的 XLANG 代码,它和 Biz Talk 服务器 、 .NET 框架,以及Visual Studio .NET 都曾是 Windows D2000 战略的重要部分。

微软的 .NET 战略意味着:微软公司及在微软平台上的开发者将会制造服务,而不是制造软件。在未来几年之内,微软将陆续发布有关 .NET 的平台和工具,在 Internet 上开发 Web 服务。那时,工作在 .NET 上的用户 、 开发人员和 IT 工作人员都不再购买软件 、 安装软件和维护软件。取而代之的是,他们将定制服务,软件会自动安装,所有的维护和升级也会通过互联网进行。

(2)基于 XML 的共同语言。

XML 是从 SGML 语言演化而来的一种标记语言。作为元语言,它可以定义不同种类应用的数据交换语言。在 .NET 架构中, XML 作为一种应用间无缝接合的手段,用于多种应用之间的数据采集与合并,用于不同应用之间的互操作和协同工作。具体而言, .NET 通过 XML 语言定义了简单对象访问协议( Simple Object Access Protocol , SOAP ) 、 Web 服务描述语言( Web Services Description Language , WSDL ) 、 Web 服务发现协议。 SOAP 协议提供了在无中心分布环境中使用 XML 交换结构化有类型数据的简单轻量的机制。 WSDL 协议定义了服务描述文档的结构,如类型 、 消息 、 端口类型 、 端口和服务本身 。Web 服务发现协议定义了如何从资源或者资源集合中提取服务描述文档 、 相关服务发现算法等。

(3)融合多种设备和平台

随着 Internet 逐渐成为一个信息和数据的中心,各种设备和服务已经或正在接入和融入 Internet ,并试图成为其中的一部分。 .NET 谋求与各种 Internet 接入设备和平台的一体化,主要关注在无线设备和家庭网络设备及相关软件 、 平台方面。

(4)新一代的人机界面

新一代人机界面主要体现在 “ 智能与互动 ” 两个方面。 .NET 包括通过自然语音 、 视觉 、 手写等多种模式的输入和表现方法;基于 XML 的可编辑复合信息架构 —— 通用画布;个性化的信息代理服务;使机器能够更好地进行自动处理的智能标记等技术。

.NET 的平台及框架是基于微软软件工业基础的又一次升级和演化。然而, .NET 还是要尽力保证 Windows 系统及系列产品和 .NET 能够融为一体,尽量在微软公司原有的软件资产基础上,使 .NET 继续成为 Internet 的中心。

2 .NET 框架

Microsoft .NET 开发框架如图 2 所示。通用语言运行时及它所提供的一组基础类库是整个开发框架的基础;在开发技术方面, .NET 提供了全新的数据库访问技术ADO .NET ,以及网络应用开发技术ASP .NET 和 Windows 编程技术 Win Forms ;在开发语言方面, .NET 提供了 VB、VC++、C# 等多种语言支持;而Visual Studio .NET 则是全面支持 .NET 的开发工具。

2.1 通用语言运行时

Microsoft.NET 给开发人员带来了一种全新的开发框架,而通用语言运行时( C ommon Language Runtime , C LR )则处于这个框架的最底层,是这个框架的基础。读者也许对于所谓的 C 运行时 、 VB 运行时 、Jave 虚拟机这些概念已经有所了解,而通用语言运行时则为多种语言提供了一种统一的运行环境。

另外,它还提供了更多的功能和特性,例如,统一和简化的编程模型,用户不必迷惑于 Win32API 和 C OM;避免了 DLL 的版本和更新问题,从而大大简化了应用程序的发布和升级;多种语言之间的交互,例如,甚至可以在 VB 中使用 C ++编写的类;自动的内存和资源管理等。

Microsoft.NET 正是基于通用语言运行时,实现了这些开发人员梦寐以求的功能。基于通用语言运行时开发的代码称为受控代码,它的运行步骤大体如下:首先使用一种通用语言运行时支持的编程语言编写源代码,然后使用针对通用语言运行时的编译器生成独立于机器的微软中间语言( Microsoft Intermediate Language , MIL ),同时产生运行所需的元数据,在代码运行时再使用即时编译器( Just In Time Compiler , JITC )生成相应的机器代码来执行。

2.2 基础类库

当然对于开发者而言,他们除了关心通用语言运行时提供的那些新特性外,还关心它究竟给开发者提供了什么样的编程接口,这就是基础类库( Base Class Library )。这组基础类库包括了从输入输出到数据访问等各方面,提供了一个统一的面向对象的 、 层次化的 、 可扩展的编程接口。它使用一种点号分隔的方法,使得查找和使用类库非常容易。例如基础类库中的根,它的命名空间是 System ,提供数据访问的类库的命名空间是 System .Data。在使用时,开发者只需在自己的应用中添加所需的基础类库的引用,然后就可以使用这个类库中的所有方法 、 属性等。跟传统的 Windows 编程相比,使用和扩展基础类库都非常容易,这使得开发者能够高效 、 快速地构建基于下一代互联网的网络应用。

2.3 ADO.NET

几乎所有的应用程序都需要访问从简单的文本文件到大型的关系型数据库等各种不同类型的数据。在 Microsoft.NET 中访问数据库的技术是 ADO .NET。

ADO .NET 提供了一组用来连接到数据库 、 运行命令 、 返回记录集的类库,与从前的 ADO ( Active Xata Object )相比, Connection 和 Command 对象很类似,而 ADO .NET的革新主要体现在如下几个方面:

首先, ADO .NET提供了对 XML 的强大支持,这也是 ADO .NET的一个主要设计目标。在 ADO .NET中通过 XML Reader, XML Writer, XML Navigator, XML Document等可以方便地创建和使用 XML 数据,并且支持 W3C 的XSLT 、 DTD 、 XDR等标准。 ADO .NET对 XML 的支持也为 XML 成为 Microsoft.NET 中数据交换的统一格式提供了基础。

其次, ADO .NET引入了 Data Set 的概念,这是一个驻于内存的数据缓冲区,它提供了数据的关系型视图。不管数据来源于一个关系型的数据库,还是来源于一个 XML 文档,人们都可以用一个统一的编程模型来创建和使用它。它替代了原有的 Recordset 的对象,提高了程序的交互性和可扩展性,尤其适合于分布式的应用场合。

另外, ADO .NET中还引入了一些新的对象,例如 Data Reader 可以用来高效率地读取数据,产生一个只读的记录集等。

简而言之, ADO .NET通过一系列新的对象和编程模型,并与 XML 紧密结合,使得在 Microsoft.NET 中的数据操作十分方便和高效。

2.4 ASP.NET

ASP.NET 是 Microsoft.NET 中的网络编程结构,它使得建造、运行和发布网络应用非常方便和高效。可以从以下几个方面来了解 ASP .NET :

(1) Web 表单。

ASP .NET WEB表单的设计目的就是使开发者能够非常容易地创建 Web 表单,它把 VB 中的快速开发模型引入网络开发中,从而大大简化了网络应用的开发。具体来说:在 ASP .NET 中可以支持多种语言,不仅仅支持脚本语言,通用语言运行时支持的所有语言在 ASP .NET 中都可以使用;代码和内容分开,在现在的 ASP ( Active Server Pages )开发中,内容和脚本交错,维护和升级很困难,将它们分开可以使得开发人员和设计人员能够更好地分工合作,提高开发效率;另外在 ASP .NET 中通过引入服务器端控件,将类似 VB 的快速开发应用到了网络开发中来,这样大大提高了构建网络表单效率,并且服务器端控件是可扩展的,开发者可以建造自己需要的服务器端控件。

(2) ASP .NET Web 服务。

Web 服务是下一代可编程网络的核心,它实际上就是一个可命名的网络资源,可用来在 Internet 范围内方便表现和使用对象,就像使用今天的 COM 对象一样,不同的是使用和表现网络服务是通过 SOAP 甚至 HTTP 来实现的。在 ASP .NET 中,建造和使用网络服务都非常方便。在 ASP .NET 中建造网络服务就是编写一个后缀为 .ASMX 的文件,在这个文件中加入想要表现出来的方法即可,网络服务的建造者不需要了解 SOAP , XML 的细节,只需要把精力集中在自己的服务本身,这也为独立软件服务开发商提供了很好的机会;使用网络服务最简单的方式就是使用 HTTP 协议( HTTP GET或 HTTP POST),用户只需要直接访问网络服务( .ASMX 文件)的 URL 即可;当然用户还可以通过 SOAP 在自己的应用中更灵活地使用网络服务。

(3) ASP .NET 应用框架。

ASP .NET 应用不再是解释脚本,而是编译运行,再加上灵活的缓冲技术,使其性能从根本上得到了提高;由于 ASP .NET 的应用框架基于通用语言运行时,故而发布一个网络应用,仅仅是一个复制文件的过程,即使是构件的发布也是如此,更新和删除网络应用,可以直接替换 / 删除文件;开发者可以将应用的配置信息存放到 XML 格式的文件中,管理员和开发者对应用程序的管理可以分开进行;提供了更多样的认证和安全管理方式;在可靠性等多方面都有很大提高。

2.5 WinForms

传统的基于 Windows 的应用( Win Forms ),它仍然是 Microsoft .NET 战略中不可或缺的一部分。在 Microsoft .NET 中开发传统的基于 Windows 的应用程序时,除了可以利用现有的技术例如 Active X 控件及丰富的 Windows 接口外,还可以基于通用语言运行时开发,可以使用 ADO .NET 、 网络服务等,这样也可以实现诸如避免 DLL 地狱 、 多语言支持等 .NET 的新特性。

2.6 开发语言

从上面的介绍中,已经知道 Microsoft .NET 开发框架支持多种语言,在目前的测试版中已经支持 VB , C ++ , C # 和 Jscript 四种语言及它们之间的深层次交互。而且微软支持第三方生产针对 Microsoft .NET 的编译器和开发工具,这也就是说几乎所有市场上的编程语言都有可能应用于 Microsoft .NET 开发框架。这样开发者可以任意选择自己喜爱的语言,这种开放和交互的特性正是开发者所热爱的。

需要特别指出的是,微软在 Microsoft .NET 中推出了全新的 C # 语言,这种全新的面向对象的语言使得开发者可以快速地构建从底层系统级到高层商业构件的不同应用。 C # 在保证了强大的功能和灵活性的同时,给 C 和 C ++ 带来了类似于 VB 的快速开发,并且它还针对 .NET 做了特别设计,例如, C # 允许 XML 数据直接映射为它的数据类型等,这些特性结合起来使得 C # 成为优秀的下一代网络编程语言。与此同时, Microsoft .NET 对原有的 VB 和 C ++ 也做了很大的改进,使得它们更加适应 Microsoft .NET 开发框架的需求。例如在Visual Basic .NET 中增加了继承等面向对象的特性,结构化的出错处理等;可管理的 C ++ 扩展,大大提高了利用 C ++ 来开发 Microsoft .NET 应用的效率等。

Visual Studio .NET 和 .NET 开发框架紧密结合,是构建互联网应用的优秀工具。Visual Studio .NET 通过提供一个统一的集成开发环境及工具,大大提高了开发者的效率;集成了多种语言支持;简化了服务器端的开发;提供了高效地创建和使用网络服务的方法等。

.NET 框架的一个主要目的是使COM开发变得更加容易。COM开发过程中最难的是COM基本结构的处理。因此,为了简化COM开发, .NET 框架实际上已自动处理了所有在开发人员看来是与COM紧密相关的任务,包括引用计算 、 接口描述及注册。必须认识到,这并不意味着 .NET 框架构件不是COM构件。事实上,使用 Visual Studio6.0 的COM开发人员可以调用 .NET 框架构件,并且在他们看来,后者更像是拥有 iUnknown 数据的COM构件。相反,使用Visual Studio .NET 的 .NET 框架开发人员则将COM构件视作 .NET 框架构件。

为了避免引起误解,这里需对这种关系加以特别说明:COM开发人员必须手动去做大多数 .NET 框架开发人员可以在运行时自动执行的事情。例如,必须手写COM构件的安全性模块,且无法自动管理模块占用的内存,而在安装COM构件时,注册条目必须放进 Windows 注册表中。对 .NET 框架而言,运行时实现了这些功能的自动化。例如,构件本身是自我描述型的,因而无须注册到 Windows 注册表中便能安装。

当把 COM 与 Microsoft 事务服务器( MTS )和分布式 COM (D COM )结合在一起时,就变成了 COM +。 COM +提供了一组面向中间层的服务。特别是 COM +提供了进程管理功能和数据库与对象连接池处理功能。在将来的版本中,它还将提供一种称为分区的功能 —— 专门为应用程序服务提供商设计的更强大的进程隔离功能。 COM +服务主要面向中间层应用程序开发,并主要为大型分布式应用程序提供可靠性和可扩展性。这些服务是对 .NET 框架所提供服务的补充;通过 .NET 框架类,可以直接访问这些服务。

2.7 其他特征

.NET 框架有几个要素值得一提。首先是它的安全系统和配置系统。这两个系统协同工作,有力地遏止了运行不安全代码的可能性,并大幅度减少了 “ DLL 地狱 ” 对应用程序进行配置时所面临的挑战。

安全系统是一个高度细化 、 基于事实的系统,它赋予开发人员和管理员多种代码处理权限(而不仅仅是 “ on ” 或 “ off ” )。将来,还会根据代码本身的核心要素来决定如何实施上述权限。例如,当 .NET 框架应用程序被下载到某一系统中时,它会申请一组权限(诸如对临时目录的写入权限)。运行时将收集有关应用程序的事实信息(诸如:它是从何处下载的 、 是否用了有效签名 、 甚至它访问系统的准确程度),并按管理策略决定是否允许应用程序运行。运行时甚至还可告之应用程序它无法授权申请的所有权限,并允许应用程序自行决定是否继续运行。有这种安全系统做保障,许多应用程序配置问题便会迎刃而解。

开发人员和管理员(最终是用户)所面临的最大挑战之一是版本的管理问题。如果在新装了某个应用程序之后,一切都陷于瘫痪状态,而在这之前系统一直运行得非常良好,那么最大的可能就是新安装的应用程序重写了一些共享库,并极有可能修正了现有应用程序正使用的程序错误。这种情况出现的频率很高,以致人们将它称为 “ DLL 地狱 ” 。 .NET 框架拥有的几项高级功能可以彻底消除 “ DLL 地狱 ” 现象。首先,它有一个非常强大的内部命名系统,能够有效地防止两个库因互相重名而被错当为对方的情况发生。

除此之外,它还提供一项被称作 “ 并行 ” 配置的新功能。如果前例中新安装的应用程序确实重写了共享库,现有应用程序可对该库进行修复。等现有应用程序再次启动时,它会检查所有的共享文件。如果发现文件被更改,同时这些更改又是不兼容的,则它可以请求运行时提取一个它可以使用的版本。得益于强大的安全系统,运行时可以安全地执行该操作,这样应用程序就完成了本身的修复工作。

总之, Microsoft.NET 开发框架在通用语言运行时的基础上,给开发者提供了完善的基础类库 、 下一代的数据库访问技术ADO.NET 、 网络开发技术 ASP.NET ,开发者可以使用多种语言及 Visual Studio.NET 来快速构建下一代的网络应用。随着相关的互联网标准及技术的普及,可以预言将会有越来越多的开发者采用这种开发结构,并开发出丰富多样的下一代互联网应用。


猜你喜欢

转载自blog.csdn.net/deniro_li/article/details/108807959