我的团队在设计,这将隐藏一个统一的存储库抽象背后各种不同的数据源的域模型的过程。一个这种方法主要驱动因素是非常高的概率,这些数据源将发生在不久的将来显著的变化,我们不希望被重新编写业务逻辑,当发生这种情况。一个数据源将其使用默认ASP.Net成员资格提供最初实现了我们的会员数据库。成员资格提供程序是联系在一起的System.Web.Security命名空间,但我们有一个设计准则要求我们的域模型层不依赖于System.Web程序(或任何其他执行/环境具有依赖性),因为它会在不同的环境中消耗 - 我们也不希望我们的网站直接与数据库进行通信。

我正在考虑这将是一个很好的方法来协调我们的抽象n层架构的MembershipProvider方法。我最初的感觉是,我们可以创建一个“DomainMembershipProvider”,这与域模型交互,然后实现在模型,应对资源库对象和处理验证/业务逻辑。然后,将存储库将使用我们的(如-尚未确定)ORM /数据存取工具实现的数据访问。

是否有这种方法的任何明显的缺陷 - 我还没有MembershipProvider类这样可能失去了一些东西密切合作。另外,有没有你觉得会更好地服务于我上述要求的做法?

在此先感谢您的想法和建议。

此致 扎克

有帮助吗?

解决方案

它已有6个月以来的有人问,没有人似乎已经能够提供一个答案,所以我想我会解释,我们最终还是选择了解决方案。

基本上,我们决定不使用的MembershipProvider的任何实现 - 而不是我们用自己的定制会员服务坐在仓库顶上。我们维持现有aspnet_Membership数据库,以便我们的资料库已基本复制是很重要的内置功能SqlMembershipProvider的(至少,这些方面我们需要的话) - 首先通过LINQ到SQL,但现在我们正在过渡到NHibernate的。该计划是更换会员数据库在一年左右的时候我们所有的网站都升级为使用新的模型。

这是可以使用自定义的成员提供,但最终很明显,这是更简单,更一致,更易于维护使用自定义实现。我们仍在使用内置的表单认证功能,用于验证用户在和谁试图访问我们网站的安全区域,而无需首先验证重定向用户登录 - 但我们已经覆盖被绑定到配置文件提供的功能

最后,我们对这个感受是,尽管会员供应商是中ASP.Net一个功能强大且易于使用的工具,如果它不适合与应用程序中使用的更广泛的方法,这是值得考虑的替代的方法。

其他提示

有趣的,感谢您的发布最终的解决方案。我在一个类似的情况,但编写自定义的MembershipProvider。我不知道在哪里把供应商,因为它需要访问数据库以及的System.Web命名。好像它是一个类违反这整个的关注设计的分离。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top