1. .NET應(yīng)用如何優(yōu)雅的實現(xiàn)功能定時開關(guān)

        共 1631字,需瀏覽 4分鐘

         ·

        2020-12-04 17:21

        eabc2da18d5f429f669d092f7b496d48.webp


        導語

        我們在打工的時候,總能遇到一種類型的需求:“我想要這個活動廣告在雙11期間才顯示”,“我想要這個API在20號以后才開放”,可能你覺得這個需求沒什么難的,寫個時間判斷不就行了?但是這么做并不優(yōu)雅,如果你的系統(tǒng)里有諸如此類的其他功能也需要時間段控制,那么你的代碼將像咖喱?一樣涂滿廁所。今天分享一個優(yōu)雅的小技巧,可以不寫任何 if,動態(tài)靈活的配置功能定時開關(guān)。

        9c51ac072b9201bc0cf09d8209ebcecf.webp

        本文的內(nèi)容是對前篇《.NET 應(yīng)用如何優(yōu)雅的做功能開關(guān)》的補充。因此請先閱讀前文,了解相關(guān)庫的用法。

        FeatureFilter


        FeatureManagement 庫提供了兩種 Filter:百分比(Percentage)、時間窗口(TimeWindow)。我們這里使用的就是 TimeWindowFilter。

        配置文件

        之前我們的功能開關(guān)只是簡單的true或false。要使用Filter,需要在功能名稱下定義 EnabledFor。例如此處的 TimeWindow。

        "FeatureManagement": {

        ? "Fubao": {

        ? ? "EnabledFor": [

        ? ? ? {

        ? ? ? ? "Name": "TimeWindow",

        ? ? ? ? "Parameters": {

        ? ? ? ? ? "Start": "11/20/2020 00:00:00 GMT",

        ? ? ? ? ? "End": "11/30/2020 00:00:00 GMT"

        ? ? ? ? }

        ? ? ? }

        ? ? ]

        ? }

        }

        我定義了一個名為 Fubao 的功能,讓它在 GMT 時間 2020年11月20日到11月30日之間打開。

        依賴注入

        之前我們不使用 Filter 的時候,DI 里只要加入下面這行代碼就可以了。

        services.AddFeatureManagement();

        為了使用 Filter,我們現(xiàn)在還得加上對應(yīng)的 Filter 類型。例如此處的 TimeWindowFilter 類型。

        services.AddFeatureManagement().AddFeatureFilter();

        樣例視圖

        Feature 的用法和之前沒有區(qū)別,在視圖里仍然可以用 taghelper,例如:

        ? ?

        年輕的時候不996,什么時候可以?

        今天是11月21日,程序運行起來后,符合顯示條件。

        4a88af1b86bcffbacbc26eeeea214380.webp

        如果我們把時間段改到今天之前,福報就消失了。

        9e894ba9e2afa2933f2a2d15a5e06edc.webp

        在 Controller / Action 以及代碼里用 Feature 開關(guān)的方法見前文。

        小提示


        由于 TimeWindow 的時間屬性是 DateTimeOffset? 類型的,因此我們沒法配置具體時區(qū)(如中國 CST)的時間,必須人肉轉(zhuǎn)換為 GMT 時間才行。

        當然,如果你愿意自己996實現(xiàn)一個帶時區(qū)的 Filter,可以參考微軟開源代碼:

        https://github.com/microsoft/FeatureManagement-Dotnet/tree/main/src/Microsoft.FeatureManagement/FeatureFilters


        往期精彩回顧



        【推薦】.NET Core開發(fā)實戰(zhàn)視頻課程?★★★

        .NET Core實戰(zhàn)項目之CMS 第一章 入門篇-開篇及總體規(guī)劃

        【.NET Core微服務(wù)實戰(zhàn)-統(tǒng)一身份認證】開篇及目錄索引

        Redis基本使用及百億數(shù)據(jù)量中的使用技巧分享(附視頻地址及觀看指南)

        .NET Core中的一個接口多種實現(xiàn)的依賴注入與動態(tài)選擇看這篇就夠了

        10個小技巧助您寫出高性能的ASP.NET Core代碼

        用abp vNext快速開發(fā)Quartz.NET定時任務(wù)管理界面

        在ASP.NET Core中創(chuàng)建基于Quartz.NET托管服務(wù)輕松實現(xiàn)作業(yè)調(diào)度

        現(xiàn)身說法:實際業(yè)務(wù)出發(fā)分析百億數(shù)據(jù)量下的多表查詢優(yōu)化

        關(guān)于C#異步編程你應(yīng)該了解的幾點建議

        C#異步編程看這篇就夠了


        瀏覽 59
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 宝贝你夹的太紧了h | 精品久久天天躁免费观看一 | 91啦丨九色丨蝌蚪丨中文 | 少妇浪妇荡欲黄蓉奶汁 | 手机在线看A片 |