所以我正在学习F#,看着这个:
还有这个:
http://msdn.microsoft.com/en-us/library/hh361033(v=vs.110).aspx
我对F#不太熟悉,但我(可能不完整)的理解是,类型提供程序旨在为您提供某种对外部数据源的静态类型安全访问.
但是,他们是如何做到这一点的呢?由于数据源是外部的,似乎(对我来说)无法检查数据源的模式而不查询它,并且在编译期间(以及代码完成!)查询内容似乎是一个坏主意.
但是,如果他们不这样做,就必须进行一些强制转换,将未知数据源转换为某个模式(然后可以进行类型检查),如果数据源不能,则可能会失败.铸造.
你问几个好问题:
类型提供程序在编译期间是否与外部数据源联系?
是.FSharp.Data.TypeProviders命名空间中提供程序的基本思想是它们每个都包装一个代码生成器.因此,要在C#或大多数其他语言中执行相同的操作,您需要一个明确的代码生成步骤(在"编译时"之前/之前联系数据源).在F#中,这个过程更加无缝,但原则上非常相似.类型提供程序访问的数据源公开了查询模式的相对有效的方法,类型提供程序包含用于在编译期间最小化往返次数的逻辑.
如果架构发生变化,或者数据库脱机,或者......,会发生什么?
一般来说,这取决于类型提供程序,但内置类型提供程序向用户公开了一些选项.特别是,可以指示提供程序应该缓存模式的本地副本,以防数据库变得不可访问(或者,也可以强制提供程序违反实时数据,以便在编译期间立即报告错误,如果任何不匹配发生).
同样,这与其他语言中的代码生成方法没有太大区别 - 如果架构从您下面更改,您可能会快速失败(如果重新生成代码并且您对生成的代码的引用不再按预期排列),或者你可以尝试混淆(例如,从不重新生成代码并希望事情在运行时排队).
这些答案适用于内置提供程序,但作为提供者 - 编写者,当然可以选择做一些不同的事情(尽管我认为我概述的方法对大多数外部数据源都有意义).
归档时间: |
|
查看次数: |
819 次 |
最近记录: |