Могу ли я использовать шаблоны, такие как карта идентификации, в среде без состояния
Szenario:
Я прочитал книгу Р EAA Мартина Фаулера и наткнулся на шаблон под названием Identity Map. Я думал об использовании этого шаблона в приложении ASP.NET MVC.
Вопрос:
Насколько я знаю, жизненный цикл запроса ASP.NET MVC всегда убивает все объекты после обработки запроса, что означает, что мой уровень домена / слой отображения (содержащий мою карту идентичности) также будет очищен. Как я могу использовать этот шаблон (см. Ниже) в среде без состояния, такой как ASP.NET MVC? Имеет ли это смысл в среде без гражданства? Могу ли я сделать статическую карту идентичности и ввести идентификатор сеанса для восстановления уже загруженных объектов?
Идентификационная карта:
Гарантирует, что каждый объект загружается только один раз, сохраняя каждый загруженный объект на карте. Поиск объектов с использованием карты при обращении к ним. Мартин Фаулер
1 ответ
Карты идентичности используются для реализации кэша первого уровня во многих объектно-ориентированных сопоставителях. Если в вашем стеке приложений используется Entity Framework или nHibernate (или еще один orm), скорее всего, у вас уже есть карта идентичности. Но это то, что вы, наверное, уже знаете.
Вопрос о том, может ли карта идентичности быть статичной, не имеет однозначного ответа, и я, вероятно, мог бы представить ситуацию, когда она могла бы работать, но недостатки были серьезными:
- кеш не сможет легко увидеть какие-либо внешние изменения
- потребление памяти будет расти без контроля
- могут возникнуть проблемы с параллелизмом
Реализация карты идентичности, которая была бы свободна от всех этих проблем, вероятно, была бы излишней трудной. Просто безопаснее и дешевле ограничить время жизни карты одним запросом. Обратите внимание, что он по-прежнему выполняет свою работу - если запрос включает в себя несколько чтений, карта идентификации обслуживает данные, а не базу данных, когда это применимо.