對於我們的.Net應用程序,我們已將許可組件集成到應用程序中。在應用程序代碼中,我們驗證許可證,並基於它,我們需要啓用/禁用某些功能。例如,如果用戶擁有試用許可證,則他們只能訪問特定的應用程序部分,而付費用戶則可以訪問任何部分。 我需要幫助確定設計,使影響最小。我不想用if..else語句散佈代碼。請與我分享一些實現此目標的最佳方法。集成許可證處理的設計選擇
回答
您是否反對使用If/Else語句來檢查啓用的功能,或者在您的主程序邏輯中專門詢問許可證系統?
我不明白如何在沒有If/Else語句的情況下禁用功能,但是如果您有一個許可證類來爲您處理所有事情,您可以保持它的整潔。
我將有一個許可證類在應用程序啓動時初始化,並且有一個public bool IsFeatureLicensed(string MethodName)
方法。
每個方法都提供一個功能,您希望通過授權保護可能有類似:
If (LicenceManager.IsFeatureLicensed(Reflection.MethodBase.GetCurrentMethod.Name)) {
//Do your stuff!
} else {
//Throw exception or show error message or something.
}
的IsFeatureLicensed方法在LicenseManager有類,您創建將看看方法名稱,並檢查查看許可證是否允許使用該方法提供的功能。它應該在所有情況下都返回True,除非許可證禁止使用該功能。
這樣,每種方法都可以對許可證管理器進行相同的調用(使維護變得非常容易),並且與授權內容相關的所有內容都封裝在一個類中。這使您可以非常輕鬆地更改許可方法(例如,您可以在開發過程中將所有內容都返回True),並且不需要觸摸其他應用程序。
一如往常,答案是replace conditional with polymorphism。
將每個特徵封裝爲Strategy,並將禁用的特徵實施爲Null Object。兩者都可以封裝在條件爲Composite中,該條件基於許可組件在兩者之間進行選擇。
舉個例子,假設你有一個打印功能封裝在一個IPrinter
接口的後面。您實現RealPrinter
類中的實際功能和NullPrinter
類中的禁用功能,都實現了IPrinter
接口。
許可檢查可在GuardedPrinter類中實現,這將是這個樣子:
public class GuardedPrinter : IPrinter
{
private readonly IPrinter realPrinter;
private readonly IPrinter nullPrinter;
// more fields and initialization omitted for brevety...
public PrintResult Print()
{
if (this.licence.IsEnabled)
{
return this.realPrinter.Print();
}
return this.nullPrinter.Print();
}
}
,也許你可以使用下面介紹.NET licx技術?
您可以事先有幾個「授權產品」每個產品有它自己的一套獨特的許可密鑰。產品A可能會解鎖功能1,2和3,而產品B只能解鎖功能1.在實例化功能1的構造函數中,您可以檢查特定的許可代碼以檢查此許可證密鑰是否對產品A有效或產品B.您可以對功能2和3執行相同的操作,只檢查與產品B有關的許可證密鑰。
檢查應該靜態完成,這樣如果驗證第一次通過,那麼如果特徵A被實例化,則永遠不應該再次檢查驗證。靜態授權管理器類可能可以處理這個問題。
在試用許可證密鑰和特定功能被禁用的情況下,我會將該試用日期嵌入到許可證密鑰中 - 因此即使許可證密鑰經過驗證,如果您看到試用日期,也會例外在構造函數級別。
- 1. jQuery許可證選擇
- 2. 處理過期的許可證?
- 3. PHP軟件的許可證選擇
- 4. -exec選項和堆棧啓動時的許可證處理
- 5. Maven插件處理許可證?
- 6. Xcode的許可證必須接受試圖選擇Xamarin代理
- 7. Swift 2.2 - 帶可選完成處理程序選擇器的NSTimer
- 8. Xamarin許可證和選擇Xamarin.Forms
- 9. 我應該選擇哪個許可證?
- 10. 彈簧集成 - 處理流水線 - 設計
- 11. 設計許可名
- 12. Akka 2.1集羣設計選擇
- 13. 收集選擇與設計(Rails 3.2)
- 14. Spring集成:處理
- 15. 驗證庫設計模式選擇
- 16. 選擇合適的許可
- 17. 處理可選字段驗證
- 18. FullCalendar,可以設置可選false,但允許選擇插槽
- 19. Java處理器 - 可以選擇什麼?
- 20. 許可證密鑰管理
- 21. 許可證管理庫
- 22. 用戶可選計劃和使用PIVOT選擇的表設計
- 23. 處理許可錯誤?
- 24. 設計師/嚮導生成的代碼屬於什麼許可證?
- 25. 哪種設計圖案可供選擇?
- 26. MailboxProcessor.PostAndReply設計選擇
- 27. Grails的處理中選擇
- 28. 選擇的onChange處理PHP
- 29. 處理許多參數和業務規則的設計模式
- 30. Spring集成異常處理