2009-06-03 37 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); } 
    } 
} 

這適用於總計。但是現在我需要計算每天的變化百分比。我可以將其添加到日常銷售中,然後從集合類中進行更新,這似乎也很有效。除了使用Nhibernate使其持久化之外,因爲無法從Sales列表中觸發SalesCollection可以掛接並計算其他統計信息的事件。

我想我正在尋找的是一種乾淨的建模這種數據的方式,可以很容易地堅持到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} 
}