2013-10-16 43 views
6

MSDN page on F# Type ProvidersF#類型提供者相對於傳統「類型提供者」有什麼優勢?

的F#類型提供者是提供的類型,性質, 和方法在程序中使用的組件。

因此它就像一個.NET類庫?有什麼不同?並且:

手動寫入這些類型非常耗時,並且難以保持 。

Type Provider是否自動寫入自己?還有更多:

同樣,對於WSDL web服務的類型提供商將提供 類型,屬性,你需要直接與任何WSDL Web服務的工作方法。

有用於從WSDL URL生成各類公用設施,又是什麼在這裏輸入提供商所提供的優勢在哪裏?

我的第一個想法是F#Type Providers在運行時提供了類似於.NET Remoting的類型,但似乎並非如此。使用它們有什麼好處?

回答

13

在很多方面,代碼生成是一種自然的比較對於類型提供者。但是,類型提供程序具有代碼生成缺乏的幾個令人滿意的屬性:

  • 類型提供程序可用於F#腳本而無需進行上下文切換。使用代碼生成器,您必須調用生成器,引用代碼等。對於類型提供者,您引用類型提供程序集合(就像引用任何其他F#/ .NET組合件一樣),然後使用提供的類型馬上。這實際上是交互式腳本的改變者。
  • 正如古斯塔沃提到的,刪除類型允許類型提供者處理傳統代碼生成會產生太多代碼的情況(例如,Freebase有成千上萬種類型,這對於類型提供者來說不成問題)。
  • 類型提供程序可以支持失效,這樣如果數據源發生更改,編譯器會立即重新檢查該文件。
  • 同樣,使用代碼生成器可能會使生成的代碼與數據源不同步;類型提供程序可以防止發生此問題,每次編譯程序時檢查數據源(儘管許多類型提供程序也提供了使用緩存模式的選項以方便起見)。
  • 類型提供者可以說更容易實現,儘管它可能取決於場景和作者的背景。
+0

Upvoted並接受爲答案,謝謝!我不完全理解它,所以我會閱讀這個話題並回過頭來回顧一下。 –

11

您可以使用代碼生成工具從集成到Visual Studio中的代碼生成工具中生成WSDL或DB中的類型。類型提供者基本上是一樣的,但直接在編譯過程中集成該過程。這樣,當模式更改時,您不必擔心重新生成類型。

另外,類型提供程序支持使用擦除類型來執行此操作,這些類型是「虛擬」類型,但實際上並不存在。這意味着,不生成500個類型和一個大的程序集,只生成實際使用的內容,這意味着更小的程序集和支持導入大型和遞歸模式,如Freebase

+0

Upvoted,非常感謝。我意識到它有很多,它的優勢非常微妙。我需要更詳細地閱讀這個話題,才能明白我是否完全害怕:)。 –

相關問題