DDD: пытаетесь кодировать сортировку и фильтрацию, поскольку это относится к Poco, Repository, DTO и DAO, используя C #? - PullRequest
3 голосов
/ 15 марта 2010

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

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

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

Пример:

  1. Product product = repo.GetProducts (mySortObject, myFilterObject); // Список Poco
  2. product.AddFilter ("price", "lessThan", "3.99"); product.AddSort ("цена", "по убыванию");

Ответы [ 2 ]

2 голосов
/ 15 марта 2010

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

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

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

2 голосов
/ 15 марта 2010

Я бы лично выбрал твой первый вариант.

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...