日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Discuz!NT 中的数据库链接类(重构到抽象类工厂模式)

發(fā)布時間:2025/3/21 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Discuz!NT 中的数据库链接类(重构到抽象类工厂模式) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?? 在7月份中我曾經(jīng)寫過一篇隨筆叫,叫" .NET2.0 框架中的 AbstractFactory 模式 " 。

??? 里面主要說了在2.0框架下的數(shù)據(jù)庫鏈接工廠中新增的幾個類,而這幾個類采用的就是 抽象類工廠模式
(Abstract Factory)。因為在Discuz!NT 2。0中使用了這些新的類,所以導(dǎo)致我們的產(chǎn)品dbhelper.cs
可以支持幾種數(shù)據(jù)庫(目前官方實現(xiàn)的有sqlserver ,access ,mysql)。但同時因為1.0框架下沒有這些類,

??? 所以我們采用自已簡單實現(xiàn)其中主要的類代碼來解決這個問題。這就有了今天文章的內(nèi)容!
???
??? 為了便于大家對照我將抽象類工廠模式結(jié)構(gòu)圖與項目中實現(xiàn)的結(jié)構(gòu)圖同時貼上:
??????
??? 首先請大家看一下AbstractFactory模式的結(jié)構(gòu)圖

???????
?????? 然后請大家看一下Discuz!NT項目中的數(shù)據(jù)鏈接結(jié)構(gòu)圖
???????
???????
??????

????? 好,現(xiàn)在開始上路了。
??????
????? 這個架構(gòu)中最主要的核心數(shù)據(jù)庫鏈接所需要的(connection, Command,DataAdapter)對象就是圍繞下面
m_factory的使用和賦值展開的, 請看如下代碼
???????
??????

?1???///?<summary>
?2???///?DbProviderFactory實例
?3???///?</summary>
?4???private?static?IDbProviderFactory?m_factory?=?null;
?5???
?6?????????///?<summary>
?7???///?DbFactory實例
?8???///?</summary>
?9???public?static?IDbProviderFactory?Factory
10???{
11????get
12????{
13?????if?(m_factory?==?null)
14?????{
15??????m_factory?=?Provider.Instance();
16?????}
17?????return?m_factory;
18????}
19???}
20?

??
??而其中的Provider.Instance();實現(xiàn)的代碼如下
??
????

?1????///?<summary>
?2?????///?Discuz!NT數(shù)據(jù)接口
?3?????///?</summary>
?4?????private?static?IDbProvider?m_provider?=?null;
?5?????
?6?????///?<summary>
?7?????///?IDbProvider接口
?8?????///?</summary>
?9???public?static?IDbProvider?Provider
10???{
11????get
12????{
13?????if?(m_provider?==?null)
14?????{
15??????lock(lockHelper)
16??????{
17???????if?(m_provider?==?null)
18???????{
19????????try
20????????{
21?????????m_provider?=?(IDbProvider)Activator.CreateInstance(Type.GetType(string.Format("Discuz.Data.{0}Provider,?Discuz.Data.{0}",?BaseConfigs.GetDbType)));
22????????}
23????????catch
24????????{
25?????????throw?new?Exception("請檢查DNT.config中Dbtype節(jié)點數(shù)據(jù)庫類型是否正確,例如:SqlServer、Access、MySql,注意大小寫。");
26????????}
27?????????????????????????????
28???????}
29??????}
30?????????????????????
31??????//m_provider?=?new?DbProviderFinder().GetDbProvider("accesss");
32?????????????
33?????????????????????
34?????}
35?????return?m_provider;
36????}
37???}
38?

???
???
??? 大家看到這里使用了反射,而BaseConfigs.GetDbType這個屬性的調(diào)用在一個叫做Dnt.config的文件
中有相應(yīng)設(shè)置,它標(biāo)識了當(dāng)前數(shù)據(jù)庫是Sqlserver,Access還是MySql。

??? 那么目前我們假設(shè)使用的是SqlServer型的數(shù)據(jù)庫,那么上面的"Discuz.Data.{0}Provider, Discuz.Data.{0}"
就會變成是"Discuz.Data.SqlServerProvider, Discuz.Data.SqlServer",我們不妨在這里找一下Discuz.Data.SqlServer
這個項目中,為方便,我這里直接將Discuz.Data.SqlServer這個類代碼貼在這
??????

?1??public?class?SqlServerProvider?:?IDbProvider
?2?????{
?3?????????public?IDbProviderFactory?Instance()
?4?????????{
?5?????????????return?SqlClientFactory.Instance;
?6?????????}
?7?
?8?????????public?void?DeriveParameters(IDbCommand?cmd)
?9?????????{
10?????????????if?((cmd?as?SqlCommand)?!=?null)
11?????????????{
12?????????????????SqlCommandBuilder.DeriveParameters(cmd?as?SqlCommand);
13?????????????}
14?????????}
15?
16?????????public?IDataParameter?MakeParam(string?ParamName,?DbType?DbType,?Int32?Size)
17?????????{
18?????????????SqlParameter?param;
19?
20?????????????if?(Size?>?0)
21?????????????????param?=?new?SqlParameter(ParamName,?(SqlDbType)DbType,?Size);
22?????????????else
23?????????????????param?=?new?SqlParameter(ParamName,?(SqlDbType)DbType);
24?
25?????????????return?param;
26?????????}
27?
28???
29?
30?????}
31?
32?????//SqlClientFactory工廠類,提供對SqlServerProvider中的Instance返回實例的支持
33?????public?class?SqlClientFactory?:?IDbProviderFactory
34?????{
35?????????public?static?readonly?SqlClientFactory?Instance;
36?
37?????????static?SqlClientFactory()
38?????????{
39?????????????Instance?=?new?SqlClientFactory();
40?????????}
41?
42?????????private?SqlClientFactory()
43?????????{
44?????????}
45?
46?
47?????????public?IDbConnection?CreateConnection()
48?????????{
49?????????????return?new?SqlConnection();
50?????????}
51?
52?????????
53?????????public?IDbCommand?CreateCommand()
54?????????{
55?????????????return?new?SqlCommand();
56?????????}
57?
58?????????public?IDbDataAdapter?CreateDataAdapter()
59?????????{
60?????????????return?new?SqlDataAdapter();
61?????????}
62?
63?????}
64?
65?

???????? ?
??? 其中SqlClientFactory是一個在.net2.0框架下才有的類,這里因為考慮產(chǎn)品架構(gòu)在1。0和2。0下的對應(yīng)關(guān)系,這里
使用了相同的類名稱。而這里類在抽象類工廠模式中的位置就是ConcreateFactory部分所需要實現(xiàn)的代碼。
????????????
??? 同理大家可以找到另個兩個項目DLL,Discuz.Data.Access中的AccessProvider.cs和Discuz.Data.MySql中的
MySqlProvider.cs,大家會發(fā)現(xiàn)類似的代碼實現(xiàn)。
??? ??
??? 現(xiàn)在大家應(yīng)該清楚了這個數(shù)據(jù)庫鏈接架構(gòu)的核心了吧。

?? 另外就是發(fā)表完這篇文章后,關(guān)于DISCUZ!NT系列的隨筆會暫時先告一段落。主要是因為另外一系列的文章將要登場,
這也是我最想寫的文章,主要是關(guān)于ICONIX(UML)的。

??? 最后再把這個系列中的隨筆進(jìn)行一下分類歸納如下:
?

??? 控件類:

????Discuz!NT控件剖析 之 Button [原創(chuàng): 附源碼]?
??? Discuz!NT控件剖析 之 TextBox [原創(chuàng): 附源碼]
??? Discuz!NT控件剖析 之 ColorPicker(顏色拾取) 和Calendar(日歷) [原創(chuàng): 附源碼]
??? Discuz!NT控件剖析 之 Tab 屬性頁 [原創(chuàng): 附源碼]


??? 架構(gòu)類:

??? Discuz!NT 緩存設(shè)計簡析 [原創(chuàng)]
??? Discuz!NT 聚合功能頁面程序架構(gòu)(重構(gòu)到Facade與Observer模式)
??? Discuz!NT 中的數(shù)據(jù)庫鏈接類(抽象類工廠模式)

??? 插件類:
? ? Discuz!NT 郵件插件機(jī)制分析

?

總結(jié)

以上是生活随笔為你收集整理的Discuz!NT 中的数据库链接类(重构到抽象类工厂模式)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 福利网址在线观看 | 美女网站免费观看视频 | 性色国产成人久久久精品 | 精品一区久久久 | 天堂国产在线 | 另类激情视频 | av无遮挡| 久久久精品在线观看 | 人人舔| 91精品亚洲| 国产日韩欧美精品 | 亚洲精品无 | 一区二区三区精品在线观看 | 免费黄在线看 | 麻豆国产91在线播放 | 午夜激情四射 | 黄色在线观看视频网站 | 久久亚洲AV成人无码国产人妖 | 香蕉久久夜色 | 欧美激情3p| 午夜视频大全 | 日韩精品在线观看一区 | 在线观看成年人视频 | 熟女av一区二区 | 五月天丁香网 | 东北熟女一区二区三区 | 中文字幕av一区二区三区人妻少妇 | 欧美黑人三级 | 三级影片在线播放 | 不卡在线 | 婷婷综合另类小说色区 | 亚洲欧美日韩久久精品 | 中文字幕33页| 久久看看| 男人日女人逼 | 尤物在线精品 | 无码国产精品一区二区色情男同 | 人人搞人人插 | 色视频在线免费观看 | 黄片毛片在线观看 | 天天爽夜夜爽夜夜爽精品 | 国产天堂久久 | 日韩av在线一区二区 | 国产亚洲欧美在线视频 | 高跟91白丝 | 日韩精品色 | 五月天激情电影 | 日日干日日摸 | 91视频一区二区 | 日韩av在线观看免费 | 亚洲福利视频一区二区 | 亚洲成人a∨ | 国产精品久久久久一区二区三区 | 一级草逼片 | 高清av一区二区 | 日韩毛片在线看 | 欧美zozo| 美国毛片av | 女生喷水视频 | 亚洲成av人片在线观看无码 | 欧美一区二区国产 | 久久国产亚洲精品无码 | 成人片网址 | 天天爱天天做 | 轮番上阵免费观看在线电影 | 亚洲一区精品视频在线观看 | 亚洲高潮| 日本一区中文 | 亚洲高潮无码久久 | 六月色婷| 久久青青草原 | 国产精品久久久久999 | 成人深夜福利视频 | 日韩精品资源 | 青青草香蕉 | 欧美日本在线看 | 久草福利| 中文字幕不卡视频 | 色婷婷中文字幕 | 国产av成人一区二区三区 | 高潮videossex高潮 | 一级特毛片 | 手机看片日韩福利 | 国产亚洲视频在线观看 | 亚洲一区在线免费观看 | 老熟妇高潮一区二区三区 | 人妻换人妻a片爽麻豆 | 一区二区三区激情视频 | 两性动态视频 | 亚洲欧美在线免费 | 中文字幕+乱码+中文乱码91 | 国产午夜网站 | 国产乱淫av片免费 | 国产欧美日 | 欧美日韩一区二区区别是什么 | 三级黄色网络 | 国产1级片 | 日韩不卡视频在线 | 51久久久 |