亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

一個包含動態變量的短信模板設計分析

2019-11-14 13:56:10
字體:
來源:轉載
供稿:網友

我們在日常接觸到的一些軟件界面,往往喜歡深入分析其實現機理,通過學習、分析,可以提高我們對軟件架構的分析能力,從而實現更加彈性、可重用的模塊。在無意間,看到一個短信模塊的設計,模板里面可以包含了很多變量,從而引發我對其深入分析的興趣,本文主要介紹我對這些實現的一些理解,介紹一個包含動態變量的短信模板的設計分析。

1、短信模板的效果介紹

如下圖所示,上面包含了短信模板的列表信息,以及對具體模板的內容設計,可以在其中插入變量的處理。

如果是硬編碼對個別的實現應該很容易,如果我們考慮可擴展性、重用性等因素,需要進行彈性的設計,那么就需要尋找好的思路來動態處理這些變量了。

如它的每個模板的變量都是可以不同的,如其中一個模板有如下變量可以插入到模板內容里面,變量本身用左右的括弧{}進行標識,還是很有規律的。

2、短信模板的設計分析

由于模板是針對某個企業的,企業可能根據需要進行一定的調整,模板可以恢復為最初的版本,因此我們可以考慮設計兩個部分,一個部分是基礎模板,一個部分是對企業的消息模板,前者不變,后者可以根據需要修改,如無修改保存的,則采用對應的基礎模板,也就是模板的模板了。

由于模板是包含有不同變量的,因此我們需要在設計的時候,動態解析這些變量。我們如果能夠把傳入的對象動態獲取它的屬性,并給對應的變量賦值,應該就可以實現這個功能。

那么我們就需要通過反射方式,動態獲取對應object對象的各種屬性名稱和值了,這個處理操作如下所示。

        /// <summary>        /// 把object對象的屬性反射獲取到字典列表中        /// </summary>        /// <param name="data">object對象</param>        /// <returns></returns>        public static Dictionary<string, string> GetPRoperties(object data)        {            Dictionary<string, string> dict = new Dictionary<string, string>();            Type type = data.GetType();            string[] propertyNames = type.GetProperties().Select(p => p.Name).ToArray();            foreach (var prop in propertyNames)            {                object propValue = type.GetProperty(prop).GetValue(data, null);                string value = (propValue != null) ? propValue.ToString() : "";                if(!dict.ContainsKey(prop))                {                    dict.Add(prop, value);                }            }            return dict;        }    

前面介紹了,模板的內容,是包含有左右括弧{}的變量的,因此我們可以通過正則表達式,把它們提取出來備用,這樣我們就可以把前面反射對應屬性的值賦值給模板內容,從而形成新的待發送的具體消息了。

            var regex = @"/{(?<name>.*?)/}";            List<string> itemList = GetList(template, regex, "name");

其中GetList就是一個正則表達式獲取對應正則內容的函數,函數代碼如下所示。

        /// <summary>        /// 多個匹配內容        /// </summary>        /// <param name="sInput">輸入內容</param>        /// <param name="sRegex">表達式字符串</param>        /// <param name="sGroupName">分組名, ""代表不分組</param>        public static List<string> GetList(string sInput, string sRegex, string sGroupName)        {            List<string> list = new List<string>();            Regex re = new Regex(sRegex, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline);            MatchCollection mcs = re.Matches(sInput);            foreach (Match mc in mcs)            {                if (sGroupName != "")                {                    list.Add(mc.Groups[sGroupName].Value);                }                else                {                    list.Add(mc.Value);                }            }            return list;        }

最后我們可以把內容對應上,給模板替換為最新的屬性值了。

        private void button1_Click(object sender, EventArgs e)        {            //模板文本            var template = "姓名 = {姓名}, 性別 = {性別}, 卡號 = {卡號}, 公司 = {公司}";            //數據對象            var data = new { 姓名 = "伍華聰", 性別 = "", 卡號 = "10000", 公司 = "廣州愛奇迪軟件科技有限公司" };            ReplaceTemplate(template, data);        }        private void ReplaceTemplate(string template, object data)        {            var regex = @"/{(?<name>.*?)/}";            List<string> itemList = GetList(template, regex, "name");                            Console.WriteLine("列出模板變量對象:");            foreach(string item in itemList)            {                Console.WriteLine(item);            }            Dictionary<string, string> dict = GetProperties(data);            foreach(string item in itemList)            {                //如果屬性存在,則替換模板,并修改模板值                if(dict.ContainsKey(item))                {                    template = Replace(template, regex, dict.Values.ToList());//替換第一個                }            }            Console.WriteLine(template);        }

測試上面的代碼,我們注意到我們的對象是動態構建的,也就是使用匿名類的方式構建一個類,包含有對應的屬性值,把這個給模板進行解析,從而賦值形成真正的消息內容的。

var data = new { 姓名 = "伍華聰", 性別 = "", 卡號 = "10000", 公司 = "廣州愛奇迪軟件科技有限公司" };

測試案例,我們可以得到的消息,如下所示。

我們從上面截圖可以看到,真正的消息已經正確得到,這些是替換具體的模板內容形成的,如果我們在整體的模板設計里面,采用這個思路,就可以實現動態的模板消息發送,從而實現了比較彈性化的設計處理。

本文只是對模板變量這種場景進行了分析,我們在實際項目中,可以更加完善,實現更加強大的模板消息處理,以及利用微信模板消息進行一起發送,實現短信、微信,甚至郵件的同步通知,給客戶更好的體驗。

 

以上是微信的模板消息介紹,我們也可以結合動態變量,把對應模板消息替換為我們要發送的消息,從而也實現了微信消息的動態發送。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品视频免费| 久久久精品在线| 久久天天躁狠狠躁夜夜av| 成人欧美在线视频| 中文字幕日韩视频| 亲子乱一区二区三区电影| 国产欧美日韩视频| 欧美日韩xxx| 91伊人影院在线播放| 91精品视频在线看| 中文精品99久久国产香蕉| 国产美女被下药99| 亚洲欧美国内爽妇网| 91精品久久久久久久久久久久久久| 亚洲欧美一区二区精品久久久| 神马国产精品影院av| 色偷偷噜噜噜亚洲男人| 日韩在线免费高清视频| 97超级碰碰碰| 亚洲成人av片在线观看| 亚洲自拍av在线| 日韩免费不卡av| 久久久999国产精品| 久久人人爽人人爽爽久久| 久久免费视频这里只有精品| 亚洲老司机av| 亚洲一区二区三区sesese| 成人淫片在线看| 国产欧美va欧美va香蕉在线| 亚洲xxxx视频| 另类色图亚洲色图| 亚洲日本中文字幕| 久久中文字幕一区| 日韩福利在线播放| 国产在线98福利播放视频| 国产成人久久久| 在线观看精品自拍私拍| 国产欧美va欧美va香蕉在| 久久久精品久久久| 日韩精品极品在线观看播放免费视频| 亚洲xxxxx| 精品免费在线观看| 色综久久综合桃花网| 亚洲欧美成人一区二区在线电影| 国产噜噜噜噜久久久久久久久| 精品久久久久久久久国产字幕| 欧美性高潮在线| 最好看的2019的中文字幕视频| 亚洲精品电影久久久| 国产精品久久久久久久久久久新郎| 91久久国产精品| 日韩电影中文字幕一区| 欧美高清在线观看| 亚洲精品电影网在线观看| 中文字幕久久久av一区| 欧美中文字幕在线视频| 久久久精品在线观看| 欧美一级电影久久| 97国产在线观看| 中文在线资源观看视频网站免费不卡| 3344国产精品免费看| 久热爱精品视频线路一| 97av在线视频免费播放| 精品久久久久久久久久久久久久| 国产精品白丝jk喷水视频一区| 日韩天堂在线视频| 日韩精品高清在线观看| 欧美性xxxx| 亚洲最大激情中文字幕| 美女撒尿一区二区三区| 亚洲一区美女视频在线观看免费| 欧美在线免费视频| 亚洲乱码av中文一区二区| 国产精品揄拍500视频| 成人激情在线播放| 色婷婷久久一区二区| 久久久精品一区二区| 日韩av免费在线播放| 91精品国产乱码久久久久久久久| 91久久精品美女| 日韩av手机在线观看| 日韩在线视频国产| 亚洲视频在线观看视频| 久久久久成人精品| 久久久亚洲网站| 国产精品啪视频| 成人免费看吃奶视频网站| 亚洲一区二区福利| 亚洲国产成人精品女人久久久| 久久综合88中文色鬼| 国产精品久久久久影院日本| 午夜精品国产精品大乳美女| 97国产精品视频人人做人人爱| 欧美尤物巨大精品爽| 少妇激情综合网| 精品亚洲精品福利线在观看| 性欧美视频videos6一9| 亚洲精品电影在线观看| 欧美福利视频在线观看| 亚洲最大福利网站| 精品综合久久久久久97| 国产精品激情自拍| 日韩视频免费中文字幕| 日韩精品欧美国产精品忘忧草| 欧美一级黄色网| 高跟丝袜一区二区三区| 国产精品91在线| 欧美中文字幕视频在线观看| 亚洲天堂视频在线观看| 亚洲第一天堂无码专区| 成人有码视频在线播放| 91精品国产91久久久久久吃药| 国产欧美一区二区| 欧美日韩在线免费| 日韩精品在线播放| 亚洲精品之草原avav久久| 日韩在线中文字幕| 日韩av在线精品| 欧美精品videofree1080p| 亚洲日本欧美日韩高观看| 国产午夜精品美女视频明星a级| 国产精品久久久久久久久免费看| 亚洲v日韩v综合v精品v| 国产91精品最新在线播放| 中文字幕亚洲欧美| 欧美成人精品三级在线观看| 亚洲成色777777在线观看影院| 国产91亚洲精品| 欧美精品免费播放| 欧美极品第一页| 午夜精品蜜臀一区二区三区免费| 深夜福利91大全| 国产97免费视| 久久国产精品电影| 精品中文字幕在线2019| 亚洲精品中文字幕女同| 欧美巨大黑人极品精男| 国产日韩中文在线| 日韩高清人体午夜| 亚洲精品乱码久久久久久金桔影视| 欧美精品制服第一页| 亚洲最新中文字幕| 日韩视频免费在线| 精品国产欧美一区二区三区成人| 欧美成人第一页| 日韩三级影视基地| 亚洲综合中文字幕在线观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美日韩亚洲精品一区二区三区| 国产精品入口日韩视频大尺度| 亚洲国产精品人久久电影| 91产国在线观看动作片喷水| 日韩高清av在线| 亚洲精品成人免费| 亚洲欧美国产日韩天堂区| 国产69久久精品成人| 91精品国产99| 日韩精品在线第一页| 欧美丰满少妇xxxx| 国产欧美日韩中文字幕| 日本高清不卡的在线| 日韩中文在线中文网在线观看| 亚洲欧洲国产伦综合| 久久久久久久国产精品视频|