[ 登录 ][ 注册 ] 天极传媒: 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
您现在的位置: IT专家网 > WinSystem子站 > 评论分析

通过探索 WinFS 类型系统来了解 WinFS

作者: Thomas Rizzo、Sean Grimaldi,  出处:微软, 责任编辑: 韩博颖, 
2008-05-22 09:14
  WinFS 是能够进行多主机同步的存储平台,适合于在数以亿计的计算机上运行,具可访问性,并且支持国际用户。

  简介

  WinFS 是能够进行多主机同步的存储平台,适合于在数以亿计的计算机上运行,具可访问性,并且支持国际用户。如果这还不够,那么 WinFS 还能够将文件数据、关系数据和 XML 数据联结在一起。您能够得到的要远远超过简单的“Hello World!”程序。

  一种开始了解这一先进级别存储环境的方法是将软件体系结构解构,并探索其各个基本部分。存储系统的最基本部分之一是它的基础数据模型。数据模型是一个完整的系统,用于描述数据的表示方式和存储方式。

  程序员主要通过使用 WinFS 类型系统来与 WinFS 数据模型进行交互,而不是直接与该数据模型进行交互。类型系统 — 尤其是与 .NET Common Type System (CTS) 类似的类型系统 — 在本质上是一个定义在创建、使用和管理类型运行库时所遵循规则的模型。好消息是 WinFS 数据模型和 WinFS 类型系统具有许多共同之处—实际上,它们有如此多的共同之处,以至于您可以安全地假定它们在很大程度上互为映像。

  本探索在对 WinFS 平台进行编程时使用的类型系统。那些使用 .NET 编程的程序员已经熟悉了类型系统;毕竟,公共语言规范定义了 CTS。如果不使用任何类型,那么即使是使用 .NET 编写一个“Hello World!”程序也是不可能的。但是,即使是在简单的代码中,类型系统也是很重要的。撇开开发人员的世界不谈,类型系统对于那些使用开发人员通常不会使用的类型(如 Word 文档、PowerPoint 幻灯片和电子邮件)来了解其数据的用户而言,也是很重要的。WinFS 引入了一种类型系统,它使开发人员可以对更为复杂的数据进行建模,同时能够向最终用户隐藏相应的复杂性。

  类型系统在软件中无处不在。像 C 和 Transact-SQL 这样的传统编程语言都具有类型系统;即使文件系统也具有类型系统。

  软件中的类型系统有助于将它们本来致力于解决的问题具体化。例如,因为 Visual BasicC# 都包括 System.Decimal 类型,而该类型适合于财务值,所以您可以推断 Visual Basic 和 C# 可能适合于卓有成效地编写财务应用程序。对于 COBOL、Lisp 当然还有 T-SQL 也可以这么说。另一方面,本机 C++ 编程世界不包括货币类型。当然,您可以购买或开发适合于编写财务应用程序的类型。但您通常可以推断,对于编写财务应用程序而言,本机 C++ 不像 C# 或 Visual Basic 那样有效。关于 .NET 和 C++ 中货币类型的这两种评论当然都是有争议的,但通常被认为是常识。

  像上述其他软件系统一样,WinFS 也具有类型系统。

  使用 System.Storage.Meta 探索类型

  您可以使用 System.Storage.Meta 命名空间中定义的类来探索 WinFS 类型系统。WinFS 中最重要的类型之一是 Item 类型。项表示 CTS 中的实体或根 System.Object 类型的非严格等价物。WinFS 系统具有四个层次:项、嵌套类型、关系以及作为您自己的类型的扩展。您可以使用 WinFS API 检索特定 WinFS 存储的所有为 Item 或为 Item 子类的类型。这很了不起;它有点类似于从既包含 bigint 类型的 id 又具有三个 varchar(55) 类型列的数据库中检索所有行。这一类型查询不同于更为常见的类型值查询,如从 id 等于特定值的数据库中检索所有行。下例中的查询可检索本地 WinFS 中定义的所有 Item 类型。值得庆幸的是,这非常简单:

  

      class EnumerateItemTypes
  {
  static void Main()
  {
  // List out Item types.
  EnumerateType(typeof(
  System.Storage.Meta.ItemTypeInfo));
  Console.WriteLine("Press enter to end...");
  Console.ReadLine();
  }
  static void EnumerateType(System.Type metaType)
  {
  using (ItemContext context = ItemContext.Open())
  {
  Console.WriteLine("List all {0} types",
  metaType.Name);
  ItemSearcher typeSearcher =
  context.GetSearcher(metaType);
  FindResult allTypes =
  typeSearcher.FindAll(new FindOptions(
  new SortOption("Name",
  SortOrder.Ascending)));
  foreach (System.Storage.Meta.TypeInfo tInfo
  in allTypes)
  {
  Console.WriteLine("name={0}",tInfo.Name);
  }
  }
  }
  }
  尽管您可能急于运行上述代码,以便以编程方式探索该类型系统,但您可能需要首先阅读以下关于这些代码所做工作的解释。这些代码使用了两个方法:Main 和 EnumerateType。Main 方法调用了 EnumerateType,并且将 ItemTypeInfo 作为参数传入。ItemTypeInfo 类型描述了有关 Item 类型的信息。它类似于 System.Reflection.PropertyInfo 类型,该类型使用反射描述了有关属性的信息。因此,实际上您是在请求 EnumerateType 方法来打印出一些有关 Item 类型的信息。为此,它打开了一个 ItemContext,后者提供了与 WinFS 存储的连接。在使用完 ItemContext 以后,一定要将其关闭 — 在该示例中可从 using 语句中调用 Dispose 方法。ItemContext 还提供了一个 ItemSearcher,您可以使用它来搜索 WinFS 存储。运行时,上述代码将搜索 Item 类型,然后写出在本地存储中找到的每个 Item 类型的名称。
?6?? 1 2 3 4 5 6 :

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。

邮件订阅