В настоящее время я пытаюсь провести рефакторинг приложения, в котором много мест, где отображаются списки или таблицы данных, с итоговыми или средними значениями в конце и процентными изменениями или совокупными итогами для каждой записи.
Как правило, коллекция моделируется как список объектов, а другие данные рассчитываются в коде 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 довольно сложным, поскольку нет способа вызывать события из списка продаж, к которым SalesCollection может подключиться, и рассчитать другую статистику.
Полагаю, я ищу чистый способ моделирования данных такого типа, который можно легко сохранить в Nhibernate.