2009-06-03 67 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} 
}