2017-03-16 9 views
4

私が取り組んでいるプロジェクトは、明日のテーブルで食べ物をもたらすものに基づいてC#からF#に移行する必要があります。つまり、2つの言語は横並びにしなければならないこのプロジェクトでは今後数年間にわたりF#とC#を並んで編成する方法

私が繰り返して直面している問題は、このニーズを満たすためにソリューションでどのようにプロジェクトを組織するべきかということです。

私は開発時間を短縮し品質を向上させることが多いので、C#からF#に常に翻訳します。しかし、私はF#コードとC#コード、同じレイヤー、またはレイヤーまたはモジュール間の境界を使用するF#コードを使用するC#コードになります。私は自分自身が間違ったプロジェクトにコードを入れて、ある層にもう一つのプロジェクトを作成しないようにしています。

状況は悪くありませんが、パターンや構造を考え出すことができないか、単に問題をよりよく理解しない限り、私はいつかコーナーに自分自身を描くことが心配です。

通常のF#アーキテクチャには、このような混在したソリューションに適したパターン、下部構造または上部構造のいくつかの変更がありますか?

この特定の課題の解決に特に役立つパターンがありますか?

+5

例を挙げることはできますか?私は今質問に良い話題があると思うが、具体的なアドバイスのためにはあまりにも抽象的すぎる。 – CodeMonkey

+1

一例:さまざまな場所からユーティリティメソッドをライブラリCsUtilsに移動します。次に、いくつかのユーティリティメソッドをF#に変換し、それらをライブラリFsUtilsに移動します。ここまでは順調ですね。しかし、私はユーティリティメソッドがお互いを使用できるようにしたい。 CsUtilsはFsUtilsを使用できますが、FsUtilsはCsUtilsを使用できますが、両方を使用することはできません。私はまだ別のライブラリを作成していますが、実際に発生するすべての依存関係の問題を解決するのに十分でしょうか? –

+0

今はCsUtilsしか持っていませんが、そのうちのいくつかをFsUtilsに移行しています。 CsUtilsはあなたのFsUtilsの一部を呼び出す必要があります。しかし、他のCsUtilsに依存しないCsUtilsからの移行を開始する場合は、別の方法では必要ありません。 – CodeMonkey

答えて

6

インターフェイスを使用して2つの言語間で通信します。

通常、移植するとき、f#は下位レベルのDLLであり、C#は通常どおりf#を呼び出すことができます。

f#がc#を呼び出す場合、c#で実装されているf#dll(たとえばIClibApi)のインターフェイスを定義します(例:ConcreteClibApiはIClibApiを拡張します)。 ConcreteClibApiのインスタンスを作成し、それをf#に渡します。今度はf#がIClibApiを介してc#を呼び出すことができます。

後でConcreteClibApiを移植することができます:)

関連する問題