2017-03-16 55 views
4

我的工作將不得不從C#遷移到基於什麼對錶明天帶來了食品F#項目的F#和C#方 - 換句話說,這兩種語言都住並排在這個項目中未來幾年。如何組織並排

我一再面臨的問題是我應該怎麼組織項目的解決方案來滿足這一需求。

我翻譯從C#件F#所有的時間,因爲它經常縮短了開發時間,提高質量。但是,我最終想要使用F#代碼的C#代碼和想要使用C#代碼的F#代碼,在同一圖層中,或者在圖層或模塊之間的邊界上。我發現自己把代碼放在錯誤的項目中,只是爲了避免在某個層次上創建另一個項目。

現在的情況還不錯,但我擔心,我會自己畫成一個角落在某些時候,除非我能拿出一個圖案或結構,或者簡單地理解這個問題更好。

是否對正常的F#架構(模式,子結構或上層建築)進行了一些修改,它非常適合這種混合解決方案?

有沒有已知的模式對解決這個特殊的挑戰特別有幫助?

+5

你能提供一個例子嗎?我認爲現在這個問題有一個很好的話題,但對於具體的建議來說這太抽象了。 – CodeMonkey

+1

舉一個例子:我將各個地方的實用程序方法移動到庫CsUtils中。然後我將一些實用方法轉換爲F#並將它們移動到庫FsUtils中。到現在爲止還挺好。但我希望實用方法能夠相互使用。 CsUtils可以使用FsUtils,或者FsUtils可以使用CsUtils,但不能同時使用。我是否還創建了另一個庫,是否真的足以解決所有可能出現的依賴問題? –

+0

所以現在你只有CsUtils,但你正在把它們中的一部分遷移到FsUtils。所以CsUtils需要調用一些你的FsUtils。但是如果您從不依賴於其他CsUtils的CsUtils開始遷移,則不需要採用其他方式。 – CodeMonkey

回答

6

使用接口兩種語言之間的通信。

通常移植時,F#是較低級別的DLL和C#可以調用F#如常。

現在讓f#來調用c#在c#中實現的f#dll(例如IClibApi)中定義一個接口(例如ConcreteClibApi擴展IClibApi)。創建一個ConcreteClibApi的實例並將其傳遞給f#。現在f#可以通過IClibApi調用c#。

以後你就可以開始移植ConcreteClibApi :)