DDD ( ДДД ):Пытаетесь закодировать сортировку и фильтрацию, поскольку это относится к Poco, репозиторию, DTO и DAO, используя C #?

StackOverflow https://stackoverflow.com/questions/2445462

Вопрос

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

  1. Отправьте фильтр и объект сортировки, полный условий, в репозиторий (как это называется)?
  2. В результате репозитория будет создан объект с .методами filter и .sort?(Это не будет POJO / POCO, потому что он содержит более одного объекта?).

Итак, является ли ответ 1, 2 или другим?Не могли бы вы объяснить, почему?Я склоняюсь к # 1, потому что репозиторий сможет отправлять только те данные, которые я хочу (или # 2 сможет задерживать доступ к данным, таким как LazyList?) Пример кода (или ссылка на веб-сайт) был бы очень полезен.

Пример:

  1. Продукт product = repo.GetProducts(mySortObject, myFilterObject);// Список Poco
  2. продукт.Добавить фильтр ("цена", "Меньше", "3,99");товар.Добавляет сортировку ("цена", "по убыванию");
Это было полезно?

Решение

Это не полный ответ, но вы, возможно, захотите взглянуть на некоторые идеи, лежащие в основе CQRS (разделение ответственности за командный запрос) (можно найти несколько хороших ссылок здесь).

CQRS - это способ мышления о DDD, который может помочь прояснить некоторые из этих вопросов.Это на более высоком уровне, чем ваш конкретный вопрос, но это может помочь.

По сути, я думаю, что это просто поможет вам выбрать ваш первый вариант (к которому я пришел в аналогичной ситуации).Мы назвали это Объектом запроса.

Другие советы

Лично я бы предпочел ваш первый вариант.

Если вы рассматриваете второй вариант с точки зрения DDD, то объект product, который, как я предполагаю, является объектом вашего домена, обладает знаниями о чем-то, что на самом деле не является частью бизнес-проблемы, которую вы пытаетесь решить (т.е. вашего домена).Скорее сортировка и фильтрация используются в пользовательском интерфейсе или каком-либо другом компоненте внутренней обработки.

Кроме того, рассматривая второй вариант с точки зрения единой ответственности (он же SOLID), вы увидите, что ваш Product бизнес-объект отвечает за сортировку и фильтрацию, то есть за то, что вообще не связано с продуктом.

Вот как я смотрю на вещи.Мне было бы интересно узнать мнения других.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top