Гибкие представления списка объектов данных - NHibernate, кажется, не прав, но что есть? - PullRequest
0 голосов
/ 16 октября 2011

Я работаю над реализацией функциональности в существующем приложении MVC3 + NHibernate, которая позволила бы пользователям определять пользовательские представления для объектов данных. Проблема, с которой я столкнулся в NHibernate, заключается в том, что реальные объекты сущностей не включают (и я думаю, что они не должны) включать свойства для каждого типа агрегата, который пользователь может захотеть включить в представление.

Например, пользователь может захотеть создать представление, которое отображает список всех продуктов вместе со столбцами для итогов продаж за этот месяц, в прошлом месяце и с начала года. Или представление, показывающее продавцов и их общее количество продаж за различные периоды времени, как это. Или один показывает доход от продажи за определенный период времени.

В идеале я хотел бы, чтобы эти агрегаты можно было добавлять в приложение, не требуя изменения самих объектов сущностей, например, через дополнительные классы, определяющие совокупность.

Не похоже, что это хорошая работа для NHibernate, поэтому я думал о реализации отдельного доступа к данным в приложении специально для этих представлений (которые более уместно называть отчетами). Вот несколько вариантов, которые я рассмотрел:

  • Использование чего-то вроде Massive или Dapper , что позволило бы мне использовать ExpandoObjects для учета множества возможных агрегатов, но я не работал с ним, и похоже, что это может быть слишком упрощенным для сложных агрегатов.
  • Возвращаясь к основам, используя SQL-запросы или sprocs, ADO.NET и SqlDataReaders, чтобы вручную заполнять объекты, возможно, даже ExpandoObjects, например, Massive, но я управляю SQL.
  • Создание объекта-обертки для агрегатов, который будет включать свойство, ссылающееся на сущность NHibernate, возможно, с использованием обобщенных типов (например, SalesByMonth<Product>). Проблема здесь заключается в неэффективности многоуровневых вызовов базы данных по сравнению с вызовами базы данных NHibernate.

Я не хочу использовать полнофункциональное решение для составления отчетов, потому что агрегаты, вероятно, будут довольно простыми, и я хочу, чтобы это было интегрировано в внешний вид сайта, чтобы пользователи могли нажимать ссылки на позиции для просмотра связанной сущности.

Как вы рассматривали подобные требования в прошлом, и если да, то как? Мне не хватает какой-то возможности NHibernate, которая могла бы обеспечить функциональность этого типа в моем текущем наборе объектов-сущностей?

...