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

m-r Tarakanoff 2011 M01 20
3228
3
0
0

Да, это клевая штука (я использую http://unity.codeplex.com/ в составе Microsoft Enterprise Library) для упрощения кода, уменьшения связности и грамотного тестирования частей веб-приложения. При...

Да, это клевая штука (я использую http://unity.codeplex.com/ в составе Microsoft Enterprise Library) для упрощения кода, уменьшения связности и грамотного тестирования частей веб-приложения.

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

Сохранение куда? Ответов на "кудаканье" много. Это может быть и контекст текущего запроса и сессия и те же самые кукисы и можно даже обратно в базу (наверное изврат, но кто знает...).

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

Можно ли такой класс протестировать не в контексте веб-приложения? Хрен. Потому что нет ни контекста запроса ни сессии. А надо ли так тестировать, вне веб-приложения?

В исходном коде проекта OXITE, обнаружилась любопытная штука. Там реализовали-таки полностью абстрагированный от контекста запроса и сессии класс. Используя IoC-контейнер. Кратко, в контейнере регистрировался не экземпляр класса пользователя, а метод его получения. А метод получения, брал экземпляр класса пользователя из контекста запроса.

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

А вот безопасно ли доверять IoC-контейнеру, экземпляр класса пользователя (или метод его извлечения из контекста или сессии)? Хрен знает. Я пока не доверяю и переписал код в проекте. Несмотря на то, что это сделано разработчиками из Microsoft. :)

 

Microsoft Enterprise Library

Оцените пост

-4

Комментарии

0
Мы сделали провайдер с формс авторизации в АД и забыли что где хранить.
-4
Спасибо. У меня другая база (SQLite, MySQL), т.е. будет нестандартный провайдер. Потом всё равно придется переписывать класс MembershipUser под свой формат (пользователя). И в третьих, как передаёте пользователя в другие классы, если возникает такая необходимость?
Показать комментарии
Дальше