精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

国产99免费视频| 欧美亚洲福利| 国产一级片免费看| 国产高清在线观看| 免费在线成人网| 亚洲最大在线视频| 一本大道熟女人妻中文字幕在线| 性高潮久久久久久久久久| 伊人精品在线| 亚洲人成伊人成综合网久久久 | 国产视频一区二区三区四区五区| 日韩不卡一区| 精品剧情在线观看| 男女视频一区二区三区| 久久日韩视频| av电影天堂一区二区在线观看| 国产不卡精品视男人的天堂| 欧美一区二区三区粗大| 欧美二区观看| 午夜视频在线观看一区二区| 青青草原成人| 国产浮力第一页| 日韩中文字幕不卡| 久久天堂av综合合色| 久久久久亚洲AV成人无码国产| 三上悠亚国产精品一区二区三区| 91视频观看免费| 国产成人一区二区三区| 一级黄色录像视频| 禁断一区二区三区在线| 精品日韩成人av| 男女爽爽爽视频| 蜜桃传媒在线观看免费进入| 欧美极品另类videosde| www.av一区视频| 国产精品不卡av| 久久人人88| 日韩风俗一区 二区| 伊人国产精品视频| 自拍一区在线观看| 亚洲欧美日韩系列| 日韩欧美视频一区二区| 神宫寺奈绪一区二区三区| 看国产成人h片视频| 欧美一区二区.| 国产亚洲精品码| 国产videos久久| 在线观看91av| 亚洲人成无码www久久久| 3p视频在线观看| 久久久精品黄色| 久久艹中文字幕| 你懂的网站在线| 国产成人综合自拍| 成人午夜激情免费视频| 欧美视频xxxx| 丝袜诱惑制服诱惑色一区在线观看| 久久人人爽人人爽人人片亚洲| 小早川怜子久久精品中文字幕| 牛牛影视久久网| 日韩欧美一区二区不卡| 天天影视色综合| 91久久久久久白丝白浆欲热蜜臀| 精品久久久一区| 日韩中文字幕在线免费| 欧美aaa免费| 伊人色综合久久天天| 2021狠狠干| 色呦呦在线看| 亚洲乱码国产乱码精品精98午夜| 国产高潮呻吟久久久| 酒色婷婷桃色成人免费av网| 成人av高清在线| 国产一区二区不卡视频| 秋霞av鲁丝片一区二区| 成人免费av网站| 久久国产精品高清| 天堂а√在线8种子蜜桃视频| av不卡在线播放| 久久国产精品精品国产色婷婷| 欧美日韩在线中文字幕| 国产午夜精品一区二区三区四区| 日韩国产在线一区| 男女啪啪在线观看| 亚洲精品福利视频网站| 51xx午夜影福利| 欧美人与禽性xxxxx杂性| 五月婷婷激情综合| av网址在线观看免费| 国产欧美在线观看免费| 欧美一级欧美三级在线观看| 美女伦理水蜜桃4| 欧美日韩导航| 在线视频欧美日韩精品| 波多野结衣喷潮| 99re6这里只有精品| 欧美成人在线免费视频| 五月天婷婷丁香| 免费视频久久| 国产欧美久久久久久| www.黄色片| 久久亚洲精华国产精华液| 五码日韩精品一区二区三区视频| 2024最新电影免费在线观看| 亚洲大片在线观看| 99热手机在线| jizz性欧美2| 亚洲天天在线日亚洲洲精| 色哟哟一一国产精品| 在线欧美不卡| 国产精品色婷婷视频| 亚洲国产成人一区二区| 欧美成人黑人| 色美美综合视频| 爱豆国产剧免费观看大全剧苏畅 | 91高潮在线观看| 亚洲无码精品国产| 99精品视频在线观看免费| 亚洲一区3d动漫同人无遮挡| 9999精品成人免费毛片在线看| 欧美日精品一区视频| 亚洲av无码专区在线播放中文| 久久99久久人婷婷精品综合| 欧美国产日韩在线| 亚洲午夜在线播放| 91视视频在线观看入口直接观看www | 成人福利视频在线看| 午夜视频久久久| 福利在线导航136| 欧美绝品在线观看成人午夜影视| 国产老熟女伦老熟妇露脸| 希岛爱理一区二区三区| 国产91精品久久久久久| 好男人在线视频www| 中文字幕欧美一| 黄色三级视频片| 欧美一区二区三区久久| 色综合视频一区中文字幕| 中文字幕第31页| 久久久www成人免费无遮挡大片| 久久精品无码中文字幕| 国产精品久一| 久久精品国产一区| 这里只有精品国产| 久久人人爽人人爽| 免费看又黄又无码的网站| 亚洲成人偷拍| 久久成人亚洲精品| 96亚洲精品久久久蜜桃| 国产欧美综合色| 99视频在线免费| 日本成人7777| 97精品视频在线播放| 亚洲精品国产手机| 夜夜嗨av一区二区三区中文字幕 | 亚洲欧美小视频| 裸体一区二区三区| 亚洲精品9999| 99热播精品免费| 在线日韩第一页| 日韩电影在线观看一区二区| 91婷婷韩国欧美一区二区| 青春草国产视频| 成人高潮a毛片免费观看网站| 久久综合久中文字幕青草| 国产精品一二三四五区| 亚洲视频香蕉人妖| 巨乳女教师的诱惑| 国产精品videosex极品| 7777奇米亚洲综合久久 | 中文字幕第一页久久| 国产精品涩涩涩视频网站| 精品成人影院| 国产中文字幕亚洲| 黄视频网站在线看| 欧美一级片在线观看| 久久精品视频国产| 91女厕偷拍女厕偷拍高清| 无码精品国产一区二区三区免费| 国产日产精品一区二区三区四区的观看方式 | 亚洲午夜91| 国内精品国语自产拍在线观看| 小视频免费在线观看| 亚洲人成在线电影| 11024精品一区二区三区日韩| 一区二区三区欧美| 99精品一区二区三区无码吞精| 国产欧美日韩一区二区三区在线| 蜜桃成人在线| 激情久久一区二区| 欧美大片在线看| 四虎电影院在线观看| 色噜噜狠狠成人中文综合| 久久视频一区二区三区| 国产一区二区三区香蕉| 欧美久久在线观看| 久久99国内| 91深夜福利视频| 蜜臀久久精品| 日韩在线视频线视频免费网站| 国产精品特级毛片一区二区三区| 亚洲激情男女视频| 人人妻人人澡人人爽人人精品| 免费av网站大全久久| 97久久国产亚洲精品超碰热| 国产一区日韩| 99在线国产| 小明成人免费视频一区| 久久999免费视频| 久青草国产在线| 日韩欧美国产wwwww| 97人妻一区二区精品视频| 亚洲日本va在线观看| 一级性生活大片| 国产精品一区不卡| 欧美亚洲日本在线观看| 影音先锋亚洲一区| 亚洲一卡二卡区| 久久草在线视频| 成人午夜激情免费视频| 欧美www.| 国内偷自视频区视频综合| 日本在线人成| 亚洲剧情一区二区| 亚洲成人77777| 在线精品视频免费播放| 青青操视频在线播放| 欧美国产日韩精品免费观看| 这里只有精品在线观看视频| 韩国视频一区二区| 天天影视综合色| 一本久道久久综合婷婷鲸鱼| 欧洲xxxxx| 日韩精品一区二区久久| 欧美一区二视频在线免费观看| 成人影院中文字幕| 国产精品av电影| 久久亚洲资源| 久久久极品av| 麻豆传媒免费在线观看| 中文字幕日韩高清| 国产视频二区在线观看| 亚洲网址你懂得| a视频网址在线观看| 在线播放精品一区二区三区| www视频在线观看免费| 色偷偷综合社区| 国产成人高清精品| 欧美成人精品在线| 欧洲精品二区| 欧美激情网友自拍| 午夜激情在线| 久久久久久久久亚洲| 密臀av在线| 久久久久久久影院| 黄色片网站在线| 久久这里有精品| 欧美激情免费| 裸体女人亚洲精品一区| 国产日产一区二区| 久久成人18免费网站| 亚洲色图美国十次| 欧美成人免费一级人片100| 爆操欧美美女| 久久久久久久97| 国产夫妻在线播放| 91高清视频免费| 日韩和的一区二在线| 国产精品久久久久久五月尺| 99久久er| 国产免费久久av| 午夜精品成人av| 国产精品日韩在线一区| 国产麻豆精品| 不卡日韩av| 神马日本精品| 色综合久久av| 亚洲网站在线| 中文字幕有码av| 成人中文字幕在线| 夫妇交换中文字幕| 亚洲一区二区三区美女| 手机在线看片1024| 91精品国产综合久久久久久| 欧美综合视频在线| 日韩在线观看免费高清| 123区在线| 国产有码在线一区二区视频| 欧美日韩一区二区三区四区不卡| 日本午夜一区二区三区| 91综合网人人| 极品粉嫩国产18尤物| 日韩在线一区二区三区| 8x8x成人免费视频| 91视视频在线观看入口直接观看www| 亚洲成人黄色av| 中文字幕日韩一区| 99久在线精品99re8热| 欧美日韩精品欧美日韩精品一综合| 精品国产99久久久久久宅男i| 亚洲精品国产成人| 日本福利专区在线观看| 69av在线视频| 久久精品黄色| 久久影院理伦片| 99久久影视| 国产乱子夫妻xx黑人xyx真爽| 激情综合色丁香一区二区| 精品国产av色一区二区深夜久久| 国产精品久久综合| 日韩成人免费在线视频| 欧美美女一区二区在线观看| 神马午夜精品95 | 国产露出视频在线观看| 美女国内精品自产拍在线播放| 亚洲一二三四| 鬼打鬼之黄金道士1992林正英| 欧美伦理在线视频| 国产乱人伦精品一区二区三区| 日本欧美在线观看| 国产精品第七页| 亚洲精品免费视频| 最近中文字幕在线观看| 亚洲护士老师的毛茸茸最新章节| 国产一二三在线观看| 久久99国产精品久久久久久久久| 在线看欧美视频| 久久精品日产第一区二区三区精品版 | 91精品久久| 国产精品一区二区电影| 欧美人妖在线| 免费无码不卡视频在线观看| 国产福利91精品一区二区三区| 中文字幕第69页| 91福利视频久久久久| 亚州男人的天堂| 日韩在线观看高清| 99九九久久| 日本精品一区二区三区视频| 国内揄拍国内精品久久| 国产大片一区二区三区| 国产精品黄色在线观看| 一二三区免费视频| 亚洲天堂av女优| 亚洲黄色网址| 精品一区二区日本| 综合一区在线| 男女视频在线观看网站| 中文字幕五月欧美| 国产一区二区三区黄| 国产盗摄一区二区三区在线| 国产精品1区| 中文字幕在线直播| 久久综合九色综合97婷婷女人 | 欧美成人一区二区| 在线观看三级网站| 国产成人精品亚洲精品色欲| 中文字幕一区二区av| 精品嫩草影院久久| 欧美日韩国产精品激情在线播放| www.热久久| 韩国理伦片一区二区三区在线播放| 久久久久国色av免费观看性色| 国产毛片欧美毛片久久久| 亚洲欧洲国产精品一区| 欧美午夜精品在线| 成人av在线播放观看| av在线资源网| 91视频你懂的| 国产精品裸体一区二区三区| 中文字幕+乱码+中文| 国产日韩欧美一区在线| 久久九九精品99国产精品| 久久精品一区二区免费播放 | 国产999精品| 99自拍视频在线| 最新亚洲一区| 精品国偷自产在线视频99| 来吧亚洲综合网| 三级久久三级久久| 久久久影院一区二区三区| 中文字幕在线观看网站| 国产精品成人一区二区三区夜夜夜| 91人成网站www| 97人妻一区二区精品免费视频 | 国产精品进线69影院| 国产精品午夜一区二区| 欧美精品免费在线观看| 亚洲激情77| www,av在线| 色综合久久综合网欧美综合网| av软件在线观看| 日本欧洲国产一区二区| 国产成人在线免费观看| 国产精华7777777| 久久久亚洲精选| 亚洲91视频| 四虎永久免费在线观看| 精品久久久久久无| 日韩美女在线|