freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

軟件框架設(shè)計(jì)word版(已修改)

2025-05-23 17:40 本頁(yè)面
 

【正文】 軟件框架設(shè)計(jì) 一、優(yōu)秀的框架的特征 (1)為了避免重復(fù)勞動(dòng),為了降低成本,我們希望能夠重用之前的代碼、之前的設(shè)計(jì)。重用是框架實(shí)現(xiàn)中最為核心的目標(biāo),重心中的重心。提高復(fù)用度是框架的首要目標(biāo)。 (2)層次分明,高度組件化,在框架中的各個(gè)部件高度獨(dú)立,可拆可組 (任意拆卸,任意組合 ),著力通用。 (3)部件細(xì)化,設(shè)計(jì)精巧,運(yùn)行高效,內(nèi)存占用低。 (4)耦合度低 (可拆可組 ) 不論是什么系統(tǒng),我們都希望架構(gòu)是高效的。 運(yùn)行安全穩(wěn)定【可以通過(guò)完善 TDD 測(cè)試機(jī)制來(lái)保障】 我們需要架構(gòu)具有可拓展性,以適應(yīng)未來(lái)可能的變化。 一個(gè)復(fù)雜的架構(gòu)不論是測(cè)試還是維護(hù)都是困難的。我們希望架構(gòu)能夠在滿足目的的情況下盡可能的簡(jiǎn)單明了?!镜呛?jiǎn)單明了的含義究竟是什么好像并沒(méi)有一個(gè)明確的定義。例如:使用模式能夠使設(shè)計(jì)變得簡(jiǎn)單,但這是建立在我熟悉設(shè)計(jì)模式的基礎(chǔ)上。對(duì)于一個(gè)并不懂設(shè)計(jì)模式的人,他會(huì)認(rèn)為這個(gè)架構(gòu)很復(fù)雜?!? 把過(guò)多的實(shí)現(xiàn)細(xì)節(jié)隱藏起來(lái),僅把需求的接口呈現(xiàn)出來(lái) (具體的實(shí)現(xiàn)對(duì)使用框架的開(kāi)發(fā)者來(lái)說(shuō)就是透明的 )。這樣就提高了使用者的效率,降低了學(xué)習(xí)的門檻。二、設(shè)計(jì)具體指導(dǎo)原則 概要 框架總體功能目的 對(duì)框架總體功能目的進(jìn)行細(xì)化,分層 (層次之間相對(duì)獨(dú)立,互不干涉 ),仔細(xì)斟酌,理清層次之間的依賴關(guān)系 (如,核心層,中間層,應(yīng)用層 )。 *核心層:處于最低層,不依賴于框架中的其它層; 數(shù)據(jù)訪問(wèn)層指導(dǎo) 概覽 這一章主要描述設(shè)計(jì)數(shù)據(jù)訪問(wèn)層時(shí)要注意的主要原則。它們覆蓋了設(shè)計(jì)數(shù)據(jù)訪問(wèn)層遇到的通常問(wèn)題及錯(cuò)誤。下面的圖表展示了數(shù)據(jù)層怎樣嵌入一個(gè)通用的應(yīng)用架構(gòu)。 (blog 我的圖片一直上傳不了,報(bào) Remote server Error,只能使用網(wǎng)絡(luò)圖片了 ) 數(shù)據(jù)訪問(wèn)層組件 l 數(shù)據(jù)訪問(wèn)層組件。數(shù)據(jù)訪問(wèn)層組件 將訪問(wèn)底層存儲(chǔ)介質(zhì)的必要方法抽象出來(lái)。將數(shù)據(jù)訪問(wèn)功能集中起來(lái),可以使應(yīng)用程式便于配置和維護(hù)。 l Data Helpers/Utilities。 Helper 和 Utilities 功能幫助操縱,轉(zhuǎn)變和獲取數(shù)據(jù)。他們由一些特別的類庫(kù)組成以增強(qiáng)數(shù)據(jù)訪問(wèn)性能以及減少邏輯組件和服務(wù)代理的開(kāi)發(fā)要求。 l 服務(wù)代理。當(dāng)業(yè)務(wù)組件必須將功能通過(guò)外部服務(wù)暴露時(shí),你可能需要?jiǎng)?chuàng)建程式管理通信服務(wù)所需要的協(xié)議。服務(wù)代理將你的程式從調(diào)用不同的服務(wù)中分離出來(lái),并且提供額外的服務(wù),如服務(wù)的數(shù)據(jù)格式和你的應(yīng)用程式需要的格式之間的映射。 方法 正 確的設(shè)計(jì)數(shù)據(jù)層可以減少程式部署后的開(kāi)發(fā)和維護(hù)工作。這章會(huì)簡(jiǎn)要的概述一個(gè)設(shè)計(jì)訪問(wèn)層有效的方法。當(dāng)設(shè)計(jì)數(shù)據(jù)層時(shí)使用下面的方式: 。 。 。 。 。 。 。 。 。 Hlper 組件以簡(jiǎn)化數(shù)據(jù)訪問(wèn)組件開(kāi)發(fā)和維護(hù)。 。例如,考慮使用表格數(shù)據(jù),查詢對(duì)象,Repository,以及其它模式。 Helper 組件。 。 Helper 組件。 ,數(shù)據(jù)源認(rèn)證,監(jiān)視以及異常處理設(shè)計(jì)自定義的Helper 組件。 Helper 組件。 Helper 組件安裝和日志。 。 。生成一個(gè)代理和數(shù)據(jù)類來(lái)代表服務(wù)中的數(shù)據(jù)契約。 服務(wù)怎樣使用。對(duì)于大多應(yīng)用程式來(lái)說(shuō),最好在業(yè)務(wù)層和數(shù)據(jù)訪問(wèn)層之間使用一個(gè)抽象層,這樣會(huì)提供一個(gè)一致的接口而不考慮數(shù)據(jù)源。對(duì)于小的應(yīng)用程式來(lái)說(shuō),業(yè)務(wù)層或者表示層,可以直接訪問(wèn)服務(wù)代理。 設(shè)計(jì)原則 下面的設(shè)計(jì)原則包括了設(shè)計(jì)數(shù)據(jù)層時(shí)應(yīng)該考慮的不同方面。章節(jié)的剩余部分會(huì)提供給你選擇合適的技術(shù)和設(shè)計(jì)模式的詳細(xì)信息。 l 選擇數(shù)據(jù)訪問(wèn)技術(shù)。合適的數(shù)據(jù)訪問(wèn)技術(shù)選擇依賴于你處理的數(shù)據(jù)類型,以及你怎樣操縱程式數(shù)據(jù)。特定的技術(shù)會(huì)適用特別的場(chǎng)景。下面的部分討論了所選擇的數(shù)據(jù)訪問(wèn)技術(shù)的好處以及缺點(diǎn)。 l 使用抽象以實(shí)現(xiàn)和數(shù)據(jù)訪問(wèn)層松耦 合的接口。這個(gè)可以通過(guò)定義接口組件來(lái)完成,如眾所周知的輸入和輸出 Facade,可以將請(qǐng)求翻譯為層組件可以理解的信息。另外,你可以定義接口或抽象基類,以被組件實(shí)現(xiàn)。 l 考慮穩(wěn)固的數(shù)據(jù)結(jié)構(gòu)。如果你要在數(shù)據(jù)訪問(wèn)層處理基于 Table 的實(shí)體,考慮使用 DTO 來(lái)幫助你把數(shù)據(jù)轉(zhuǎn)換為統(tǒng)一的結(jié)構(gòu), DTO 鼓勵(lì)使用粗粒度的操作,以使數(shù)據(jù)在不同的邊界層移動(dòng)。 l 用數(shù)據(jù)訪問(wèn)層封裝數(shù)據(jù)訪問(wèn)功能。數(shù)據(jù)訪問(wèn)層隱藏了訪問(wèn)數(shù)據(jù)源的詳細(xì)信息,它用來(lái)管理連接,生成查詢,以及映射程式實(shí)體到數(shù)據(jù)源結(jié)構(gòu)。數(shù)據(jù)訪問(wèn)層的調(diào)用者使用自定義對(duì)象, Dataset,DataReader,以及 XML 文檔等抽象結(jié)構(gòu)來(lái)交互。其它應(yīng)用程序?qū)邮褂貌僮鞲鼜?fù)雜的方式來(lái)操縱數(shù)據(jù)以滿足應(yīng)用程式功能。分開(kāi)的考慮可以幫助應(yīng)用程式開(kāi)發(fā)和維護(hù)。 l 決定怎樣映射應(yīng)用程序?qū)嶓w到數(shù)據(jù)源結(jié)構(gòu)。應(yīng)用程序使用的實(shí)體類型是最主要的決定因素。 l 決定你怎樣來(lái)管理連接。實(shí)際上講,數(shù)據(jù)訪問(wèn)層需要管理應(yīng)用程序所有的數(shù)據(jù)源連接。你必須選擇合適的方法去存儲(chǔ)和保護(hù)連接信息以滿足應(yīng)用程序的安全需要。 l 決定你怎樣處理數(shù)據(jù)異常。數(shù)據(jù)訪問(wèn)層應(yīng)該捕獲以及處理所有和數(shù)據(jù)源、CRUD 操作引起的異常。如果只是數(shù)據(jù)異常,數(shù)據(jù)源訪問(wèn)及超時(shí) 異常,數(shù)據(jù)訪問(wèn)層應(yīng)該處理。如果錯(cuò)誤影響應(yīng)用程式的功能或響應(yīng)的話,那異常應(yīng)該被傳遞到其它層。 l 考慮安全風(fēng)險(xiǎn)。數(shù)據(jù)訪問(wèn)層應(yīng)該防止數(shù)據(jù)偷竊和破壞,保護(hù)訪問(wèn)數(shù)據(jù)源的機(jī)制。應(yīng)該使用 最少權(quán)限 的設(shè)計(jì)方法以限制需要執(zhí)行的應(yīng)用程式操作。如果數(shù)據(jù)源自己有能力限制權(quán)限的話,那數(shù)據(jù)訪問(wèn)層和數(shù)據(jù)源都要考慮安全。 l 減少數(shù)據(jù)包往返??紤]使用批處理命令以使用一個(gè)數(shù)據(jù)庫(kù)操作。 l 考慮性能和客觀上可測(cè)量性??蓽y(cè)量以及性能在設(shè)計(jì)數(shù)據(jù)訪問(wèn)層時(shí)就應(yīng)該被考慮。例如,當(dāng)設(shè)計(jì)一個(gè)基于網(wǎng)絡(luò)的商業(yè)程式,數(shù)據(jù)層性能是程式的瓶頸。當(dāng)數(shù)據(jù)訪問(wèn)層性能是決定性 時(shí),要限制昂貴的數(shù)據(jù)操作。 數(shù)據(jù)訪問(wèn)層設(shè)計(jì) Category Common Issues BLOB 不適當(dāng)?shù)脑跀?shù)據(jù)庫(kù)中存儲(chǔ) BLOBS 以替代文件系統(tǒng)。 對(duì)數(shù)據(jù)庫(kù)中的 BLOB 數(shù)據(jù)使用了不正確的類型。 搜索以及操作 BLOB 數(shù)據(jù)。 Batching 沒(méi)有使用批處理以減少數(shù)據(jù)包往返。 Holding onto locks for excessive periods when batching. 沒(méi)有考慮使用批處理策略以減少數(shù)據(jù)庫(kù)數(shù)據(jù)包往返。 Connections 對(duì)連接池使用了不適當(dāng)?shù)呐渲谩? 沒(méi)有處理連接超時(shí)和連接斷掉。 執(zhí)行的事務(wù)跨越過(guò)個(gè)連接。 在過(guò)長(zhǎng)的時(shí)間內(nèi)保持連接打開(kāi)。 使用單獨(dú)的認(rèn)證以代替全信任的子系統(tǒng)去訪問(wèn)數(shù)據(jù)庫(kù)。 Data Format 選擇了錯(cuò)誤的數(shù)據(jù)格式。 沒(méi)有考慮串行化需求。 沒(méi)有映射對(duì)象到關(guān)系數(shù)據(jù)存儲(chǔ)。 Excepion Management 沒(méi)有處理數(shù)據(jù)訪問(wèn)異常。 沒(méi)有對(duì)調(diào)用者掩蓋數(shù)據(jù)庫(kù)異常。 沒(méi)有記錄致命性的異常。 Queries 使用字符串連接來(lái)組建查詢語(yǔ)句。 查詢混合了業(yè)務(wù)邏輯。 對(duì)于查詢語(yǔ)句沒(méi)有優(yōu)化。 Stored Procedures 沒(méi)有正確的將參數(shù)傳給存儲(chǔ)過(guò)程。 在存儲(chǔ)過(guò)程里實(shí)現(xiàn)業(yè)務(wù)邏輯。 沒(méi)有考慮存儲(chǔ)過(guò)程里的動(dòng)態(tài) SQL 可以導(dǎo)致性能,安全以及可維護(hù)性。 Transactions 使用不正確的隔離等級(jí)。 在多個(gè)數(shù)據(jù)源間使用了事務(wù)。 使用了個(gè)別鎖,可能導(dǎo)致死鎖。 允許長(zhǎng)時(shí)間運(yùn)行的事務(wù)導(dǎo)致鎖住了數(shù)據(jù)訪問(wèn)。 Validation 對(duì)于數(shù)據(jù)字段沒(méi)有使用數(shù)據(jù)類型驗(yàn)證。 沒(méi)有處理 NULL 值。 沒(méi)有過(guò)濾不正確的字符。 XML 沒(méi)有考慮怎樣處理非常大的 XML DataSet. 沒(méi)有選擇合適的技術(shù)以方便 XML 和關(guān)系數(shù)據(jù)庫(kù)交互。 沒(méi)有設(shè)置合適的索引導(dǎo)致沉重 的 XML 查詢負(fù)擔(dān)。 沒(méi)有使用 Schema 來(lái)驗(yàn)證所有的 XML 輸入。 BLOB BLOB 是二進(jìn)制的大型對(duì)象。如果數(shù)據(jù)以數(shù)據(jù)流的方式存儲(chǔ)或檢索,那它就是 BLOB。 BLOBs 也許有結(jié)構(gòu),但顯然不是數(shù)據(jù)庫(kù)存儲(chǔ)的結(jié)構(gòu)或者數(shù)據(jù)訪問(wèn)層讀寫(xiě)的結(jié)構(gòu)。 BLOB 數(shù)據(jù)如果不能直接存儲(chǔ)在數(shù)據(jù)庫(kù),則通常存儲(chǔ)在文件系統(tǒng)中。 BLOBs 典型的使用方式是存儲(chǔ)圖像數(shù)據(jù),但也經(jīng)常用于存儲(chǔ)以二進(jìn)制為代表的對(duì)象。 當(dāng)設(shè)計(jì) BLOBs 策略時(shí),考慮以下原則: l 當(dāng)存儲(chǔ)圖像到硬盤(pán)不實(shí)際的時(shí)候,才會(huì)存儲(chǔ)到數(shù)據(jù)庫(kù)中。 l 在服務(wù)器間使用 BLOBs 來(lái)簡(jiǎn)化大型的二進(jìn)制對(duì) 象同步。 l 考慮你是否需要搜索 BLOB 數(shù)據(jù)。如果需要的話,創(chuàng)建其它數(shù)據(jù)庫(kù)可搜索的字段來(lái)代替解析 BLOB 數(shù)據(jù)。 l 考慮為 BLOB 數(shù)據(jù)使用文件系統(tǒng)以提高性能。數(shù)據(jù)庫(kù)的結(jié)構(gòu)和實(shí)現(xiàn)決定著系統(tǒng)性能提升的高度。使用文件系統(tǒng)你還要考慮存儲(chǔ)和同步數(shù)據(jù)庫(kù)中的相關(guān)元數(shù)據(jù)。 l 當(dāng)檢索 BLOB,把它轉(zhuǎn)換成業(yè)務(wù)層或表現(xiàn)層需要操作的合適類型。 l 當(dāng)使用緩沖傳輸?shù)臅r(shí)候不要把 BLOB 數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。 批處理 數(shù)據(jù)庫(kù)批處理命令可以提高數(shù)據(jù)訪問(wèn)層的性能。在進(jìn)入數(shù)據(jù)庫(kù)執(zhí)行環(huán)境前要消耗比較多的資源。批處理可以減少前端花費(fèi)以及提高吞吐量和減少響 應(yīng)時(shí)間。對(duì)相似的查詢使用批處理比較好,因?yàn)閿?shù)據(jù)庫(kù)對(duì)相似的查詢會(huì)使用緩存以減少查詢執(zhí)行計(jì)劃。 當(dāng)設(shè)計(jì)批處理時(shí),考慮以下原則: l 使用批處理以減少數(shù)據(jù)庫(kù)數(shù)據(jù)包往返以及減少網(wǎng)絡(luò)流量。 l 為大量的相似查詢建立批處理可以獲得最大的效益。為不相似的或隨即的查詢建立批處理是無(wú)用的。 l 使用批處理和命令以及 DataReader 以加載或拷貝多個(gè)數(shù)據(jù)集。 l 當(dāng)加載大量的基于文件的數(shù)據(jù)到數(shù)據(jù)庫(kù)時(shí),使用 BULK Copy 工具。不要為長(zhǎng)時(shí)間運(yùn)行的批處理命令設(shè)置鎖。 連接 連接到數(shù)據(jù)源是數(shù)據(jù)訪問(wèn)層的基礎(chǔ)。數(shù)據(jù)層必須管理所有的數(shù)據(jù)源連接。在數(shù)據(jù)層和數(shù)據(jù)源之間建立及管理連接都需要昂貴的資源。為了最大的提高性能,遵循下面的創(chuàng)建,管理和關(guān)閉連接原則。 l 選擇一個(gè)策略以處理數(shù)據(jù)庫(kù)連接字符串。 l 使用默認(rèn)的連接池以減少活動(dòng)的連接數(shù)量。 l 確定連接沒(méi)有特別的不需要的字符。在效率不高的連接池里,多余的字符會(huì)使一些同樣功能的連接獲取到不同的值。 l 在每一個(gè)事務(wù)后不要打開(kāi)或關(guān)閉連接,考慮在一定的時(shí)間里保持連接以允許重用。在部署前,要模擬真實(shí)的負(fù)載情況來(lái)測(cè)試你的應(yīng)用程式,對(duì)需要大量時(shí)間處理的地方做 出改變以優(yōu)化性能。 l 不要以來(lái)垃圾回收器來(lái)釋放連接。在明確的地方盡快釋放它們。 l 在可能的地方使用單一的連接來(lái)執(zhí)行事務(wù)。 l 設(shè)計(jì) Retry 的機(jī)制以應(yīng)付數(shù)據(jù)源丟失或連接超時(shí)的情況。 l 由于安全原因,避免使用系統(tǒng)名或用戶數(shù)據(jù)源名 (DSN)。 l 考慮在配置文件里對(duì)連接信息加密。例如,使用 . 內(nèi)置的機(jī)制加密連接字符串。 數(shù)據(jù)格式 正確的數(shù)據(jù)格式用來(lái)合理的解釋數(shù)據(jù)庫(kù)的原始字節(jié)以形成數(shù)據(jù)層傳遞的信息。選擇適當(dāng)?shù)臄?shù)據(jù)格式可以提高程式間的互操作性,簡(jiǎn)化不同進(jìn)程和機(jī)器間的串行化通信。數(shù)據(jù)格式和串行對(duì)于業(yè)務(wù)層存儲(chǔ)和檢索非常 重要。 當(dāng)設(shè)計(jì)數(shù)據(jù)格式時(shí),考慮以下原則: l 為程式選擇合適的數(shù)據(jù)格式。 l 在很多情況下,你需要使用自定義的數(shù)據(jù)或業(yè)務(wù)實(shí)體來(lái)提高程式可維護(hù)性。這需要額外的代碼來(lái)映射實(shí)體到數(shù)據(jù)庫(kù)操作。 O/RM 解決方案可以減少大量的自寫(xiě)代碼。 l 數(shù)據(jù)訪問(wèn)層使用的數(shù)據(jù)結(jié)構(gòu)不能包含業(yè)務(wù)規(guī)則。 l 當(dāng)使用經(jīng)常改變的結(jié)構(gòu)化數(shù)據(jù)時(shí)可以使用 XML。 l 決定數(shù)據(jù)的串行化需求。 l 考慮互操作性需求。 異常管理 在數(shù)據(jù)庫(kù)中設(shè)計(jì)統(tǒng)一的異常管理策略。如果可能,在數(shù)據(jù)庫(kù) Helper 組件中使用統(tǒng)一的異常處理邏輯。要特別注意在信任的層邊界發(fā)生的異常。設(shè)計(jì)不能處理的異常策略以使敏感的應(yīng)用程式信息不會(huì)暴露。 當(dāng)設(shè)計(jì)異常管理策略時(shí),考慮以下原則: l 決定哪些異常可以呈現(xiàn)給調(diào)用者。死鎖,連接問(wèn)題和網(wǎng)絡(luò)檢測(cè)可以在數(shù)據(jù)層解決。 l 實(shí)現(xiàn)全局的異常處理以捕獲不可知的異常以及將它拋給原調(diào)用者。 l 當(dāng)通過(guò)服務(wù)接口來(lái)暴露數(shù)據(jù)層時(shí),使用異常屏蔽信息以避免暴露敏感數(shù)據(jù)。 l 在數(shù)據(jù)層中處理所有數(shù)據(jù)訪問(wèn)相關(guān)的異常。 l 考慮對(duì)數(shù)據(jù)源錯(cuò)誤和操作超時(shí)實(shí)現(xiàn) Retry 機(jī)制。 l 告訴 User 異常會(huì)影響程式體驗(yàn)??紤]將異常信息傳到業(yè)務(wù)層處理以及將它報(bào)告給 User。 l Log 異常以容易的查找特定的錯(cuò)誤。 l 如果有多個(gè)數(shù)據(jù)源,記錄異常和錯(cuò)誤的時(shí)候要包括單個(gè)數(shù)據(jù)源信息。 查詢 查詢是數(shù)據(jù)層主要的數(shù)據(jù)操作方式。它們將程式請(qǐng)求轉(zhuǎn)換為Create,Retrieve,Update 和 Delete(CRUD)數(shù)據(jù)庫(kù)操作。由于查詢是很基本的東西,所以應(yīng)該優(yōu)化查詢以最大的提高數(shù)據(jù)庫(kù)性能和吞吐量。 當(dāng)設(shè)計(jì)數(shù)據(jù)層查詢,考慮以下的原則: l 當(dāng)存儲(chǔ)過(guò)程不實(shí)用的時(shí)候使用 SQL 查詢語(yǔ)句。 l 在 SQL 語(yǔ)句中使用參數(shù)以減少 SQL 注入。 l 當(dāng)需要?jiǎng)討B(tài)的創(chuàng)建查詢,不要允許用戶輸入來(lái)決定查詢的詳細(xì)信息。 l 在數(shù)據(jù)層中不要使用字符串拼湊來(lái)創(chuàng)建動(dòng)態(tài)查 詢。 l
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號(hào)-1