Я унаследовал веб-решение asp.net, которое имеет бизнес-логику и вызовы данных в виде отдельных сборок. На бизнес-уровне существует небольшое количество вызовов для получения/установки значений сеанса HttpContext. Я рассмотрел пример, который позволит мне отвлечь его от бизнес-логики, поскольку я хотел бы использовать эти сборки в проектах, не связанных с веб-сайтами, может кто-нибудь, пожалуйста, привести пример наилучшего способа сделай это. Я думал о какой-то фабрике сеансов, которая будет получать значения из какого-то постоянного хранилища в зависимости от сценария использования, но я новичок в архитектуре и ценю указатель или два.Удаление вызовов сеанса ASP.net из бизнес-логики
ответ
В каком бизнесе имеется бизнес-уровень с сеансом? Чтобы понять это утверждение немного больше, подумайте об этом так: Почему бизнес-уровень должен постоянно сохранять информацию о пользователях?
Бизнес слой должен работы с и процесса связанных пользовательских данных, но не магазин его. Это означает, что данные, которые в настоящее время хранятся, должны быть введены, то есть они должны передаваться в качестве параметра для функций, которые в ней нуждаются. Выполнение этого способа заключается в формировании архитектурного контракта, он говорит «эй, мне нужна эта информация для пользователя, чтобы выполнять свою работу» очень явным образом - вы не выполняете какую-либо магию под капотом с некоторыми случайными ранее сохраненными значениями. Для бизнес-уровня отлично подходит для аутентификации или авторизации пользователя каким-либо образом с использованием этих данных, но он должен отказаться от результатов проверки подлинности после их завершения. Если значения сохраняются, чтобы сохранить вызов или два в базе данных, тогда у вас есть проблема с эффективностью вызовов в базе данных, потому что база данных требует простых вещей, таких как быстрая.
Таким образом, мое предложение состоит в том, чтобы удалить любые ссылки на сеанс из вашего бизнес-уровня и изменить сигнатуры функций, чтобы включить данные пользователя, которые вам нужно передать.
При отражении вы правы, я не хочу сохранять значения в этом слое, я просто хочу, чтобы слой мог использовать данные, которые в настоящее время сохраняются в сеансе. В этом случае список Guid, сохраненный в сеансе, непосредственно отражается в базе данных, поэтому я могу получить его оттуда, если это необходимо. Я предполагаю, что я действительно хотел передать запрос на эти данные третьей стороне (фабрике сеансов), которая вернет мне список из наиболее подходящего места, которое, я думаю, будет сеансом при вызове из пользовательского интерфейса и базы данных если не. –
Awesome ... я не против голосов, где это оправдано, но я бы ЛЮБЛЮ, чтобы быть образованным по моим ошибкам от человека, который проголосовал за это.Я не пропущу 2 пункта, это просто принципиальный вопрос. – slugster
Самый простой способ, на мой взгляд, создать интерфейс ISessionProvider
, с Dictionary<string, object> {get; }
. Затем создайте public class HttpSessionProvider : ISessionProvider
, который возвращает фактическое содержимое пакета сеанса.
По крайней мере, создайте экземпляр этого объекта в своем веб-приложении и передайте его в базовый класс, указав его вручную или используя любой шаблон IOC.
[Изменить] после небольшого отражения, это не чистый способ. У вас не будет зависимости от фреймворка asp.net, но вы все равно получите доступ к содержимому «asp.net» сеанса. В этом случае, сохранить интерфейс, но либо добавить особые свойства (строка клиента, внутр USERID и т.д.) или возвращает словарь только с фактическими бизнес-данными
я сделал что-то вроде этого на некоторых проектах:
public interface IAppContext {
string SomeVariable {
set;
get;
}
}
public class HttpContextAppContext : IAppContext {
public static readonly string CONTEXT_PREFIX = "appcontext_";
public string SomeVariable {
set { HttpContext.Current.Session[CONTEXT_PREFIX + "SomeVariable"] = value; }
get { return (string)HttpContext.Current.Session[CONTEXT_PREFIX + "SomeVariable"]; }
}
}
- 1. asp.net - отменить удаление сеанса
- 2. Завершение или удаление сеанса Asp.net
- 3. Сохранение сеанса ASP.Net во время вызовов Ajax
- 4. Удаление элементов из сеанса
- 5. asp.net - удаление объекта кеша на конец сеанса
- 6. Удаление/отказ от сервера состояния сеанса ASP.NET
- 7. удаление атрибута сеанса из jsp
- 8. удаление идентификатора сеанса из завихрения
- 9. Удаление сеанса
- 10. Мгновенный запуск сеанса ASP.NET из cookie сеанса
- 11. удаление журнала вызовов из числа mulit?
- 12. Удаление журнала вызовов из А число
- 13. Поведение сеанса сеанса ASP.NET
- 14. ASP.NET удаляет элемент из сеанса?
- 15. Удаление бобов с сеанса
- 16. Устранение некоторых вызовов сеанса Django
- 17. Удаление из объекта репитера ASP.NET - ошибочное удаление ...?
- 18. Удаление одного элемента из корзины сеанса PHP
- 19. удаление переменных массива сеанса из цикла Еогеасп
- 20. Удаление сеанса после выхода из системы
- 21. Удаление сеанса весной Безопасность
- 22. Как выйти из сеанса siteminder из ASP.NET
- 23. Сервер сеанса сеанса ASP.NET против сеанса InProc
- 24. Удаление страницы ASP.NET из кеша
- 25. Asp.net удаление записей asp.net
- 26. Предотвращение перекрытия вызовов службы из приложения ASP.NET при обновлении сеанса службы
- 27. Передача вызовов между FreeSWITCH и Менеджер сеанса
- 28. Несколько асинхронных вызовов для сеанса с состоянием
- 29. Переменная сеанса Asp.net
- 30. Невозможно установить переменные сеанса из обратных вызовов дочерних процессов
Какие значения хранятся в состоянии сеанса? –
Сейчас просто сложный тип, содержащий данные пользователя и их разрешения на данные в виде списка Guid. –