代码之家  ›  专栏  ›  技术社区  ›  Jack Ryan

使用相关统计数据对集合进行建模,以及NHibernate

  •  0
  • Jack Ryan  · 技术社区  · 16 年前

    我目前正在尝试重构一个应用程序,它在很多地方显示数据列表或表格,最后显示总计或平均值,以及每个记录的百分比变化或累积总计。

    通常,集合被建模为对象列表,而其他数据则在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。

    1 回复  |  直到 16 年前
        1
  •  1
  •   epitka    16 年前

    我会把你的收藏放在一边,曝光就是这样

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

    然后只需为IEnumerable创建扩展方法即可完成计算。

    public static decimal CalculateSomething (this IEnumerable<DailySales>sales)
    {
       return {your calculation here}
    }