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

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

從零開始編寫自己的C#框架(14)——T4模板在邏輯層中的應用(三)

2019-11-17 01:34:08
字體:
來源:轉載
供稿:網友

從零開始編寫自己的C#框架(14)——T4模板在邏輯層中的應用(三)

  原本關于T4模板原想分5個章節詳細解說的,不過因為最近比較忙,也不想將整個系列時間拉得太長,所以就將它們整合在一塊了,可能會有很多細節沒有講到,希望大家自己對著代碼與模板去研究。

  本章代碼量會比較大,基本將Web層要使用到的大部分函數都用模板生成了出來,而模板中的函數,很多也是互相關聯調用的。另外在DotNet.Utilities(公共函數項目)中也添加與修改了一些類和函數。

  需要特別說明的是,在邏輯層添加了July大神編寫的超強上傳類,具體怎么使用功能怎么強大,在后面調用到時會用一個章節詳細說明。呵呵......

  1、先了解解決方案中各個新增文件功能,具體的文件對應說明,請查看《數據字典》中的“目錄與文件說明”

  這個是各個表對應的邏輯層類,里面是Web層常用的各種函數。application文件夾是各種公共邏輯層函數類,Systems文件夾是后端系統管理模塊常用函數類。以后添加新的文件時,可以按功能或業務進行對應分類存放。

  

  LogicBase.cs是邏輯層所有模板生成類的父類,里面有兩個虛函數,用來給模板類調用。在有需要的時候,在自定義類中重寫這兩個函數,就可以給模板中的相應函數自動調用執行。

  DelCache()函數是模板類中進行添加、修改、刪除、更新等對數據庫記錄進行變更時會同步調用到,主要用于擁有自定義緩存的類中,重寫該函數后,進行前面的各項操作時自動執行該函數,以達到同步理清自定義緩存的功能。

  GetExPRession()函數是提供給模板類中的緩存加載函數(GetList())使用的。我們在開發時會創建很多表,有些表全部記錄需要加載到緩存中;有一些表記錄不需要加載到緩存當中(比如日志表);同時也有一些表的記錄會過期,只需要加載指定條件的記錄到緩存使用就可以了,對于后者我們就可以使用GetExpression()函數來進行控制,只要重寫這個函數,系統在運行GetList()函數時就會自動加載我們自定義的條件,從數據庫中篩選出我們想要的記錄到緩存中。

  

  CommonBll.cs是邏輯層的工具類,主要提供給模板生成類調用。具體使用方法請看注釋和相關例子。

  

  2、邏輯層T4模板文件CreateBll.tt(文件在文章后面下載源碼里)

  模板運行后將會生成下圖中的這些函數

  

  其中IIS緩存又包含下圖中這些常用函數

  

  原來是想使用Redis來處理緩存的,后來考慮到對于中小型項目來說,很多都沒有獨立的空間,使用的是虛擬機,用Redis也就不是很合適了,所以換成IIS緩存來處理

  IIS緩存也由之前的表級別緩存修改為記錄級別了,就是說你對某一條記錄進行添加、刪除、修改、更新等操作時,不用清空整個表緩存,直接對緩存中的記錄進行操作,不過這個功能剛剛改為記錄級別,得Web層代碼開始寫后才能測試看看效果怎么樣

  3、主要模板函數功能說明

  1)模板函數調用使用單例模式

  對于中小型項目來說,訪問量并發量并不是很大,單例模式已經夠用了,如果對某一個表并發量過大時,怕出現問題,也可以直接new出這個類,不使用單例調用就可以了

  比如:

  單例模式調用

    InformationBll.GetInstence().GetList();

  非單例模式調用

    var information = new InformationBll();    information.GetList();

  

  2)表緩存函數

 1 private const string const_CacheKey = "Cache_Information"; 2         private const string const_CacheKey_Date = "Cache_Information_Date"; 3  4         #region 清空緩存 5         /// <summary>清空緩存</summary> 6         private void DelAllCache() 7         { 8             //清除模板緩存 9             CacheHelper.RemoveOneCache(const_CacheKey);10             CacheHelper.RemoveOneCache(const_CacheKey_Date);11 12             //清除前臺緩存13             CommonBll.RemoveCache(const_CacheKey);14             //運行自定義緩存清理程序15             DelCache();16         }17         #endregion18 19         #region IIS緩存函數20         21         #region 從IIS緩存中獲取Information表記錄22         /// <summary>23         /// 從IIS緩存中獲取Information表記錄24         /// </summary>25         /// <param name="isCache">是否從緩存中讀取</param>26         public IList<Dataaccess.Model.Information> GetList(bool isCache = true)27         {28             try29             {30                 //判斷是否使用緩存31                 if (CommonBll.IsUseCache() && isCache){32                     //檢查指定緩存是否過期——緩存當天有效,第二天自動清空33                     if (CommonBll.CheckCacheIsExpired(const_CacheKey_Date)){                34                         //刪除緩存35                         DelAllCache();36                     }37 38                     //從緩存中獲取DataTable39                     var obj = CacheHelper.GetCache(const_CacheKey);40                     //如果緩存為null,則查詢數據庫41                     if (obj == null)42                     {43                         var list = GetList(false);44 45                         //將查詢出來的數據存儲到緩存中46                         CacheHelper.SetCache(const_CacheKey, list);47                         //存儲當前時間48                         CacheHelper.SetCache(const_CacheKey_Date, DateTime.Now);49 50                         return list;51                     }52                     //緩存中存在數據,則直接返回53                     else54                     {55                         return (IList<DataAccess.Model.Information>)obj;56                     }57                 }58                 else59                 {60                     //定義臨時實體集61                     IList<DataAccess.Model.Information> list = null;62 63                     //獲取全表緩存加載條件表達式64                     var exp = GetExpression<Information>();65                     //如果條件為空,則查詢全表所有記錄66                     if (exp == null)67                     {68                         //從數據庫中獲取所有記錄69                         var all = Information.All();70                         list = all == null ? null : Transform(all.ToList());71                     }72                     else73                     {74                         //從數據庫中查詢出指定條件的記錄,并轉換為指定實體集75                         var all = Information.Find(exp);76                         list = all == null ? null : Transform(all);77                     }78 79                     return list;80                 }                81             }82             catch (Exception e)83             {84                 //記錄日志85                 CommonBll.WriteLog("從IIS緩存中獲取Information表記錄時出現異常", e);86             }87             88             return null;89         }90         #endregion
View Code

  只要調用了GetList()函數,系統就會將全表記錄(重寫GetExpression()函數的,只加載符合條件的記錄)以IList<T>存儲方式緩存到IIS緩存中,供其他相關函數使用,緩存當天有效,第二天訪問時會自動清空重新加載

  一般來說,前端與后端在一個項目時,后端操作緩存會直接影響前端的數據。如果前后端分開,做為兩個項目來開發時,進行增、刪、改操作時就必須調用DelAllCache()函數來清除前后端的緩存,以便兩個站點的緩存能及時同步(目前對于使用IIS緩存跨站點記錄級別緩存同步還沒有一個比較好的處理方法,只能直接清空整表緩存來實現),調用DelAllCache()函數時,會執行CommonBll.RemoveCache(const_CacheKey)函數,該函數會通過一個前端訪問接口,發送經過加密處理后的數據,前端接口接收到請求后再清除對應緩存來實現前后端IIS緩存同步功能。

  3)實體轉換函數

  1 #region 實體轉換  2         /// <summary>  3         /// 將Information記錄實體(SubSonic實體)轉換為普通的實體(DataAccess.Model.Information)  4         /// </summary>  5         /// <param name="model">SubSonic插件生成的實體</param>  6         /// <returns>DataAccess.Model.Information</returns>  7         public DataAccess.Model.Information Transform(Information model)  8         {              9             if (model == null)  10                 return null; 11  12             return new DataAccess.Model.Information 13             { 14                 Id = model.Id, 15                 InformationClass_Root_Id = model.InformationClass_Root_Id, 16                 InformationClass_Root_Name = model.InformationClass_Root_Name, 17                 InformationClass_Id = model.InformationClass_Id, 18                 InformationClass_Name = model.InformationClass_Name, 19                 Title = model.Title, 20                 RedirectUrl = model.RedirectUrl, 21                 Content = model.Content, 22                 Upload = model.Upload, 23                 FrontCoverImg = model.FrontCoverImg, 24                 Note = model.Note, 25                 NewsTime = model.NewsTime, 26                 KeyWords = model.Keywords, 27                 SEOTitle = model.SeoTitle, 28                 SeoKey = model.SeoKey, 29                 SeoDesc = model.SeoDesc, 30                 Author = model.Author, 31
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精自产拍久久久久久| 欧美精品电影在线| 久久久精品电影| 欧美精品一本久久男人的天堂| 中文字幕综合在线| 日韩精品视频中文在线观看| 中文字幕亚洲综合| 国内精品400部情侣激情| 欧美电影免费观看电视剧大全| 国产在线观看91精品一区| 久久艳片www.17c.com| 91国产精品91| 97久久超碰福利国产精品…| 永久免费看mv网站入口亚洲| 日韩在线精品视频| 国产99久久精品一区二区 夜夜躁日日躁| 精品香蕉一区二区三区| 久久久久久久久久久网站| 欧美成人在线网站| 欧美在线激情视频| 欧美专区日韩视频| 欧美三级免费观看| 国产精品福利无圣光在线一区| 神马久久久久久| 久久av.com| 国产精品十八以下禁看| 亚洲精选在线观看| 国产成人精品免高潮费视频| 一区二区在线视频| 国产日产久久高清欧美一区| 亚洲国产精品一区二区久| 欧美日本高清一区| 国产v综合ⅴ日韩v欧美大片| 日日骚久久av| 日本欧美一二三区| 美女啪啪无遮挡免费久久网站| 国产精品视频网站| 亚洲电影第1页| 亚洲一区二区三区在线视频| 日本久久久久亚洲中字幕| 久久久伊人日本| 午夜精品一区二区三区视频免费看| 日本成人在线视频网址| 5252色成人免费视频| 久久久精品欧美| 国产男人精品视频| 91精品国产色综合久久不卡98| 日韩高清欧美高清| 亚洲视频在线观看免费| 欧美在线一级va免费观看| 亚洲精品久久在线| 91av在线精品| 91欧美激情另类亚洲| 国产深夜精品福利| 国产日韩欧美在线视频观看| 欧美日韩国产成人在线观看| 亚洲国产精品一区二区久| 精品一区二区三区三区| 久久久中文字幕| 高潮白浆女日韩av免费看| 夜夜嗨av色综合久久久综合网| 精品国产成人在线| 中文字幕免费精品一区| 国产美女久久精品香蕉69| 国产精品jvid在线观看蜜臀| 日韩av综合中文字幕| 久久久久久久久网站| 日韩麻豆第一页| 久久久国产在线视频| 亚洲精品免费一区二区三区| 国产亚洲激情视频在线| 欧美激情视频一区| 亚洲欧美视频在线| 亚洲第一视频网站| 国产精品福利片| 欧美激情中文字幕在线| 91免费高清视频| 亚洲高清在线观看| 疯狂欧美牲乱大交777| 国产精品女主播视频| xxxxx成人.com| 亚洲毛片在线免费观看| 亚洲午夜国产成人av电影男同| 亚洲欧美制服丝袜| 国产精品久久久久久久久久免费| 欧美日韩性视频| 中文字幕视频一区二区在线有码| 久久精品国亚洲| 亚洲国产成人精品久久久国产成人一区| 欧美国产日韩视频| 国产精品网红福利| 欧洲成人在线观看| 最近2019中文字幕在线高清| 亚洲国产天堂久久综合网| 国产成人精品久久亚洲高清不卡| 精品丝袜一区二区三区| 国产视频久久久久| 欧美一级高清免费播放| 欧美精品videos性欧美| 国产精品美女免费视频| 日韩精品中文字幕视频在线| 97视频在线观看播放| 欧美有码在线观看| 亚洲国产成人久久综合一区| 91在线高清视频| 国产精品视频内| 在线观看日韩欧美| 亚洲成人激情在线| 亚洲色图欧美制服丝袜另类第一页| 国产精品一区二区电影| 亚洲a在线播放| 久久久免费观看| 欧美在线观看www| 少妇高潮久久久久久潘金莲| 国产精品色悠悠| 亚洲第一页中文字幕| 91精品国产色综合久久不卡98口| 日韩av手机在线观看| 91av视频在线免费观看| 欧美成人手机在线| 亚洲国产成人久久| 久久精品视频网站| 国产成人高清激情视频在线观看| 国产69久久精品成人看| 伊人青青综合网站| 亚洲精品有码在线| 欧美精品www| 一个人看的www欧美| 91爱爱小视频k| 国产欧美精品xxxx另类| 国产精品91久久| 久久精品这里热有精品| 久久亚洲一区二区三区四区五区高| 日韩精品视频免费在线观看| 成人午夜激情免费视频| 91久久夜色精品国产网站| 日韩女在线观看| 韩国三级日本三级少妇99| 亚洲欧美日韩精品久久| 欧洲中文字幕国产精品| 欧美一级高清免费| 亚洲国产免费av| 午夜精品免费视频| 久久久精品一区| 亚洲欧洲视频在线| 欧美成年人在线观看| 国产精品色午夜在线观看| 国产精品视频yy9099| 欧美亚洲另类制服自拍| 亚洲www在线| 日韩禁在线播放| 亚洲精品久久久久中文字幕二区| 国产欧美日韩精品专区| 在线观看视频亚洲| 日本欧美在线视频| 91成人在线视频| 久久成人精品一区二区三区| 欧美亚洲国产精品| 国产精品久久久久91| 欧美性生交大片免费| 欧美日韩国产成人在线观看| 成人久久一区二区| 亚洲综合一区二区不卡| 91精品啪在线观看麻豆免费|