私は、測定値と測定値の警告/エラー領域を含む大きなデータベースを扱う必要がありました。測定/値の関係の設計パターンはありますか?
public class Measurement<T>
{
public T Target { get; set; }
public float? UpperWarnLimit { get; set; }
public float? LowerWarnLimit { get; set; }
public float? UpperErrorLimit { get; set; }
public float? LowerErrorLimit { get; set; }
}
これらの測定値は仕様に割り当てられている:ユーザーが測定を行うたびに
public class Specification
{
public long Id { get; set; }
public Measurement<float> Width { get; set; }
public Measurement<float> Height { get; set; }
public Measurement<int> AdditionalMeasurement { get; set; }
// ...
}
そこで、システムは、様々なデータベースのテーブルから情報を収集仕様オブジェクトをアセンブルし、測定値を収集します。いくつかのケースでは仕様が変更する必要があります。
public interface IDatabase
{
Specification GetSpecification(long id);
void UpdateSpecification(Specification specification)
}
すべてがこれまでのところ良いように見えますが、ユーザーがデータベースにテスト結果を保存するために持って、私が何であるかわからない場合もありますこの問題を解決する最善の方法。
public class Measurement<T>
{
public T Target { get; set; }
public T Value { get; set; } // <-- New
public interface IDatabase
{
void StoreTestResults(Specification specification) // <-- New
しかし、実際には、ユーザがテスト結果ではなく仕様を格納するため、それは、右感じていない:
私の最初のソリューションは、このような測定およびデータベース・クラスを変更することでした。私はこれを行うより良い方法を探しています。
これをクリアするにはできるだけ複雑な複雑さを最小限に抑えてテスト結果を仕様から分離したいと考えています。
Iが挙げ変化を有する典型的なコードシナリオ:
var s = GetSpecification(123);
s.Height.Value = 4;
if (s.Height.Value > s.Height.Target * s.Height.Target.UpperErrorLimit)
{
...
}
StoreTestResults(s);
これは簡単であり、かなりまっすぐ進むが、テスト結果と仕様自体との間に明確な分離が存在しません。
この点をもう少し説明したら、おそらくあなたがしていることの具体的な例を挙げておけば助かります。 – Marcin
@Marcin:コードサンプルを追加しました。 – xsl