0

У меня есть репозиторий под названием LeadRepository, который возвращает модель под названием Lead, которая является человеком.DDD Entity Framework Repository Return Complex Тип

UI У меня есть панель инструментов, которая отображает следующую статистику. Они все ведут, но в разных состояниях.

Всего лоты: 52

Назначено: 49

Неназначенные: 3

Связался: 49

неконтактировавщий: 0

Я использую хранимую процедуру для запроса БДА , Поэтому я не использую ленивую загрузку, чтобы выработать счет на лету.

Я подумал о двух возможных решениях ниже, но ни один из них не чувствует себя совершенно правильно.

  1. Используйте LeadRepository, но у него есть метод, называемый GetStats(), который возвращает сложный тип. Это не имеет никакого отношения к свинцовому веществу Agg. Просто куча свойств, которые имеют разные значения.

  2. Создайте LeadStatsRepository, но на самом деле это не как совокупный корень, так как он не имеет идентификатора. Это всего лишь сгруппированный набор данных.

Если у кого-то есть предложения, которые были бы замечательными.

ответ

1

Статистика лучше всего обрабатывается службой. От Эванса DDD, хорошее обслуживание имеет следующие характеристики:

  • Операция относится к концепции домена, который не является естественной частью объекта сущности или Value
  • Интерфейс определен в терминах других элементов в модель предметной области
  • операция без гражданства

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

+0

У меня есть служба под названием LeadService в настоящий момент, которая является службой приложений. Я не хотел использовать следующие методы, такие как LeadRepository.GetTotal() и LeadRepository.GetAllAssigned() в том же сервисном методе, потому что он мог бы сбить несколько запросов в БД. Вот почему я создал хранимую процедуру для запуска 1 запроса. С вашим комментарием вы имели в виду приложение или службу домена? – user3177251

3

Репозитории предназначены для совокупных корней. То, что вам нужно, - это модели для чтения и выделенные объекты запросов.

+0

Должен ли я создать класс LeadQuery, который имеет метод GetStats(), который содержит мой запрос? Итак, я базовый вызов моего класса запросов, который возвращает мою модель чтения, а не класс репозитория, который возвращает корень agg? – user3177251

+0

Зависит от вашего вкуса. Бит импорта заключается в том, что вы перемещаете запрос от репозиториев и сводных корней. Я использую объекты Query, такие как GetLeadStatisitcs, которые обрабатывают реализацию IHandleQuery . – JefClaes

+0

Этот пост заставил меня написать более подробное объяснение в своем блоге: http://www.jefclaes.be/2014/01/repositories-where-did-we-go-wrong_26.html – JefClaes

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