在我最後的question about fine-tuning的所有答案都證明比我預期的更有用之後,我想我會問另一個關於MembershipProviders的類似問題。如何微調會員供應商?
好的,首先澄清一下:我知道什麼是會員,角色和配置文件提供程序,如何實現我自己的,如何配置它們以及關於它們的大部分事情。
實現角色和配置文件提供程序非常簡單,因爲它們大多數時間只需要簡單的CRUD。 (一行LINQ對於RoleProvider方法的大約一半是足夠的。)
但是,成員資格提供者是一個不同的野獸。你們中的許多人可能會意識到它違反了SR(單一責任)原則,因爲它必須做與用戶管理有關的所有事情。雖然這爲定製留下了很大空間,但它也有其不足之處。 互聯網上沒有關於他們的EXACT預期行爲的信息,比如他們什麼時候應該拋出異常或者簡單地返回null以及類似的東西。
我用this sample implementation作爲參考,但它也包含了幾個矛盾。
- 例如,它使用自己的ValidateUser方法來檢查ChangePassword方法中的憑據。但是ValidateUser也會將用戶的LastLoginDate更新爲當前日期。那麼,框架是否期望我也將其設置在自己的提供者中,還是僅僅是樣本中的錯誤?
- 另一種是:每次驗證新密碼時,ChangePassword方法都會引發異常,但CreateUser不會引發異常,它只會返回false。
最後但並非最不重要的一點是:它計算用戶的無效密碼嘗試次數,並在通過閾值時鎖定它們。雖然這很好,但它需要手動操作來解鎖用戶。如果我的提供商在一段時間後自動解鎖用戶,這是否是一個問題?
(編輯)我幾乎忘了:示例中的CreateUser方法從方法參數插入ID。實際上,我認爲這是不好的做法,因爲我將自動入門與inters用作ID,所以從某些方法參數插入它們不是一種選擇。我應該忽略這個參數,還是要求它的值爲null,如果不是,則拋出異常?
總而言之,ASP.NET是否對MembershipProvider的行爲有任何假設?
是否有任何文檔描述應該何時拋出異常或僅返回null?我還試圖找到一組通用的單元測試,它將提供一些有關預期行爲的指導,但沒有運氣,我發現大量關於「單元測試是好的」的文章,以及「如何單元測試MembershipProvider 「,但沒有一個會有任何實際測試。
在此先感謝大家!
+1。感謝您的回答。但是,你忽略了最重要的部分。我應該在哪些方法中拋出異常,並且應該在哪些方法中返回false(或者在適用的情況下返回null)? – Venemo 2010-04-30 17:29:45
@Venemo - 我更新了答案,爲您提供了您所要求的「正式」指導以及主觀指導。 – 2010-05-01 05:51:27
非常感謝,這正是我一直在尋找的。 :)我不知道MSDN有這樣一個明確的指南。 (哦,如果你不介意,我會在你的博客上與你聯繫。) – Venemo 2010-05-01 11:56:41