2009-06-03 12 views
0

私は現在、リストやデータの表を表示し、最後に総計または平均を表示する場所がたくさんあるアプリケーションをリファクタリングしようとしています。それぞれにパーセント変化または累積合計記録。関連する統計情報とNHibernateを使ったコレクションのモデリング

通常、コレクションはオブジェクトのリストとしてモデル化され、他のデータはaspxコードの背後で計算されます(yuck)。私は、このロジックをテスト可能で再利用可能にするために私のモデルに移したいと思っています。

私が現時点で最善を尽くすことができるのは、これらのオブジェクトがすべて追加されるコレクションクラスを作成することです。このコレクションは、さまざまな統計を表すプロパティを公開することができます。このように:

public class DailySales 
{ 
    public DateTime Date { get; set; } 
    public decimal Value { get; set; } 
} 

public class SalesCollection 
{ 
    public List<DailySales> Sales { get; private set; } 

    public decimal TotalSales 
    { 
     get { return Sales.Sum(x => x.Value); } 
    } 
} 

これは合計に適しています。しかし今、私は毎日の%変化を計算する必要があります。私は毎日の売上にこれを加えて、それをコレクションクラスから更新することもできます。コレクションクラスも同様にうまくいくようです。 SalesCollectionがフックして他の統計を計算することができるSalesリストからイベントを起動する方法がないので、Nhibernateでそれを永続化することを除いては、

私が探しているのは、この種のデータをモデル化するクリーンな方法で、Nhibernateに簡単に永続化することができます。

答えて

1

私は一人であなたのコレクションを残し、そして公開するこの

private IList<DailySales> _dailySales; 
public IEnumerable<DailySales> DailySales 
{ 
    get 
    { 
    return _dailySales; 
    } 
} 

のようなもののようになり、その後、ちょうどあなたの計算を行いますIEnumerableをのための拡張メソッドを作成します。

public static decimal CalculateSomething (this IEnumerable<DailySales>sales) 
{ 
    return {your calculation here} 
} 
関連する問題