• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

        實(shí)戰(zhàn) .Net 數(shù)據(jù)訪問(wèn)層 - 19

        實(shí)戰(zhàn) .Net 數(shù)據(jù)訪問(wèn)層 - 19

        更新時(shí)間:2021-11-16 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

        6. ASPECT

        AOP(Aspect Oriented Programming)可能是最近幾年被挖掘出

        來(lái)的最具震撼力的技術(shù)之一,作者并不打算在此花什么篇幅介紹它(網(wǎng)上資料已多如牛毛),只是希望借用其ASPECT概念來(lái)說(shuō)明幾個(gè)設(shè)計(jì)Data Access Layer時(shí)必須考慮的問(wèn)題(也是在進(jìn)行系統(tǒng)架構(gòu)設(shè)計(jì)前不得不考慮的幾個(gè)重要因素!):

        (1) Security

        把它排在ASPECT首位相信大家沒(méi)什么疑義吧!



        雖然,Business Logic已為我們搞定了太多的Security Issues,但那個(gè)長(zhǎng)久揮之不去的“ConnectionString陰影”還是會(huì)成為不少開(kāi)發(fā)人員心中永遠(yuǎn)的“不爽”!



        有位同事告訴我,微軟曾有一個(gè)號(hào)稱(chēng)8萬(wàn)人難以攻破的ASP.NET應(yīng)用程序,它的ConnectionString居然就是存在了Registry中(別忘了禁用Remote Registry服務(wù))!這樣的雙重保護(hù)(另一重是對(duì)ConnectionString進(jìn)行加密處理)是多么簡(jiǎn)單卻實(shí)用啊!

        在很多時(shí)候,As Simple As Possible才是我們應(yīng)該真正追求的目標(biāo)。



        另一個(gè)需要注意的問(wèn)題就是如何應(yīng)對(duì)SQL Injection(SQL注入)攻擊!

        一個(gè)經(jīng)典的例子如下所示:

        string strSql = "select * from user where" +

        " username = '" + strUserName +

        "' and password = '" + strPassword;



        在這里,采用Dynamic SQL本身并無(wú)調(diào)用上的邏輯問(wèn)題,但卻給了Cracker以可乘之機(jī):如果系統(tǒng)沒(méi)有針對(duì)strPassword做過(guò)任何數(shù)據(jù)校驗(yàn),當(dāng)用戶試著輸入“abc”作為username,“123’ or 1 = 1”作為password時(shí),那就不得不遺憾的告訴您:該系統(tǒng)已被成功攻破,請(qǐng)迅速發(fā)布新的補(bǔ)丁程序!

        雖然這個(gè)例子很簡(jiǎn)單,但已提醒我們:小小的SQL語(yǔ)句也會(huì)成為系統(tǒng)漏洞的“重要來(lái)源”!



        在這種情況下,避免產(chǎn)生危機(jī)的方法也很簡(jiǎn)單:使用Stored Procedure或者Parameter Collection(你不會(huì)告訴我準(zhǔn)備把這個(gè)責(zé)任推給毫無(wú)SQL經(jīng)驗(yàn)的Business Logic人員吧J)。如果系統(tǒng)架構(gòu)時(shí)沒(méi)有準(zhǔn)備采用Stored Procedure或者開(kāi)發(fā)人員很不習(xí)慣使用Parameter Collection(坦率地講,我也不喜歡這個(gè)東東),那也有個(gè)稍微麻煩點(diǎn)的Solution(當(dāng)然不推薦采用):

        i. 僅使用username拼裝Dynamic SQL;

        ii. 判斷返回紀(jì)錄數(shù)是否為1(假定username為unique column);

        iii. 如果記錄數(shù)為1,取出password數(shù)據(jù);

        iv. 判斷用戶輸入之password是否與查詢返回之password匹配。



        限于篇幅,這里只討論了兩個(gè)比較常見(jiàn)的問(wèn)題,當(dāng)然是遠(yuǎn)遠(yuǎn)不能覆蓋Security的全部精髓,只是為了表明一個(gè)觀點(diǎn):Security實(shí)在是非常非常重要,切勿等閑視之!



        (2) Transaction

        這是個(gè)避無(wú)可避的東東,要發(fā)現(xiàn)它的問(wèn)題有一定難度,且不易于測(cè)試!作者不準(zhǔn)備就此展開(kāi),大家只有通過(guò)實(shí)戰(zhàn)積累經(jīng)驗(yàn)了。

        另外,到底是用System.EnterpriseServices還是Connection.BeginTransaction + try-catch,依然會(huì)使很多.NET開(kāi)發(fā)人員產(chǎn)生困惑,作為系統(tǒng)架構(gòu)設(shè)計(jì)的一部分,這也是個(gè)必須充分考慮的問(wèn)題!



        (3) Logging

        日志不是個(gè)要不要的問(wèn)題,而是怎么做的問(wèn)題。

        Log4Net已經(jīng)很不錯(cuò)了,不會(huì)還想親自動(dòng)手做一個(gè)吧!



        (4) Exception

        這是個(gè)“無(wú)底洞”,看你怎么設(shè)計(jì)了。

        就作者經(jīng)歷的項(xiàng)目,主要采用這么兩種方式:

        i. one throw,one catch,no re-throw

        這個(gè)最簡(jiǎn)單了,不需要太復(fù)雜的Exception Inheritance Hierarchy,處理起來(lái)也比較輕松;

        ii. one throw,multi-catch,multi-re-throw

        復(fù)雜應(yīng)用可能采用這種模式更多些,需要一大堆的Exception Classes和令人望眼欲穿的try-catch,但可能在擴(kuò)展性和容錯(cuò)處理方面會(huì)表現(xiàn)得更為出色(可苦了咱們開(kāi)發(fā)人員L)!



        暫時(shí)就想到這些,如有什么遺漏,歡迎大家補(bǔ)充。



        下一段:http://www.csdn.net/develop/Read_Article.asp?id=27564

        溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

        本類(lèi)教程下載

        系統(tǒng)下載排行

        主站蜘蛛池模板: 成人无遮挡毛片免费看| 久久久婷婷五月亚洲97号色| 91网站免费观看| 美女无遮挡拍拍拍免费视频| 国产亚洲一卡2卡3卡4卡新区| 亚洲综合成人网在线观看| 国产成人高清亚洲| 国产大片91精品免费观看男同 | 亚洲国产午夜福利在线播放| 国产成人午夜精品免费视频| a级在线免费观看| 有色视频在线观看免费高清在线直播| 亚洲中文字幕乱码熟女在线| 亚洲综合激情视频| 久久亚洲国产精品一区二区| 免费看一级高潮毛片| 亚洲av乱码一区二区三区 | 国产又黄又爽胸又大免费视频| 亚洲精品乱码久久久久蜜桃| 亚洲色偷偷狠狠综合网| 日韩一级视频免费观看| av电影在线免费看| 美女的胸又黄又www网站免费| 亚洲欧洲免费无码| 日韩亚洲不卡在线视频中文字幕在线观看 | 911精品国产亚洲日本美国韩国| 亚洲AV中文无码字幕色三| 亚洲精品中文字幕乱码三区| 亚洲一区日韩高清中文字幕亚洲 | 亚洲毛片一级带毛片基地| 亚洲AV乱码久久精品蜜桃| 亚洲啪啪AV无码片| 精品久久久久久亚洲| 亚洲色偷拍另类无码专区| 中文亚洲成a人片在线观看| 亚洲中文久久精品无码| 亚洲女同成av人片在线观看| 亚洲AV人无码综合在线观看 | 日本一区午夜艳熟免费| 日本在线免费观看| 久久久久久曰本AV免费免费|