Хорошо, чтобы вернуть Viewmodel из хранилища? - PullRequest
1 голос
/ 09 октября 2010

Давненько здесь, но это мой первый вопрос @ ит.

Сценарий: Сайт Mvc.Viewmodels для большинства страниц.Каждая модель представления содержит модели или iqueryables, полученные из разных репозиториев.

Каждый источник часто обновляется (не из лопатки сайта), поэтому даже при локальном кэшировании это будет сильно затруднено.

Проблема, с которой мы сталкиваемся, заключается в том, что, когда модель представления создается с использованием более одного репозитория, каждый из них инициирует соединение / выборку с источником данных (если им необходимо повторно заполнить).можно легко избежать, возвращая полную модель представления из хранилища.Тогда хранилище может использовать одно соединение (в большинстве случаев даже с одной хранимой процедурой sql) для извлечения всех необходимых данных.

Кто-то упомянул, что модели представления не должны участвовать в хранилищах.На самом деле я не вижу никаких проблем с этим, поэтому мой вопрос, что может быть влияние?

1 Ответ

2 голосов
/ 09 октября 2010

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

Всегда существует вероятностьметод извлечения данных представления повторяет код, который есть у вас в другом месте, и поэтому противоречит DRY, что приводит к потенциальным проблемам обслуживания позже.

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

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