Должен ли бизнес-уровень веб-сайта получить доступ к состоянию сеанса? - PullRequest
1 голос
/ 23 апреля 2009

Я работаю над поддержанием веб-сайта ASP.NET и заметил, что бизнес-уровень и другие вспомогательные библиотеки интенсивно используют HttpContext.Current.Session Это затрудняет отслеживание переменных сеанса, определение того, для чего они используются и почему они вообще существуют.

Считается ли плохой практикой использование сеанса на бизнес-уровне? И было бы разумно начать перемещать весь код, который использует сеанс, в выделенный код?

Ответы [ 6 ]

5 голосов
/ 23 апреля 2009

Это почти никогда не хорошая идея. Причин много, но вот пара:

  • вы никогда не сможете использовать код бизнес-уровня ни в чем, кроме ASP.NET
  • Юнит-тестирование становится гораздо более болезненным или даже невозможным.

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

3 голосов
/ 23 апреля 2009

Я следую этому правилу - любой класс в пространстве имен System.Web (пакет javax.servlet в Java) не должен присутствовать на вашем бизнес-уровне.

1 голос
/ 24 апреля 2009

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

1 голос
/ 23 апреля 2009

На мой взгляд, это плохая практика.

Из-за этого довольно сложно отделить бизнес-уровень от окружающей среды. Если вы ожидаете модульного тестирования, например, вам не повезло.

Один из способов позаботиться об этом просто состоит в том, чтобы пока изолировать это в абстракции, чтобы вы могли передавать «кэш состояния» и не ссылаться на HttpContext. Это приведет вас к некоторой степени абстракции. Еще один более интересный вопрос: почему бизнес-уровень должен ссылаться на это?

1 голос
/ 23 апреля 2009

делает класс косвенным, в этом случае в Интернете он может возвращать значения из HttpContext.Current.Session, а в других областях это будет разрешаться откуда-то еще. IE имеет интерфейс ISessionStore и имеет конкретные классы WebSessionStore и WindowsFormsSessionStore и т. Д.

это облегчит тестирование вашего кода, а также даст вам пути расширения, когда, скажем, вы хотите, чтобы x бизнес-логика выполнялась в службе Windows, где она может запускать x фрагмента кода каждые y минут.

1 голос
/ 23 апреля 2009

Да - БЛ не должен иметь никаких знаний о Сессии. Это зависимость, которая вам не нужна.

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