我目前正在尝试重构一个应用程序,该应用程序有很多地方显示列表或数据表,最后是总数或平均数,以及每条记录的百分比变化或累计总数。
通常,集合被建模为对象列表,而其他数据则在后面的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。
答案 0 :(得分: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}
}