2011-07-14 14 views
1

私は楽しいMVCプロジェクトに取り組んでいる中間のC#/ ASP.netコーダーです。私は、オブジェクトがより良いやり方を見つけるために機能を "揺らす"ことを可能にする実験フレームワークを実装したいと思います。この種のことに関するベストプラクティスやチュートリアルの詳細はどこで確認できますか?実験フレームワークを書く方法

例えば

// A helper class that might return different flavors of "mean". 
public class MeanHelper 
{ 
    ... 
    Mean(IEnumerable<double> input) { <shuffle between the 3 below.> } 

    OrdinaryMean(IEnumerable<double> input) { ... } 
    GeometricMean(IEnumerable<double> input) { ... } 
    HarmonicMean(IEnumerable<double> input) { ... } 
    ... 
} 

本当にありがとうございました!

答えて

4

あなたの説明はstrategy patternのように聞こえます。例えば、インタフェースIMean、Calculateメソッド、および3つの実装を持つことができます。

0

「ジグル機能」とは、設定に基づいてさまざまな機能を置き換えることで、実験できることです。

この場合、ポリモーフィズム(ほとんどの場合はインターフェイス経由)を調べて、inversion of controlに関連付けられたフレームワークとデザインパターンを調べるべきでしょう。

+0

これは私が考えていたものです。 'MeanHelper:IExperimentable'のように、リポジトリ内のマネージャに生成された設定を記録するような実験的な機能を持ち、後で分析のために設定や結果を後戻りさせることができます。 –

+0

私は幾分混乱しています:Calculate(IEnumerable 入力)メソッドを使用して、MeanHelperの各関数を独自のIMeanCalculator実装として実装することはできますが、 – Reddog

+0

また、MeanHelperの装飾に基づいて、システムがコードパフォーマンスメトリックの記録を自動的に開始することを意味しますか? – Reddog

3

私は、次のプロパティを持つ自分の実験のフレームワークを使用します。

  • 実験はアプリケーションのみ限り、継続的な実験があるとして実行
  • ファーストクラスの実体である
  • それがある場合、各実験が決定収集十分なデータ
  • は、レコードがデータベースに格納され

実験中のアプリケーションは、操作フレームワークの名前付きプロパティを操作して監視します。主なアプリケーションメソッドは、イベントジェネレータです。各実験では、操作するプロパティと監視するその他のプロパティが一覧表示されます。実験フレームワークは、主なアプリケーションメソッドを反復し、進行中の実験にイベントを送ります。各実験では、受け取ったイベントをフィルタリングし、分散統計を更新し、関連するアプリケーションプロパティを操作します。実験がイベントを処理したことを知らせる信号が発生すると、そのイベントは操作され、監視されるプロパティの値が実験データベースに保存されます。

実験データベースは、検査またはShoまたはRで分析されます。実験の結果は、個々の特性値の影響、ならびに異なるアプリケーション特性の相関および独立性を研究するために使用することができる。

信号や制御の反転の代わりに、ジェネレータパターンを使用することを選択しました。これは、アプリケーションの実行と停止時に実験フレームワークが担当する必要があるためです。コンパイラは、yieldコマンドに基づいて、メインアプリケーションメソッドでステートマシンを作成するためのすべての苦労をしています。

私はまだフレームワークを洗練し、その一部を再考しています。私はこれを将来のある時点でオープンソースプロジェクトにするつもりです。

Googleの"Overlapping Experiment Infrastructure"論文は、このテーマに関する優れた読書です。

関連する問題