在我最后一个关于微调的问题的所有答案被证明比我预期的更有用之后,我想我也会问另一个关于 MembershipProviders 的类似问题。
好的,首先要澄清一下:我知道什么是会员、角色和个人资料提供者,如何实现我自己的,如何配置它们,以及关于它们的大部分内容。
实现角色和配置文件提供者非常简单,因为它们大多数时候只需要简单的 CRUD。(对于 RoleProvider 的大约一半方法来说,一行 LINQ 就足够了。)
但是,会员资格提供者是一个不同的野兽。你们中的许多人可能意识到它违反了 SR(单一责任)原则,因为它必须做与用户管理相关的所有事情。虽然这为自定义留下了很大的空间,但它也有其缺点。Internet 上没有关于它们的确切预期行为是什么的信息,例如它们应该何时抛出异常或简单地返回 null 等等。
我使用这个示例实现作为参考,但它也包含一些矛盾。
- 例如,它使用自己的 ValidateUser 方法检查 ChangePassword 方法中的凭据。但 ValidateUser 还将用户的 LastLoginDate 更新为当前日期。那么,框架是否希望我也将它设置在我自己的提供程序中,或者它只是示例中的一个错误?
- 另一种是:ChangePassword 方法每次验证新密码时都会抛出异常,但 CreateUser 不会抛出异常,它只是返回 false。
最后但并非最不重要的一点是:它计算用户的无效密码尝试并在超过阈值时锁定它们。虽然这很好,但它需要手动操作来解锁用户。如果我的提供商在一定时间后自动解锁用户是否有问题?
(编辑)我差点忘了:示例中的 CreateUser 方法从方法参数中插入了 ID。我实际上认为这是不好的做法,因为我使用带有自动 incement 的 inters 作为 ID,所以从某个方法参数插入它们不是一种选择。我应该忽略该参数,还是要求其值为 null 并在不是时抛出异常?
总而言之,ASP.NET 是否对 MembershipProvider 的行为有任何假设?
是否有任何文档描述了我应该何时抛出异常或只返回 null?
我还试图找到一组通用单元测试,它们可以为预期的行为提供一些指导,但没有运气,我找到了很多关于“单元测试很好”和“如何对 MembershipProvider 进行单元测试”的文章,但没有一个会有任何实际测试的地方。
提前感谢大家!