65.9K
CodeProject 正在变化。 阅读更多。
Home

关于 .NET

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.40/5 (15投票s)

2001年5月13日

15分钟阅读

viewsIcon

332191

到底什么是 .NET?Jason Clark 将概述 .NET,以及它对您作为开发者的意义。

引言

您现在很可能已经听说过微软的 .NET Initiative。但 .NET 究竟是什么?下次在鸡尾酒会上有人问您这个问题时,您可以说:“它是 1 部分市场营销,1 部分范式转变,以及 3 部分很酷的新产品!”如果他们追问细节,就让他们去读这篇文章的其余部分。

市场营销与范式转变

微软将发布现有产品的 .NET 版本,作为其 .NET Initiative 的一部分。当然,这些产品的“下一个版本”无论是否有 .NET Initiative 都会存在。我听到一些人认为这使得 .NET 仅仅是市场营销。我理解他们的想法,但我不同意。

首先,微软 .NET Initiative 的重要组成部分是一个令人兴奋的新平台,称为 _The .NET Frameworks_,我稍后将对此进行讨论。其次,微软已经重新调整了其各个产品组的重点,以应对互联世界中的软件开发。让我们对此稍微谈谈。

微软制造软件。这就是他们的全部。十多年来,互联网一直在改变软件行业(以及我们许多人!)的根基。这是一种不可阻挡的范式转变,足以成就或摧毁一家软件巨头。微软决定将从公司里的每一个角落,正面应对互联网。

在深入 .NET Initiative 之前,让我们回顾一下软件行业是如何变化的。这是我对当前思考的看法。

软件与互联网

计算机的目的是管理信息。信息的内容因应用程序而异,但其核心仍然是关于信息。近年来,互联网在很大程度上说服了公众,计算机确实有潜力在信息管理方面简化他们的生活。因此,消费者对互联网和技术的“期望”有了巨大的飞跃!

人们需要轻松地创建信息。他们需要灵活地移动、共享和组织信息。他们需要知道正在发生什么,找到最新价格,并在电影开始前及时到达。人们不再仅仅对计算机能正常工作这一事实感到惊奇。他们现在希望计算机告诉他们今晚7:30在五英里内,在半浪漫的环境中,在哪里可以吃到纽约牛排;“好的,现在预订两个人。”他们希望他们的收货信息能从一个网站记住到下一个网站。并且每个网站都应该根据个人口味进行个性化。所有这些“需求”都与信息的组织和沟通有关。顺便说一下,其中大部分信息在没有计算机或互联网的情况下已经存在(例如,哪些餐厅有空位,或者客户想要预订),但客户越来越希望技术能够自然地移动并对这些信息做出反应。

要实现这一切,必须有人编写软件。但这并不是您从货架上取下并安装在计算机上的软件。所需软件的一半甚至不在消费者的计算机上运行。这就是所谓的“软件即服务”。请记住这个术语。

人们愿意为服务付费。如果您的公司提供的服务涉及信息或通信,那么您就需要软件即服务来有效地服务您的客户。人们还希望这些服务来自成千上万的供应商,而不仅仅是一家。这将提高他们购买的任何东西的质量和价格。此外,许多这些服务必须无缝地协同工作,无论谁实施它们。突然之间,普通软件开发者的要求变得非常高!

在讨论解决方案之前,我想描述一个具体的场景。假设您是一位房地产经纪人,并且您想创建一个网站,让您的客户可以用来跟踪他们的购房或售房过程。我见过提供一些不错功能的房地产网站,例如最新的房源、抵押贷款计算器等。现在,假设您想集成一些更高级的功能,例如实时贷款批准状态或托管状态。突然,运行您网站的计算机必须与托管公司和银行的计算机进行信息通信。这并非不可能解决,但当您考虑到客户希望从一系列托管公司中选择,而您又不想因为不支持特定托管公司的数据协议而失去业务时,问题就变得更棘手了。

过去,像这样的棘手问题是通过定义标准来解决的。标准是很好的,但它们也带来了满足所有人需求的负担。这通常使得它们的创建过程缓慢,实现起来也很繁琐。如果您是这位房地产经纪人,您真正想要的是少数通用标准和一个足够健壮且简单的开发平台,以满足您敏捷的业务需求。想象一下,您的网页开发人员只需要半天时间就能理解并整合一家新的托管公司的数据接口,再花半天时间进行测试。所有的通信细节都顺利解决了。您的开发人员可以在不给托管公司开发人员打电话的情况下完成所有工作。现在,您就进入了正轨!

这就是微软的 .NET Initiative。实际上,.NET 只是整个行业正朝着这个方向发展的“点睛之笔”。SOAP 等标准协议将使数据交换变得如此简单,以至于您的软件能够跟上您的业务步伐。XML 等简单数据标准将使您的业务“信息”能够被任何需要使用它的人访问,反之亦然。最后,将这些功能以简单、一致、可靠和可扩展的方式提供给开发者的平台,将在可预见的未来成为主要竞争者。这个平台就是 _The Microsoft .NET Frameworks_。

The .NET Frameworks

我刚才称 The .NET Frameworks 为“平台”吗?我指的是开发平台,还是操作系统?嗯,这些问题的答案都是“是的,我指的是”,以及“两者都是”。那么,让我开始描述 The .NET Frameworks。

The .NET Frameworks 的核心是一个名为“通用语言运行时”(Common Language Runtime,简称 CLR)的组件,它非常像一个在其他操作系统(如 Windows ME 或 Windows 2000)的上下文中运行的操作系统。这不是一个新想法。它与 Java 虚拟机以及许多解释型语言(如 BASIC 和 LISP,它们已经存在了几十年)的环境有共同之处。像 CLR 这样的中间件平台的作用很简单,那就是像 Windows 这样的通用操作系统通常离机器硬件太近,无法保持面向互联网的业务软件所需的灵活性或敏捷性。在 CLR 上运行的软件(称为“托管代码”)极其灵活!

与解释型语言不同,托管代码在启动它的系统的本机机器语言中运行。简而言之,开发人员用多种语言中的任何一种编写代码。编译器生成以“p-code”格式(称为“通用中间语言”,简称 CIL)的二进制可执行软件。当软件启动时,CLR 会将 CIL 重新编译或“即时编译”(JIT 编译)为本机代码,例如 x86 机器语言。然后代码以全速执行。同样,p-code 技术并非新事物(自 70 年代中期以来一直存在 Pascal p-code 编译器)。但正如您将看到的,.NET Frameworks 以一些非常令人兴奋的新方式将这些久经考验的想法结合在一起。

The .NET Frameworks 的另一个组件是一个庞大的可重用对象类型库,称为“框架类库”(Frameworks Class Library,简称 FCL)。FCL 包含数百个类,用于执行各种任务,从文件读写等基本任务,到高级加密和 Web 服务等复杂任务。使用 FCL,您可以获得“软件即服务”,而开发成本微乎其微。

CLR 本质上是面向对象的;即使是它的 CIL(p-code,可以看作是虚拟汇编语言)也包含直接操作对象的指令。框架类库反映了平台的面向对象特性。事实上,FCL 是我用过的最广泛且“可扩展”的类库。根据我的亲身经历,自开始编写面向 CLR 的代码以来,我的端到端生产力提高了三倍。

最后,The .NET Frameworks 包含一套工具和编译器,有助于使针对新环境的编程变得高效且愉快。到目前为止,我很少提到 C#(发音为 See-Sharp)或 Visual Basic.NET。原因是这个新环境的真正核心是 CLR。然而,目前有超过二十种语言编译器正在为 .NET Frameworks 设计,其中包括微软的五种产品:Visual Basic、C#、C++、JavaScript 和 CIL。

然而,CLR 和 .NET Frameworks 的总体设计方式是,用一种语言编写的代码不仅可以被另一种语言无缝使用,而且还可以被用另一种编程语言编写的代码自然地“扩展”。这意味着(取决于项目劳动力的需求)开发人员将能够用他们最熟悉的语言编写代码,并继续平等地获得 .NET 环境的所有好处以及他们同事的努力成果!

Productivity.NET

我已经描述了未来的要求:快速、灵活的“软件即服务”。我简要描述了 .NET Frameworks。现在是时候分享一些能够为开发人员带来无与伦比生产力的实际细节了。

开发人员习惯于调用函数。开发人员也习惯于(或可以很快习惯于)在他们的软件中使用“对象”。与内存管理和网络编程等困难任务相比,这些工作耗时少、费力小。因此,.NET Frameworks 从头开始设计,旨在使困难的任务要么自动化(如内存管理),要么将其暴露为对象和函数调用。让我们看一个例子。

本文前面提到的房地产示例需要与第三方进行网络通信才能正常工作。让我们回到这个例子,假设“Acme 托管公司”处于技术前沿,并通过软件即服务公开其业务数据。(请记住,您是一位房地产经纪人,正在开发一个可能包含来自不同托管公司信息的网站。)这是您的网页开发人员需要编写的 .NET 代码(用 C# 编写),以从 Acme 检索状态数据。

示例 1 – Web 服务客户端

  //Create a new object
  AcmeEscrowService escrow = AcmeEscrowService();

  //Call a method or function on the object
  String status = escrow.GetStatus("Clark", "Jason");

此示例假设 Acme 托管公司公开了一个名为 _GetStatus_ 的 Web 服务方法,该方法接受姓和名作为参数。它返回一个描述托管状态的字符串。您的网页开发人员可以将此字符串显示为 Web UI 给用户,或以任何他们喜欢的方式使用它。

因此,如您所见,诸如与第三方进行网络通信之类的复杂任务已被简化为简单的对象创建和方法或函数调用。等等!“AcmeEscrowService 对象是从哪里来的?”我很高兴您问了这个问题。它是“自动生成的”。框架中包含的一个工具负责解释称为 WSDL 的标准 Web 服务描述语言,以创建 AcmeEscrowService 对象。WSDL 是一个开放标准,.NET Frameworks 能够理解它。WSDL 数据本身是由 Acme 创建的,所以您的网页开发人员几乎无需做什么就能使这段代码正常工作!

.NET Frameworks 巧妙地利用了 SOAP、XML 和 WSDL 等通用标准,使高级功能变得简单。值得注意的是,这些标准与房地产行业无关,但它们可用于轻松传输房地产信息(以及任何其他类型的数字数据)。

“但如果 Acme 的竞争对手 Foo 托管公司用完全不同的接口编写了他们的 Web 服务呢?”我再次很高兴您问了这个问题。理想情况下,两家托管公司会选择相似或相同的接口来公开相似的数据。但如果它们不这样做(而且您可以打赌它们经常不会),您的开发人员就可以轻松地相应地调整您公司的 Web 代码。假设 Foo 托管公司的 Web 服务接口接受“托管 ID”并返回一个状态码。

示例 2 – 另一个 Web 服务客户端

  //Create a new object
  FooEscrowService escrow = FooEscrowService();

  //Call a method or function on the object
  FooEscrowStatus status = escrow.GetStatus("JCLA777-12-7777");

在这种情况下,也许 Foo 托管公司在其 Web 服务的 WSDL 定义的特殊类型中提供了更高级的“状态”信息。无论如何,.NET Frameworks 工具和 CLR 协同工作,使您的开发人员的工作变得轻而易举。底线是,这段代码和前面的示例代码几乎不需要编写时间,并且可以在您的网站中共存。

那么,如果您是 Acme 托管公司,并且您正在编写一个 Web 服务呢?正如您可能已经猜到的,.NET Frameworks 将此功能公开为对象,这使程序员的工作变得更加有趣。

示例 3 – Web 服务

  class EscrowService : WebService {
  
     [WebMethod]
     public String GetStatus(string lastName, string firstName) {
        String status;
  
        // use ADO.NET or some other data access
        // to access data about the requested user
  
        return (status);
     }
  }

在此示例中,通过从 _WebService_ 类派生一个名为 _EscrowService_ 的新类(该类当然是框架类库的一部分),您的开发人员已经创建了一个功能齐全的 Web 服务。_GetStatus_ 方法被标记为 _[WebMethod]_,并自动从您的 Web 服务公开。软件即服务这样就变得相当便宜了。

同样,SOAP 协议的网络通信核心部分都由 FCL 处理。同时,.NET Frameworks 将自动创建描述您新 Web 服务所需的 WSDL。因此,难点是自动化的,或者是作为对象和函数调用暴露的。

总的来说,互联网上的服务应该像访问传统的硬件外设一样容易。因此,开发动态检索互联网上远程数据的代码,应该与编写显示计算机屏幕上的窗口或读取键盘输入代码一样容易。从程序员的角度来看,这都只是软件利用第三方提供的“服务”的业务逻辑。

为了进一步强调这一目标,.NET Frameworks 可用于编写传统的客户端应用程序(如文字处理器和电子表格)以及最前沿的软件即服务。无论哪种方式,概念和工具都是相同的,语言是相同的,您的开发人员使用的类和类型也是相同的。这种同构的开发视图提高了生产力。

无论您是使用 .NET Frameworks 编写客户端还是 Web 服务,只要它们遵守 SOAP 等 Web 服务标准,您就可以与其他平台上的客户端和服务器无缝互操作。

我认为值得一提的是,前面编写的两个 Web 客户端示例只要安装了通用语言运行时,就可以正常工作。另一方面,Web 服务示例需要 ASP.NET(现在是 .NET Frameworks 的一部分)和 Internet Information Services 的一些帮助。IIS 和 ASP.NET 负责可扩展的网络通信和“管道”,而您的代码只处理业务逻辑。这是现有产品(如 ASP 或 IIS)的 .NET 版本如何与 .NET Frameworks 无缝集成以创建完整解决方案的一个例子!

一些结束语

请记住,The .NET Frameworks 是微软 .NET Initiative 的真正核心。这个新产品将使您的公司能够生产暴露自身为服务和/或在互联世界中使用服务的软件。这是下一步。同时,微软将发布其企业服务器和其他产品的 .NET 版本,例如 Visual Studio.NET,它们将充分利用并完善 The .NET Frameworks 的功能。微软还将营销自己的 Web 服务,例如身份验证服务和个性化服务。这一切都是 .NET Initiative 的一部分。

然而,微软并未垄断这项计划。事实上,The .NET Frameworks 的重要部分已提交给 ECMA 标准化,即微软将不保留对该技术的所有权。同时,第三方将发布与 .NET Frameworks 紧密集成的服务器产品。第三方将使用 .NET Frameworks 公开 Web 服务。其中一些产品将与微软的产品竞争;另一些将是以前不可能实现的新型创新产品。

无论是否有 .NET Initiative,“软件即服务”都已到来。.NET Initiative 带来了新的工具、新的平台和一套从头开始设计的、旨在利用软件即服务的统一计划。我们都将得到一个开始发挥其潜力的互联网。

© . All rights reserved.