我目前正在尝试重构一个应用程序,它在很多地方显示数据列表或表格,最后显示总计或平均值,以及每个记录的百分比变化或累积总计。
通常,集合被建模为对象列表,而其他数据则在aspx代码中进行计算(恶心)。我想将这个逻辑转移到我的模型中,以使其可测试和可重用。
目前我能想到的最好办法是创建一个集合类,将所有这些对象添加到其中。然后,该集合可以公开表示各种统计信息的属性。这样地:
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); }
}
}
这对总数很有效。但现在我需要计算每天的百分比变化。我可以将其添加到每日销售额中,然后从collection类中进行更新,这似乎也很有效。不过,它使Nhibernate的持久化变得相当困难,因为无法从SalesCollection可以连接到的销售列表中触发事件并计算其他统计数据。
我想我要寻找的是一种对这类数据建模的干净方法,它可以很容易地持久化到Nhibernate。