2

В последнее время я реорганизую свой проект DDD. Когда я смотрю на свой уровень репозитория. Я нашел, что возвратил IQueryable < T> в моем репозитории. Я озадачен и должен ли я вернуть IQueryable < T> из репозитория в моем проекте DDD в хранилище? Обычно я возвращаю тип IQueryable в моем проекте репозитория. Но сегодня я нашел противоположную идею от этого article Я не могу понять это!Должен ли я возвращать IQueryable <T> из репозитория в DDD

+0

Что я должен вернуться в репозиторий? – doublnt

+0

'IEnumerable' или' IReadOnlyList' кажутся более подходящими. – guillaume31

ответ

4

Если вы вернетесь IQueryable, вы разрешаете доменным знаниям утечка из уровня домена на потребительские слои. Это увеличивает риск того, что объекты вашего домена станут анемичными, и все поведение переместится на другие уровни.

Хотя это швы очень удобно возвращать IQueryable, и вы думаете, что ваш код станет проще, это просто иллюзия; когда проект будет расти, то IQueryable преобразует ваш код в большой шар грязи, причем код домена разбросано где угодно. Вы не сможете оптимизировать свой репозиторий или изменить одно постоянство на другое (т. Е. От sql до nosql).

+0

Em, и что мне следует возвращать в «Repository Layer»? И я нашел, что использование «Спецификации Patten» может быть хорошим способом. – doublnt

+0

Я не понимаю, почему этот ответ принят. – jannagy02

+0

@ jannagy02 Что ты не понимаешь, точнее? –

1

Возможно, вы не должны этого делать.

Задача репозитария не только абстрагироваться от деталей постоянства, но и для обеспечения explicit query contract определения тех, которые необходимы для процесса команды в домене.

Если вам необходимо дополнительно фильтровать/преобразовывать то, что было возвращено из вашего репозитория, то вам, скорее всего, не удалось зафиксировать явный запрос, который должен быть частью контракта хранилища.

Имея такой контракт, клиенты-клиенты могут выразить свое намерение и упростить оптимизацию.

1. В настоящее время довольно часто применять некоторые принципы CQRS и басовую модель домена полностью для запросов. Учитывая этот сценарий, единственными запросами, которые будут проходить через репозиторий, являются те, которые необходимы для обработки команд. Тем не менее, вы не вынуждены каким-либо образом использовать этот подход, чтобы ваш репозиторий мог также выполнять запросы на отчетность, если хотите.

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

  • Нет связанных вопросов^_^