Модель предметной области и сгруппированные данные - PullRequest
1 голос
/ 14 декабря 2011

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

Я постараюсь привести конкретный пример. Представьте себе следующую модель домена:

Orders [1-to-many] Positions [1-to-many] Production items

Отображается как простой трехуровневый список.

Order 1
- Position 1
  - Production item 1, length: 2.5, weight: 1.234
  - Production item 2, length: 2.5, weight: 2.345
  - Production item 3, length: 5, weight: 3.456

Затем идет требование изменить уровень положения путем добавления поля «длина» (только для отображения, сама сущность положения НЕ изменяется) из производственного объекта и группы по этому полю.

Order 1
- Position 1, length: 2.5
  - Production item 1, length: 2.5, weight: 1.234
  - Production item 2, length: 2.5, weight: 2.345
- Position 1, length: 5
  - Production item 3, length: 5, weight: 3.456

И следующее требование - добавить еще одно поле SUMmed "вес" из уровня элемента производства на уровне позиции. Опять же, только на дисплее.

Order 1
- Position 1, length: 2.5, weight: 3.579
  - Production item 1, length: 2.5, weight: 1.234
  - Production item 2, length: 2.5, weight: 2.345
- Position 1, length: 5, weight: 3.456
  - Production item 3, length: 5, weight: 3.456

Что мне нужно изменить, чтобы достичь этой «искусственной» модели?

Похоже, нужен какой-то объект составного значения в месте, где идет Позиции: все поля сущности Позиция + поле размера + поле веса. Я на правильном пути?

1 Ответ

0 голосов
/ 21 декабря 2011

Если вы используете NHibernate в качестве инструмента ORM, вы можете использовать функции проекции для выполнения функций группировки и агрегирования, таких как «сумма» и «счет». Это оставляет проблему того, какую сущность возвращать из запроса, поскольку у вашей сущности Position, вероятно, не будет поля 'weight'. Я, как правило, просто имею новую сущность (возможно, сущность - это не то слово), которая называется PositionQueryResult или что-то подобное. Что-то, чтобы отличаться от фактической позиции лица. Эта «сущность» не имеет поведения - только свойства, которые должны быть возвращены. Я нигде не видел, чтобы это пропагандировалось, но у меня это работает.

Однако вы называете это «отчетностью». Одна школа мысли говорит, что отчетность не должна быть включена в ваш домен, что это нечто отдельное. Это может быть хорошей парадигмой для подражания, потому что ORM лучше для программирования модели предметной области, но сырой SQL часто лучше для отчетов.

...