精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

三層架構(gòu)之泛型應(yīng)用

開發(fā) 前端 架構(gòu)
一說到三層架構(gòu),我想大家都了解,這里就簡單說下,三層架構(gòu)一般包含:UI層、DAL層、BLL層,其中每層由Model實體類來傳遞,所以Model也算是三層架構(gòu)之一了,例外為了數(shù)據(jù)庫的遷移或者更OO點,DAL層就衍生出了IDAL接口。Model就是簡單的對應(yīng)數(shù)據(jù)庫里面的類,DAL層就是主要操作數(shù)據(jù)庫的方法了,BLL這個就看業(yè)務(wù)了。

一說到三層架構(gòu),我想大家都了解,這里就簡單說下,三層架構(gòu)一般包含:UI層、DAL層、BLL層,其中每層由Model實體類來傳遞,所以Model也算是三層架構(gòu)之一了,例外為了數(shù)據(jù)庫的遷移或者更OO點,DAL層就衍生出了IDAL接口。Model就是簡單的對應(yīng)數(shù)據(jù)庫里面的類,DAL層就是主要操作數(shù)據(jù)庫的方法了,BLL這個就看業(yè)務(wù)了。而DAL層大部分的方法都是差不多,無非就是幾個Insert,Update,Delete,Select。

再來說下泛型,這個是2.0才開始有的,算是2.0中一個非常重要的技術(shù)了,關(guān)于泛型有什么好處優(yōu)點就不說了,網(wǎng)上一大堆,其實說了也沒有什么用,大家在實踐中運用了就知道,我覺得泛型一個最核心的地方就是,泛型封裝了類型,把類型的定義延遲到了客戶端,泛型又像一個類型的模板,只要你定義了一個泛型類,就相當于定義了N個類,每個類的類型不一樣而已。

上面我們說了,三層架構(gòu)中的DAL層一般包括Insert,Update,Delete,Select這幾種了,那么在泛型還沒有到來之前,我們的程序員兄弟一般是怎么做的,首先為每個實體定義一個DAL接口,比如有個User這個實體對象,那么就有一個IUserDAL這個接口以及UserDAL這個實現(xiàn)類,如果有N個實體,那么差不多就需要N個接口和實現(xiàn)類了,而這些接口中的Insert,Update,Delete,Select的方法簽名都是類似的,唯一的不同就是方法參數(shù)和返回值的類型了,我們來看下基本的接口定義

 

  1. public interface IUserDAL  
  2.      {  
  3.         int Insert(User model);  
  4.         int Update(User model);  
  5.         int Delete(int id);  
  6.         User GetModel(int id);  
  7.         DataTable GetList();  
  8.     } 

那么在一個項目中,像這樣的接口定義到處可見,大部分是重復(fù)的寫法,雖然我們有任勞任怨的代碼生成工具為我們效勞,但是從設(shè)計角度或者站在新技術(shù)的角度看,這些代碼就顯得很不優(yōu)雅,很不爽了,我想你的感覺也是這樣吧,呵呵O(∩_∩)O~。

當泛型來臨時,我們終于可以不看到那么多的重復(fù)接口的定義了,終于可以喘一口氣了,那么泛型又是怎么實現(xiàn)的呢,在實現(xiàn)之前我們回頭看下我們沒有泛型的IUserDAL的定義,其中Insert,Update方法就一個User參數(shù),類似的其他接口也就一個參數(shù),只是類型不是User了,可能是Order,或者其他的,在來看下GetModel返回值類型是User,GetList也是一樣的,只是這里我們用DataTable這個萬能的類型來代替了,但是大家都知道DataTable這個類型臃腫又是弱類型的,在UI層調(diào)用的時候又不知道這個DataTable里面到底有什么字段,這個就在開發(fā)期帶來一定的麻煩。

泛型的實現(xiàn)終于上場了,其實很簡單,不就是一對尖括號嗎,是的,只要在IUserDAL后面加對尖括號,里面用一個字符代替類型就可以了,哦,對了還要加個泛型約束呢,就是一個where,也就是說,這個泛型的類型只能是引用的類型,不能是值類型,難道你的Model是一個值類型??不可能吧,反正我是不信。那么這個泛型接口的定義就是:

  1. public interface IDAL<T> where T : class  
  2.     {  
  3.         int Insert(T model);  
  4.         int Update(T model);  
  5.         int Delete(int id);  
  6.         T GetModel(int id);  
  7.         IList<T> GetList();  
  8.    } 

 

哦,原來那么簡單就是加個T把之前的User類型給【換了】就可以啦,我怎么沒有想到呢,嗚嗚,那么在UserDAL這個繼承類中就可以明確定義那個泛型的類型了,因為我這個類就是用來實現(xiàn)User這個實體類的(或者說數(shù)據(jù)庫的表吧),這里,UserDAL我們就叫IUserDAL的客戶端了。代碼如下:

  1. public class UserDAL : IDAL<User> 
  2.     {  
  3.         #region IDAL<User> 成員  
  4.         public int Insert(User model)  
  5.         {  
  6.             //coding  
  7.         }  
  8.         public int Update(User model)  
  9.         {  
  10.             //coding  
  11.         }  
  12.         public int Delete(object id)  
  13.         {  
  14.             //coding  
  15.         }  
  16.         public User GetModel(object id)  
  17.         {  
  18.             //coding  
  19.         }  
  20.         public IList<User> GetList()  
  21.         {  
  22.             //coding  
  23.         }  
  24.         #endregion  
  25.     } 

 

好了,我們解放了DAL和IDAL,那么BLL層可以用泛型嗎,當然可以。

我們先來說下,不用泛型的BLL層的實現(xiàn),這里不考慮BLL的業(yè)務(wù)的話,那么BLL就是單純的調(diào)用DAL的相關(guān)數(shù)據(jù)庫操作方法,也就是那個IUserDAL接口定義的方法了,一般的UserBLL代碼如下:

  1. public class UserBLL  
  2.      {  
  3.          private IUserDAL dal = new UserDAL();  
  4.    
  5.          public int Insert(User model)  
  6.          {  
  7.              return dal.Insert(model);  
  8.          }  
  9.    
  10.          public int Update(User model)  
  11.          {  
  12.              return dal.Update(model);  
  13.          }  
  14.          public int Delete(int id)  
  15.          {  
  16.              return dal.Delete(id);  
  17.          }  
  18.          public T GetModel(int id)  
  19.          {  
  20.              return dal.GetModel(id);  
  21.          }  
  22.          public DataTable GetList()  
  23.          {  
  24.              return dal.GetList();  
  25.          }  
  26.      } 

 

我想這個是最簡單的BLL代碼了,而且大部分小的項目這樣就已經(jīng)夠了,因為沒有什么業(yè)務(wù)嘛,但是如果想這樣的代碼每個BLL都這樣謝,一個項目幾十個上百個也這樣寫真的會累死人的,代碼工具雖然可以解決,但是當我們看到那么多的重復(fù)代碼,相似的代碼,真的很心痛,難道你不覺得心痛,如果你不覺得或者也不想去改的話或者以后還是那樣寫重復(fù)的代碼,用代碼工具幫做的話,我想你的code能力也不會怎么提高,廢話一下。

那么用泛型的話,我們就可以為所有的BLL定義一個基類,其他類只要繼承下,稍微的根據(jù)業(yè)務(wù)的不同增加點業(yè)務(wù)代碼就可以,甚至都可以不用繼承了,我們先看代碼的實現(xiàn)吧,搞這行代碼才是最好說話的,請看下面代碼:

  1. public class BaseBLL<T, D> 
  2.         where T : class  
  3.         where D : IDAL<T>,new ()  
  4.     {  
  5.         private D dal = new D();  
  6.         public virtual int Insert(T model)  
  7.         {  
  8.             return dal.Insert(model);  
  9.         }  
  10.         public virtual int Update(T model)  
  11.         {  
  12.             return dal.Update(model);  
  13.         }  
  14.         public virtual int Delete(object id)  
  15.         {  
  16.             return dal.Delete(id);  
  17.         }  
  18.         public virtual T GetModel(object id)  
  19.         {  
  20.             return dal.GetModel(id);  
  21.         }  
  22.         public virtual IList<T> GetList()  
  23.         {  
  24.             return dal.GetList(model);  
  25.         }  
  26.     } 

 

這個也簡單把,也就是把實體類換為T,把IDAL接口換為D,并定義D這個類型的約束,也就是說我的這個D一定是一個實現(xiàn)了IDAL這個接口的,而IDAL尖括號里面的T就是BaseBLL里面的T,看到這里,相信大家都應(yīng)該明白了,如果你想實現(xiàn)UserBLL,就可以繼承BaseBLL這個基類,這里為什么把BaseBLL中的方法定義為virtual呢,原因很簡單的,因為你的BLL層的其他類不可能就沒有業(yè)務(wù),不可能就是簡單的調(diào)用DAL方法吧,其他的BLL類就可以根據(jù)業(yè)務(wù)去override相關(guān)的方法了,UserBLL相應(yīng)代碼如下:

  1. public class UserBLL : BaseBLL<User, UserDAL> 
  2.     {  
  3.          
  4.     } 

 

如果UserBLL沒有任何業(yè)務(wù)的話,那就不要繼承了,在UI直接用BaseBLL這個泛型類就可以,調(diào)用也很簡單

BaseBLL<User> dal=new BaseBLL<User>();這樣就可以了。

之所以寫這篇隨筆,是因為08年那時,我剛剛畢業(yè)投入工作后第一次看到讓我崇拜的代碼設(shè)計,好像那個時候泛型也剛開始盛行吧。

最后,感謝大家的閱讀,希望大家多多支持我的博客,我是最近一個月才開始寫博客的,后面會有更精彩的內(nèi)容等著你來閱讀。

作者:風(fēng)雨彩虹

出處:http://www.cnblogs.com/liubiaocai/

【編輯推薦】

  1. 淺析淘寶數(shù)據(jù)魔方技術(shù)架構(gòu)
  2. 淺析.NET設(shè)計架構(gòu)十條箴言
  3. 揭秘Google+技術(shù)架構(gòu)
  4. 揭秘新版SkyDrive架構(gòu)的幕后
  5. 97條架構(gòu)師須知
責任編輯:陳貽新 來源: 給力的程序員
相關(guān)推薦

2011-04-19 13:53:41

三層架構(gòu)

2012-02-03 09:44:33

.NET

2012-02-07 10:40:13

MVCJava

2013-01-09 11:00:20

架構(gòu)開發(fā)三層架構(gòu).NET架構(gòu)

2009-08-26 18:20:42

三層架構(gòu)

2009-07-28 17:25:14

ASP.NET三層結(jié)構(gòu)

2009-04-30 15:56:50

三層架構(gòu)MVCMVP

2009-07-28 15:08:50

MVC三層架構(gòu)實例

2015-07-02 10:57:11

General框架架構(gòu)開發(fā)

2018-10-31 14:32:53

數(shù)據(jù)中心網(wǎng)絡(luò)架構(gòu)

2018-03-08 15:30:31

超融合架構(gòu)傳統(tǒng)三層架構(gòu)

2023-09-13 09:00:00

2010-02-22 13:41:49

三層交換機

2017-06-12 13:18:51

數(shù)據(jù)報表計算

2010-02-04 16:53:36

三層交換技術(shù)

2010-01-08 10:08:06

三層交換技術(shù)

2009-05-06 09:40:04

LINQWEB開發(fā)構(gòu)架

2014-02-12 10:07:07

三層交換原理

2012-08-02 11:05:04

系統(tǒng)建模架構(gòu)

2018-07-19 12:16:50

交換技術(shù)三層二層
點贊
收藏

51CTO技術(shù)棧公眾號

国产精品久久一区二区三区不卡| www.99re7| 成人黄色免费网站| 亚洲欧美偷拍三级| 国产一区二区黄色| 五月婷婷激情五月| 欧美日韩p片| 亚洲视频在线观看视频| 国产成人精品一区二区在线小狼| 涩涩视频在线播放| 亚洲欧美综合在线精品| 久99久视频| 国产视频在线观看免费| 亚洲一区国产| 欧美成人亚洲成人日韩成人| 美女久久久久久久久久| 麻豆一区在线| 在线观看成人免费视频| 国产曰肥老太婆无遮挡| 天堂资源在线中文| 久久欧美一区二区| 国产精品免费一区二区三区观看 | 亚洲黄色尤物视频| 日韩欧美三级电影| 亚洲欧洲成人在线| 国产成人午夜99999| 国产精品人成电影| 黄色片视频免费| 亚洲毛片播放| 久久久久久高潮国产精品视| 顶级黑人搡bbw搡bbbb搡| 人人精品亚洲| 亚洲第一精品夜夜躁人人爽| 在线免费观看av网| 天堂久久一区| 日本韩国欧美三级| 黄色影院一级片| 波多野结衣在线播放| 亚洲欧美日韩电影| 日本丰满少妇黄大片在线观看| 国产精品影院在线| 国产日韩欧美在线一区| 欧美精品人人做人人爱视频| 无码精品人妻一区二区三区影院| 成人一级片在线观看| 91成人免费看| 亚洲精品一区二区三区四区| 国产精品一区二区三区99| 成人动漫网站在线观看| 亚洲天堂777| 蜜桃av一区二区| 国产精品久久久久久久久久久不卡 | 亚洲国产精品综合小说图片区| 天天成人综合网| 免费高清在线观看| 中文字幕在线观看一区| 自拍视频一区二区三区| 中文字幕有码在线视频| 亚洲精品日韩综合观看成人91| 中文字幕中文字幕在线中心一区| 秋霞午夜在线观看| 亚洲精品中文在线| 久久这里只有精品18| 精品丝袜在线| 色婷婷久久久亚洲一区二区三区| 老司机午夜av| 国产福利91精品一区二区| 欧美高清视频一二三区| 爱情岛论坛亚洲自拍| 超碰成人免费| 亚洲精品中文字幕女同| 国产无遮挡在线观看| 羞羞色午夜精品一区二区三区| 一区三区在线欧| 亚洲在线视频一区| 欧美日韩成人免费视频| 樱桃视频成人在线观看| 欧美专区亚洲专区| 久久久久无码精品| 久久香蕉精品香蕉| 一区二区三区黄色| 日本老熟俱乐部h0930| 亚洲黄色精品| 日本精品中文字幕| 国产精品国产av| 成人av综合一区| 日韩精品电影网站| 50度灰在线| 色播五月激情综合网| 一道本在线免费视频| 伊人久久影院| 一区二区三欧美| 九九热这里有精品视频| 久久久久久穴| 成人免费看片网站| 国产毛片av在线| 一区二区三区久久久| aa免费在线观看| 国产精品一级在线观看| 日韩精品福利在线| 动漫性做爰视频| 亚洲在线黄色| 不卡视频一区二区三区| av亚洲在线| 婷婷综合在线观看| 999久久久精品视频| 亚洲第一福利专区| 欧美尺度大的性做爰视频| 日韩三级一区二区| www.色精品| 免费看av软件| 在线观看精品| 日韩av综合网| 欧美精品一区二区蜜桃| 91精品少妇一区二区三区蜜桃臀| 精品香蕉视频| 91产国在线观看动作片喷水| 国产伦精品一区二区三区四区| 91丨九色丨国产丨porny| 日本成人在线不卡| 四虎地址8848精品| 亚洲午夜女主播在线直播| 久久精品欧美一区二区| 美女精品自拍一二三四| 久久影视中文粉嫩av| 日韩免费影院| 欧美一区二区国产| 懂色av蜜臀av粉嫩av永久| 蘑菇福利视频一区播放| 国产欧美欧洲| 亚洲小说区图片| 91精品国产综合久久福利| 无遮挡aaaaa大片免费看| 亚洲经典在线| 国产日产精品一区二区三区四区| 成年人黄视频在线观看| 欧美日韩国产在线观看| 韩国三级hd中文字幕| 国产模特精品视频久久久久| 精品日韩美女| 黄色漫画在线免费看| 精品99一区二区| 国产真人真事毛片| 福利91精品一区二区三区| 91精品国产毛片武则天| 日韩中文字幕| 久久久久久久久网站| 肥臀熟女一区二区三区| 性欧美疯狂xxxxbbbb| 国产十八熟妇av成人一区| 亚洲欧洲日本mm| 国产专区一区二区| 国内激情视频在线观看| 日韩精品久久久久| 波多野结衣理论片| 国产精品乱码一区二区三区软件| 亚洲欧美自偷自拍另类| 欧美mv日韩| 亚洲综合成人婷婷小说| 黑人玩欧美人三根一起进| 精品欧美乱码久久久久久| 日本熟女一区二区| 91小视频免费看| 国产成人无码一二三区视频| 国产一区二区亚洲| 国产精品网站入口| 国产一二区在线| 欧美成人vr18sexvr| www.国产高清| 中文字幕精品在线不卡| 三级av免费看| 99热精品在线观看| 亚洲欧美日韩另类精品一区二区三区| 青青久久精品| 欧美夫妻性视频| 青梅竹马是消防员在线| 欧美无砖砖区免费| 国产精品老熟女一区二区| 不卡的av网站| 天天爽夜夜爽一区二区三区| 一区二区三区四区日韩| 国产日韩一区欧美| 成人国产精品入口免费视频| 欧美成人激情视频| 亚洲三级中文字幕| 欧美精品丝袜中出| 1级黄色大片儿| 国产精品欧美一级免费| jjzzjjzz欧美69巨大| 日韩影院在线观看| 女女百合国产免费网站| 日韩欧美国产大片| 成人免费网站在线看| 黑森林国产精品av| 久久亚洲精品成人| 黑人与亚洲人色ⅹvideos | 国产成人精品白浆久久69| 婷婷综合五月天| 大地资源高清在线视频观看| 97久久超碰精品国产| 成人不卡免费视频| 久久永久免费| 青春草国产视频| 欧美mv日韩| 欧美日韩亚洲综合一区二区三区激情在线| 亚洲午夜剧场| 国产精品久久久久久久久免费看| 欧美性受ⅹ╳╳╳黑人a性爽| 亚洲视频欧洲视频| 六月婷婷综合网| 91精品国产综合久久香蕉麻豆| 九一国产在线观看| 亚洲午夜三级在线| 波多野结衣不卡视频| 国产亚洲精品中文字幕| xfplay5566色资源网站| 国产综合久久久久久鬼色| 成年人视频在线免费| 伊人成年综合电影网| 在线无限看免费粉色视频| 国产成人三级| 久久久久久久免费| 久久精品国产亚洲blacked| 99热99热| 国产精品视频首页| 国产中文字幕亚洲| 美女色狠狠久久| 欧美制服第一页| 国产欧洲在线| 国产+人+亚洲| 国产精品69xx| 欧美高清视频在线观看| 色呦呦视频在线观看| 久热精品视频在线| 国内精品久久久久国产| 中文字幕综合在线| 欧美成人性生活视频| 一区二区三区 在线观看视| 国产三级视频在线播放线观看| 亚洲精品国产免费| 天天摸天天碰天天爽天天弄| 亚洲成人av片在线观看| 日本美女一级视频| 亚洲精品美女在线观看| 亚洲色图欧美视频| 日韩精品黄色网| 韩日在线视频| 在线观看国产精品淫| 一级毛片视频在线观看| 最近的2019中文字幕免费一页 | 久久久亚洲影院| 欧美韩日亚洲| 97色在线播放视频| 欧美成人影院| 国产精品色悠悠| 伊人久久一区| 91久久精品国产91久久性色tv| 深夜福利一区| 久久成人资源| 精品久久久久久久久久久aⅴ| 日韩久久在线| 外国成人免费视频| 国产毛片久久久久久国产毛片| 在线观看一区| 欧美日韩在线成人| 麻豆91精品91久久久的内涵| 色18美女社区| 成人网男人的天堂| 泷泽萝拉在线播放| 国产精品盗摄一区二区三区| 国产大学生自拍| 香蕉乱码成人久久天堂爱免费| 久久青青草原亚洲av无码麻豆| 欧美自拍丝袜亚洲| 国产成人精品a视频| 亚洲精品久久久久中文字幕欢迎你 | 一级黄色av片| 制服丝袜av成人在线看| 成人午夜视频一区二区播放| 亚洲欧美精品在线| www 日韩| 欧美激情视频一区| 亚州一区二区三区| 成人在线资源网址| 精品无人区麻豆乱码久久久| 色哺乳xxxxhd奶水米仓惠香| 亚洲午夜一区| 黄色手机在线视频| 福利电影一区二区三区| 日本美女bbw| 午夜视频在线观看一区二区三区| 中文字幕在线一| 精品久久99ma| 91高清在线| 欧美亚洲国产视频小说| 国产高清亚洲| 日本欧美精品久久久| 国内精品久久久久久久影视麻豆| 少妇性l交大片| 丁香六月综合激情| а天堂中文在线资源| 精品国产91久久久久久| 97人妻人人澡人人爽人人精品 | 欧美24videosex性欧美| 国产成人精品免费久久久久 | 国产综合色视频| 白丝女仆被免费网站| 一区二区三区日韩欧美| 亚洲精品国产精品国自产网站按摩| 欧美sm美女调教| 毛片免费不卡| 国产精品久久久| 牲欧美videos精品| 人妻激情另类乱人伦人妻 | a天堂视频在线观看| 亚洲人成在线观看一区二区| 亚洲第一网站在线观看| 亚洲国产古装精品网站| 毛片av在线| 国产精品色悠悠| 欧美性感美女一区二区| 欧美三级午夜理伦三级| 不卡一区二区在线| 久久久久久久久久久久久久久久久| 欧美日本在线视频| 国产高清美女一级毛片久久| 91精品国产色综合久久不卡98| 日本免费一区二区视频| 国产精品99久久久久久大便| 美日韩一级片在线观看| 国产美女免费无遮挡| 欧美丝袜一区二区三区| 三级在线观看网站| 97久久精品人搡人人玩| 国产精品17p| 国产色一区二区三区| 成人在线视频首页| 国产精品美女毛片真酒店| 日韩欧美精品在线视频| 亚洲国产精品精华素| 97中文在线| 激情久久久久| 日韩 中文字幕| 日韩欧美在线视频免费观看| 日韩电影在线观看完整版| 2019亚洲日韩新视频| 亚洲最好看的视频| 日本999视频| 国产精品水嫩水嫩| 精品毛片久久久久久| 日韩理论视频| 欧美日韩国产一二| 老司机午夜精品视频在线观看| 97人妻精品一区二区免费| 色综合视频在线观看| 国产粉嫩一区二区三区在线观看| 日韩免费观看网站| 成人激情免费视频| 色婷婷一区二区三区在线观看| 亚洲另类春色国产| 亚洲精品久久久久久动漫器材一区| 久久久久久久91| 日韩高清三区| 亚洲最大成人在线观看| 亚洲人一二三区| 日本高清视频免费看| 日本久久久久久久久| 日韩精品永久网址| 久久精品一卡二卡| 天天色图综合网| a√在线中文网新版址在线| 444亚洲人体| 先锋a资源在线看亚洲| 神马久久久久久久久久久| 777久久久精品| av在线播放资源| 日韩一区二区三区在线播放| 久久精品国产福利| 九九久久九九久久| 2021国产精品久久精品| 中文在线字幕av| 欧美精品激情视频| 国产传媒欧美日韩成人精品大片| 亚洲免费黄色网| 午夜精品成人在线| 瑟瑟视频在线| 精品在线视频一区二区| 久久精品99国产精品| 日韩av在线播放观看| 色av中文字幕一区| 亚洲区小说区图片区qvod| 6080国产精品| 日韩欧美在线播放| 羞羞污视频在线观看| 日本不卡一区| 成人网页在线观看| 91在线精品入口| 日本91av在线播放| 欧美精品自拍| 国产又黄又粗又猛又爽的|