与传统的“类型提供商”相比,F#类型提供商的优势是什么?

时间:2013-10-16 12:34:37

标签: f# type-providers

来自MSDN page on F# Type Providers

  

F#类型提供程序是一个提供类型,属性的组件,   和程序中使用的方法。

所以它就像一个.NET类库?有什么不同?和

  

手动编写这些类型非常耗时且难以实现   维护。

Type Provider是否自动编写?还有更多:

  

类似地,WSDL Web服务的类型提供程序将提供   您需要直接使用任何WSDL的类型,属性和方法   网络服务。

有一些实用程序可以从WSDL URL生成类型,同样类型提供程序在这里提供的优势是什么?

我的第一个想法是F#Type Providers在运行时提供类似.NET远程处理的类型,但似乎并非如此。使用它们有什么好处?

2 个答案:

答案 0 :(得分:13)

在许多方面,代码生成是类型提供者的自然比较。但是,类型提供程序有几个代码生成缺乏的理想属性:

  • 类型提供程序可以在F#脚本中使用,而无需上下文切换。使用代码生成器,您必须调用生成器,引用代码等。使用类型提供程序,您可以引用类型提供程序程序集(就像引用任何其他F#/。NET程序集一样),然后使用提供的类型马上。这真的是一个改变交互式脚本的游戏。
  • 正如Gustavo所提到的,擦除类型允许类型提供程序处理传统代码生成会生成太多代码的情况(例如,Freebase有数千种类型,对于类型提供程序来说没有问题)。
  • 类型提供程序可以支持失效,因此如果数据源发生更改,编译器将立即重新检查该文件。
  • 同样,使用代码生成器,生成的代码可能与数据源不同步;类型提供程序可以防止发生此问题,每次编译程序时都检查数据源(尽管许多类型提供程序还提供了使用缓存模式的选项以方便起见)。
  • 类型提供程序可以说更容易实现,但它可能取决于场景和作者的背景。

答案 1 :(得分:11)

您可以使用代码生成工具从WSDL或DB生成类型,就像集成到Visual Studio中的类型一样。类型提供程序基本相同,但直接在编译中集成该过程。这样,您就不必担心在架构更改时重新生成类型。

另外,类型提供程序支持使用已擦除类型执行此操作,这些类型是"虚拟"不存在的类型。这意味着不是生成500种类型和大型程序集,而是仅生成实际使用的内容,这意味着更小的程序集和对导入巨大和递归模式的支持,如Freebase