Членство в .NET с шаблоном репозитория - PullRequest
2 голосов
/ 18 сентября 2009

Моя команда находится в процессе разработки модели предметной области, которая будет скрывать различные источники данных за единой абстракцией репозитория. Одной из основных движущих сил этого подхода является очень высокая вероятность того, что эти источники данных претерпят значительные изменения в ближайшем будущем, и мы не хотим переписывать бизнес-логику, когда это произойдет. Одним из источников данных будет наша членская база данных, которая изначально была реализована с использованием стандартного поставщика членства ASP.Net. Поставщик членства привязан к пространству имен System.Web.Security, но у нас есть руководство по проектированию, требующее, чтобы наш уровень модели домена не зависел от System.Web (или любой другой зависимости реализации / среды), поскольку он будет использоваться в разных средах - мы также не хотим, чтобы наши сайты напрямую общались с базами данных.

Я думаю о том, что было бы хорошим подходом для согласования подхода MembershipProvider с нашей абстрактной n-уровневой архитектурой. Мое первоначальное чувство состоит в том, что мы можем создать «DomainMembershipProvider», который взаимодействует с моделью предметной области, а затем внедрить в модель объекты, которые имеют дело с хранилищем и обрабатывают проверочную / бизнес-логику. Затем хранилище будет осуществлять доступ к данным с помощью нашего (пока не решенного) инструмента доступа к данным ORM.

Есть ли какие-либо явные дыры в этом подходе - я не работал в тесном контакте с классом MembershipProvider, поэтому вполне может что-то упустить. В качестве альтернативы, есть ли подход, который, по вашему мнению, будет лучше отвечать требованиям, которые я описал выше?

Заранее спасибо за ваши мысли и советы.

С уважением, Zac

Ответы [ 2 ]

2 голосов
/ 21 апреля 2010

Прошло 6 месяцев с тех пор, как вопрос был задан, и, похоже, никто не смог дать ответ, поэтому я решил объяснить решение, которое мы в итоге выбрали.

По сути, мы решили не использовать какую-либо реализацию MembershipProvider - вместо этого мы используем нашу собственную Службу членства, расположенную поверх хранилища. Для нас было важно сохранить существующую базу данных aspnet_Membership, чтобы наш репозиторий в основном дублировал встроенную функциональность SQLMembershipProvider (по крайней мере, те аспекты, которые нам нужны) - первоначально через Linq-to-SQL, но теперь мы переходим к NHibernate. , План состоит в том, чтобы заменить базу данных о членстве примерно через год, когда все наши веб-сайты будут обновлены для использования новой модели.

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

В конечном счете, мы считаем, что, хотя поставщик членства является мощным и простым в использовании инструментом в ASP.Net, если он не соответствует более широкому подходу, используемому в вашем приложении, его стоит рассмотреть альтернативный подход.

0 голосов
/ 20 января 2011

Интересно, спасибо за публикацию вашего окончательного решения. Я нахожусь в аналогичной ситуации, но написание пользовательского Membershipprovider. Я не знаю, куда поставить провайдера, потому что ему нужен доступ к БД, а также к пространству имен System.Web. Кажется, что это единственный класс, который нарушает все это разделение интересов дизайна.

...