私は多くの家庭プロジェクトでF#に徐々に切り替えていますが、完全なアプリケーションを結びつける方法、特にクロスカッティングに関する懸念については少しぼやけています。F#アプリケーション構造ログ/リポジトリ
C#では、ログオンしたい場合は、依存関係注入を使用してILoggerを各クラスに渡してから、コードから素敵に簡単に呼び出すことができます。私は自分のテストで、モックを渡して検証する特定の状況のログが書かれていることを確認できます。
のF#ではpublic class MyClass
{
readonly ILogger _logger;
public MyClass(ILogger logger)
{
_logger = logger;
}
public int Divide(int x, int y)
{
if(y == 0)
{
_logger.Warn("y was 0");
return 0;
}
return x/y;
}
}
することは、私はより多くのモジュールを使用していますので、私は、私はちょうどそれを開いて、そこからログ機能を使用することができ、モジュールと呼ばれるログを持っていた場合は、上記の今
module Stuff
let divde x y =
match y with
| 0 -> 0
| _ -> x/y
になるでしょうyが0の場合は、単体テストのためにどのように注入するのですか?
私は各機能にログ機能(文字列 - >単位)を持たせることができましたが、部分アプリケーションを使用して接続することができましたが、実際の呼び出しを内部でラップする新しい関数を作成するロギングコール特定のパターンやF#のビットが私はそれを行うことができます行方不明だ? (私はkprintf関数を見たことがありますが、完全なアプリケーションの具体的な実装を使っていながら、さまざまなテストシナリオで関数をどのように指定するかはまだ分かりません)
同様に、データを取得しましたか?いくつかのクラスをインスタンス化し、CRUD関数を設定する必要がありますか、または開いているモジュールを挿入する方法がありますか(#define以外)
のhttpあなたのロギング用のC#から、あなたが知っているのと同じ技術を使用できるようにする必要があり、最初のC#
に似ているF#で自分のC#コードの実装です:/ /stackoverflow.com/questions/2003487/architectural-thinking-in-functional-languages http://stackoverflow.com/questions/192090/how-do-you-design-a-functional-program –