Что вы делаете, если вам нужно создать список данных только для чтения на странице, и эти данные, естественно, будут поступать из нескольких, возможно 5 или более разных репозиториев?
Мы используем DDD и форсируем доступ к нашей базе данных через репозитории, но есть сценарий, который не соответствует DDD, и мы пытаемся выбрать оптимальный шаблон для использования.
Например, допустим, у вас есть веб-сайт сообщества с видео, форумами, блогами и т. Д. У вас есть страница форумов со списком комментариев. Это грубо, но я надеюсь, что это имеет смысл.
<table>
<tr><td>User Name (with possible link)</td><td>User's community score.</td><td>User Avatar</td><td>User's E-mail</td><td>User's blog</td><td>User's videos</td></tr>
</table>
<table>
<tr><td>This is a comment.</td></tr>
</table>
Таким образом, каждый комментарий состоит из нескольких частей: имя пользователя, оценка сообщества, аватар, электронная почта, блог пользователя и страница видео пользователя. Традиционно все эти фрагменты информации поступают из отдельных репозиториев.
Проблема заключается в эффективности. Хранилища могут быть развернуты максимально, но только вокруг совокупности, для которой они созданы. Использование репозиториев становится неэффективным для доступа для чтения в тот момент, когда вам нужен доступ к данным, которые находятся в более чем одном репозитории.
Мое решение состоит в том, чтобы создать DTO UserInformation с соответствующей информацией и поместить метод в репозиторий UserForums с подписью
ILIst<UserInformation> GetUserForumsUserInformationByForumPostID(int forumPostID).
Один из моих коллег считает, что использование DTO таким образом нарушает используемый нами шаблон проектирования, и предлагает, что лучшим способом было бы получить список идентификаторов комментариев на форуме и затем передать эти идентификаторы в различные репозитории. вернуть результаты.
Мое собственное мнение состоит в том, что главная цель репозиториев - инкапсулировать бизнес-логику, которая важна для CUD-частей CRUD, но списки только для чтения должны создаваться таким образом, который наиболее целесообразен. Если уместно, я думаю, что даже имеет смысл полностью удалить методы списка, доступные только для чтения, из хранилища (например, в обычном виджете, который используется на страницах разных типов).
Как вы справляетесь с этой ситуацией?