Хорошо, сначала прежде чем кто-либо попытается сделать вывод, что это "дублирующий" вопрос; Я рассмотрел большинство сообщений о SO по поводу похожих вопросов, но даже в сочетании всего, что было сказано, я все еще несколько дилемма относительно окончательного или, может быть, я должен сказать единодушное согласие по этому вопросу.
Я могу сказать, что у меня (на основе сообщений) окончательно определено, что ответ основан на объеме требования. Но даже с учетом этого мнения кажутся слишком разнообразными для меня, чтобы принять решение о том, как я должен справиться с этим.
Мое непосредственное требование состоит в том, что мне нужно перенести переменные данные из 1 контроллера во многие виды. Более конкретно, у меня есть контроллер и соответствующее представление, которое обрабатывает количество элементов корзины покупок, и я хотел бы сохранить эти данные в нескольких представлениях. Я думаю, что просмотр _layout является наиболее логичным выбором для этого.
Теперь я успешно выполнил эту задачу, присвоив значение переменной Session, которая извлекается из моего представления _layout; поэтому даже когда пользователь должен был перемещаться по любому месту внутри сайта, количество элементов в корзине покупок будет сохраняться до тех пор, пока они не покинут сайт или не проведут проверку; в этом случае переменная будет очищена в коде.
Посты, которые я прочитал, кажутся предвзятыми, чтобы либо держаться подальше от переменных Session в пользу Cookies, и хранить данные в базе данных; или заявив, что для цели, для которой я предлагаю их использовать, переменные сеанса отлично подходят для использования.
Другое, что я прочитал, предполагает, что переменные сеанса могут потенциально препятствовать общей производительности, если на сайте существует высокий трафик, поскольку информация хранится на сервере.
Я лично не могу оправдать сохранение этого типа информации в базе данных и последующее попадание в базу данных, поскольку я предполагаю, что это также может повлиять на производительность сайта и, похоже, немного пережитку для хранения временных данных. TempData, ViewData и ViewBag не работают с сохранением данных, поэтому они не являются логическим выбором для требования IMO.
Если есть другая хорошо подходящая альтернатива переменной Session (которая работает для меня), я хотел бы знать, что это такое.
2 сообщения, которые кажутся противоречивыми в усилиях по предоставлению лучших рекомендаций, оставляют меня немного смущенным.
Кажется, что этот вопрос (хотя и представленный во многих разных вариантах) не имеет окончательного ответа, который я могу заключить.
Если есть более предпочтительный способ сделать это без излишнего, то это ответ, который я ищу.
Я где-то читал использование фильтров MVC в тандеме с секцией запуска приложения Global.ascx, но это не похоже на переменные, установленные на уровне контроллера, насколько это возможно, статические переменные.
Может кто-нибудь может сквош (из-за отсутствия лучшего слова) много разных мнений по этой теме и, возможно, дать более окончательный ответ на вопрос? Я уверен, что разные мнения имеют свое место, и я не пытаюсь их дискредитировать. Но иметь окончательный и, возможно, единодушный ответ был бы лучше; затем я мог бы сортировать другие сообщения, чтобы определить, что лучше для моего приложения.
Конечно, если этот вопрос не имеет окончательного ответа; просто скажите мне это, и я попытаюсь извлечь свой собственный ответ из других сообщений.
Спасибо
=============================================== ============
ОБНОВЛЕННЫЙ ОТВЕТ НА ПРЕДОСТАВЛЯЕМЫЕ ОТВЕТЫ
Кэширование и куки файлы, по-видимому, являются основным предпочтением ответов, но я также отметил утверждение, что кеширование его не является идеальным кандидатом для использования на нескольких веб-серверах, потому что синхронизация может быть потенциальной проблемой.
Предоставляя кредит Тиму, он заявил, что хранилище базы данных оптимизировано, и пользователи имеют возможность вернуться позже и продолжить, где они остановились.
Это превосходный момент, но сохранение дальновидности вероятностей; вероятно, разумно, учитывая, что некоторые пользователи не могут вернуться, оставляя ненужные данные в базе данных.
Поэтому сохранение оптимизированной и чистой БД (что "для меня" имеет равную значимость) потребовало бы выполнения задачи обслуживания автоматически истекать эти записи на основе установленного порога времени для учета этих обстоятельств. Хотя задача обслуживания не является неоспоримым вариантом, я все же думаю, что это добавляет немного больше работы для задачи просто для намеренной цели использования в качестве временного хранилища.
Тем не менее, я уважаю рекомендацию Тима и считаю, что она заслуживает заслуги в том, что касается моего первоначального мнения; что база данных не будет являться жизнеспособным вариантом для хранения временных данных; поэтому я считаю, что компромисс должен состоять в том, чтобы хранить данные в базе данных (учитывая сценарий корзины покупок или аналогичный), возможно, после проверки. Таким образом, как вы ранее заявляли, данные могут постоянно отслеживаться при последующих посещениях, поэтому у вас есть запись транзакций. Но что более важно, именно данные этих транзакций имеют реальную актуальность для сохранения базы данных.
Было также указано, что хотя сессия быстрее, чем база данных; но, несмотря на его оговорки, которые в какой-то степени могут быть смягчены другими механизмами, такими как использование атрибута SessionStateBehavior, просто служит в качестве одного примера.
НО... Я думаю, что Эрик подобрал точку с эффектом Даннинга-Крюгера. Хотя, из содержания и объяснений предлагаемых ответов, приведенных здесь; Я серьезно сомневаюсь, что опыт любого из тех, кто отреагировал, в какой-то степени сомнительный. Тем не менее, я склонен согласиться с фактом получения единодушного мнения, может быть несколько более обоснованным, чем ожидалось с моей стороны.
То, что я более конкретно искал, было общим консенсусом в отношении метода, который бы удобно размещал разнообразное количество сценариев. Другими словами, что-то, что вмешивается не только в мой конкретный сценарий, но также обеспечивает элемент масштабируемости в более крупных средах с потенциально более тяжелым трафиком. Таким образом, изменение программирования будет либо полностью смягчено, либо минимально в лучшем случае.
=============================================== ===
Резюме на основе отзывов:
-
Сессионные переменные, по-видимому, вмещают более мелкие сценарии и, когда это применимо, но они имеют некоторый потенциал для сохраняющихся проблем среди других заметных расхождений, как это было очень точно указано Эриком. Таким образом, этот параметр, очевидно, не будет соответствовать масштабируемой модели.
-
Кэширование предпочтительнее по сравнению с переменными сеанса, но опять же не обязательно является "лучшим" масштабируемым параметром из-за, среди прочего, возможных сложностей синхронизации в средах фермы веб-серверов, как указывалось ранее. Но, тем не менее, вариант.
-
Хранилище базы данных является масштабируемым, но с целью назначения временного энергозависимого хранилища, вероятно, не самый элегантный вариант с точки зрения базы данных, поскольку это потребует периодической очистки. Лично, имея прочную основу в концепциях базы данных ранее в моей карьере, это, вероятно, не будет тем, с чем, вероятно, согласятся многие разработчики; но использование базы данных для этой цели может быть достаточным для веб-разработки с точки зрения программистов; однако с точки зрения развития DAL и БД это (для меня) имеет потенциал для мандата дополнительной задачи БД для обеспечения эффективного бэкэнд.
-
Файлы cookie кажутся хорошим вариантом с комбинированными "желательными" элементами переменных сеанса и кэширования.
=============================================== ===
ЗАКЛЮЧЕНИЕ
Основываясь на ответах; Я думаю, что COOKIES и CACHING, по-видимому, обычно представляют собой хорошо продуманные предложения по наилучшей практике по всем направлениям в сочетании с хранением базы данных, когда после этого требуется постоянное сохранение; как потенциально хорошие кандидаты на масштабируемость представленных.
Окончательный выбор между 2, по-видимому, будет основываться на количестве и типе данных, требующих хранения (например, чувствительных и нечувствительных и независимо от того, есть ли какая-либо проблема, что клиент может изменить данные на их конце); в дополнение к специальным соображениям для COOKIES в том, что они могут быть отключены клиентами.
Очевидно, что ни один из них не подходит для всех решений, как это четко указано и завершено из полученных ответов, а с точки зрения масштабируемости; Возможно, я ошибаюсь, но они кажутся лучшими.
Потому что все ответы хороши; Я честно оцениваю все должности как полезные и собираюсь принять ответ Эрика как хорошо округленное общее масштабируемое решение. Хотелось бы, чтобы я мог выбрать более чем один принятый ответ, так как, по-моему, ответ Тима был очень хорошо выложен и лаконичен.
Ответ Гупты тоже хорош, но я хотел более подробно изложить предложенный ответ, а не повторять предыдущие сообщения.
Спасибо, ребята!