2011-12-14 3 views
1

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

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

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

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

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 

И следующее требование состоит в том, чтобы добавить еще один «вес» раздела «СОДЕРЖАНИЕ» с уровня «Уровень продукта» в «Позиция». Опять же, только на дисплее.

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 

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

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

ответ

0

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

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

Смежные вопросы