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

正文內(nèi)容

1、petshop的系統(tǒng)架構(gòu)設(shè)計(jì)petshop的系統(tǒng)架構(gòu)設(shè)計(jì)filedunder∶design-資料下載頁(yè)

2025-08-25 22:10本頁(yè)面

【導(dǎo)讀】許多.Net與J2EE之爭(zhēng),許多數(shù)據(jù)是從微軟的PetShop和Sun的PetStore而來(lái)。然而PetShop隨著版本的不斷更新,至現(xiàn)在基于.Net的。為止,整個(gè)設(shè)計(jì)逐漸變得成熟而優(yōu)雅,卻又很多可以借鑒之處。本系列試圖對(duì)PetShop作一個(gè)全方位的解剖,依據(jù)的代碼是,在軟件體系架構(gòu)設(shè)計(jì)中,分層式結(jié)構(gòu)是最常見(jiàn),也是最重要的一種結(jié)構(gòu)。說(shuō)法就是實(shí)現(xiàn)對(duì)數(shù)據(jù)表的Select,Insert,Update,Delete的操作。在PetShop的數(shù)據(jù)訪問(wèn)層中,并沒(méi)有使用ORM,從而導(dǎo)致了代碼量的增加,為例,業(yè)務(wù)邏輯層的相關(guān)設(shè)計(jì),均和網(wǎng)上寵物店特有的邏輯相關(guān),例如查詢寵物,的狀態(tài)是不應(yīng)包括系統(tǒng)的業(yè)務(wù)邏輯。動(dòng)全身,對(duì)項(xiàng)目的影響極為嚴(yán)重?,F(xiàn),只要不涉及到IDAL的接口定義,那么業(yè)務(wù)邏輯層就不會(huì)受到任何影響。

  

【正文】 AS BEGIN UPDATE WITH (ROWLOCK) SET changeId = changeId + 1 WHERE tableName = @tableName END GO 利用 SqlCacheDependencyAdmin 類 我們也可以利用編程的方式來(lái)來(lái)管理數(shù)據(jù)庫(kù)對(duì) SqlCacheDependency 特性的使用。該類包含了五 個(gè)重要的方法: DisableNotifications 為特定數(shù)據(jù)庫(kù)禁用 SqlCacheDependency 對(duì)象更改通知 DisableTableForNotifications 為數(shù)據(jù)庫(kù)中的特定表禁用SqlCacheDependency 對(duì)象更改通知 EnableNotifications 為特定數(shù)據(jù)庫(kù)啟用SqlCacheDependency 對(duì)象更改通知 EnableTableForNotifications 為數(shù)據(jù)庫(kù)中的特定表啟用SqlCacheDependency 對(duì)象更改通知 GetTablesEnabledForNotifications 返回啟用了 SqlCacheDependency對(duì)象更改通知的所有表的列表 表 41 SqlCacheDependencyAdmin 類的主要方法 假設(shè)我們定義了如下的數(shù)據(jù)庫(kù)連接字符串: const string connectionStr = “Server=localhost。Database=MSPetShop4″。 那么為數(shù)據(jù)庫(kù) MSPetShop4 啟用 SqlCacheDependency 對(duì)象更改通知的實(shí)現(xiàn)為: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { (connectionStr)。 } } 為數(shù)據(jù)表 Product 啟用 SqlCacheDependency 對(duì)象更改通知的實(shí)現(xiàn)則為: (connectionStr, “Product”) 。 如果要調(diào)用表 41 中所示的相關(guān)方法,需要注意的是訪問(wèn) SQL Server 數(shù)據(jù)庫(kù)的帳戶必須具有創(chuàng)建表和存儲(chǔ)過(guò)程的權(quán)限。如果要調(diào)用EnableTableForNotifications 方法,還需要具有在該表上創(chuàng)建 SQL Server 觸發(fā)器的權(quán)限。 雖然說(shuō)編程方式賦予了程序員更大的靈活性,但 asp_regsql 工具卻提供了更簡(jiǎn)單的方法實(shí)現(xiàn)對(duì) SqlCacheDependency 的配置與管理。 PetShop 采用的正是 asp_regsql 工具的辦法,它編寫(xiě)了一個(gè)文件名為 的批處理文件,其中包含了對(duì) asp_regsql 工具的執(zhí)行,并通過(guò)安裝程序去調(diào)用該文件,實(shí)現(xiàn)對(duì) SQL Server 的配置。 在 PetShop 中 緩存的實(shí)現(xiàn) PetShop 作為一個(gè) B2C 的寵物網(wǎng)上商店,需要充分考慮訪客的用戶體驗(yàn),如果因?yàn)閿?shù)據(jù)量大而導(dǎo)致 Web 服務(wù)器的響應(yīng)不及時(shí),頁(yè)面和查詢數(shù)據(jù)遲遲得不到結(jié)果,會(huì)因此而破壞客戶訪問(wèn)網(wǎng)站的心情,在耗盡耐心的等待后,可能會(huì)失去這一部分客戶。無(wú)疑,這是非常糟糕的結(jié)果。因而在對(duì)其進(jìn)行體系架構(gòu)設(shè)計(jì)時(shí),整個(gè)系統(tǒng)的性能就顯得殊為重要 。然而,我們不能因噎廢食,因?yàn)閷W⒂谛阅芏雎詳?shù)據(jù)的正確性。在 PetShop 版本以及之前的版本,因?yàn)? 緩存的局限性,這一問(wèn)題并沒(méi)有得到很好的解決。 PetShop 則引入了 SqlCacheDependency特性,使得系統(tǒng)對(duì)緩存的處理較之以前大為改觀。 CacheDependency 接口 PetShop 引入了 SqlCacheDependency 特性,對(duì) Category、 Product 和 Item數(shù)據(jù)表對(duì)應(yīng)的緩存實(shí)施了 SQL Cache Invalidation 技術(shù) 。當(dāng)對(duì)應(yīng)的數(shù)據(jù)表數(shù)據(jù)發(fā)生更改后,該技術(shù)能夠?qū)⑾嚓P(guān)項(xiàng)從緩存中移除。實(shí)現(xiàn)這一技術(shù)的核心是SqlCacheDependency 類,它繼承了 CacheDependency 類。然而為了保證整個(gè)架構(gòu)的可擴(kuò)展性,我們也允許設(shè)計(jì)者建立自定義的 CacheDependency 類,用以擴(kuò)展緩存依賴。這就有必要為 CacheDependency 建立抽象接口,并在 文件中進(jìn)行配置。 在 PetShop 的命名空間 中,定義了名為IPetShopCacheDependency 接口,它僅包含了一個(gè)接口方法: public interface IPetShopCacheDependency { AggregateCacheDependency GetDependency()。 } AggregateCacheDependency 是 .Net Framework 新增的一個(gè)類,它負(fù)責(zé)監(jiān)視依賴項(xiàng)對(duì)象的集合。當(dāng)這個(gè)集合中的任意一個(gè)依賴項(xiàng)對(duì)象發(fā)生改變時(shí),該依賴項(xiàng)對(duì)象對(duì)應(yīng)的緩存對(duì)象都將被自動(dòng)移除。 AggregateCacheDependency 類起到了組合 CacheDependency 對(duì)象的作用,它可以將多個(gè) CacheDependency對(duì)象甚至于不同類型的 CacheDependency對(duì)象與緩存項(xiàng)建立關(guān)聯(lián)。由于 PetShop 需要為 Category、 Product 和 Item 數(shù)據(jù)表建立依賴項(xiàng),因而 IPetShopCacheDependency 的接口方法 GetDependency()其目的就是返回建立了這些依賴項(xiàng)的 AggregateCacheDependency 對(duì)象。 CacheDependency 實(shí)現(xiàn) CacheDependency 的實(shí)現(xiàn)正是為 Category、 Product 和 Item 數(shù)據(jù)表建立了對(duì)應(yīng)的 SqlCacheDependency 類型的依賴項(xiàng),如代碼所示: public abstract class TableDependency : IPetShopCacheDependency { // This is the separator that’s used in protected char[] configurationSeparator = new char[] { ‘,’ }。 protected AggregateCacheDependency dependency = new AggregateCacheDependency()。 protected TableDependency(string configKey) { string dbName = [”CacheDatabaseName”]。 string tableConfig = [configKey]。 string[] tables = (configurationSeparator)。 foreach (string tableName in tables) (new SqlCacheDependency(dbName, tableName))。 } public AggregateCacheDependency GetDependency() { return dependency。 } } 需要建立依賴項(xiàng)的數(shù)據(jù)庫(kù)與數(shù)據(jù)表都配置在 文件中,其設(shè)置如下: 根據(jù)各個(gè)數(shù)據(jù)表間的依賴關(guān)系,因而不同的數(shù)據(jù)表需要建立的依賴項(xiàng)也是不相同的,從配置文件中的 value 值可以看出。然而不管建立依賴項(xiàng)的多寡,其創(chuàng)建的行為邏輯都是相似的,因而在設(shè)計(jì)時(shí),抽象了一個(gè)共同的類 TableDependency,并通過(guò)建立帶參數(shù)的構(gòu)造函數(shù),完成對(duì)依賴項(xiàng)的建立。由于接口方法GetDependency()的實(shí)現(xiàn)中, 返回的對(duì)象 dependency 是在受保護(hù)的構(gòu)造函數(shù)創(chuàng)建的,因此這里的實(shí)現(xiàn)方式也可以看作是 Template Method 模式的靈活運(yùn)用。例如TableDependency 的子類 Product,就是利用父類的構(gòu)造函數(shù)建立了 Product、Category 數(shù)據(jù)表的 SqlCacheDependency 依賴: public class Product : TableDependency { public Product() : base(”P(pán)roductTableDependency”) { } } 如果需要 自定義 CacheDependency,那么創(chuàng)建依賴項(xiàng)的方式又有不同。然而不管是創(chuàng)建 SqlCacheDependency 對(duì)象,還是自定義的 CacheDependency 對(duì)象,都是將這些依賴項(xiàng)添加到 AggregateCacheDependency 類中,因而我們也可以為自定義 CacheDependency 建立專門的類,只要實(shí)現(xiàn) IPetShopCacheDependency 接口即可。 CacheDependency 工廠 繼承了抽象類 TableDependency 的 Product、 Category 和 Item類均需要在調(diào)用時(shí)創(chuàng)建各自的對(duì)象。由于它們的父類 TableDependency 實(shí)現(xiàn)了接口IPetShopCacheDependency,因而它們也間接實(shí)現(xiàn)了 IPetShopCacheDependency接口,這為實(shí)現(xiàn)工廠模式提供了前提。 在 PetShop 中,依然利用了配置文件和反射技術(shù)來(lái)實(shí)現(xiàn)工廠模式。命名空間 中,類 DependencyAccess 即為創(chuàng)建IPetShopCacheDependency 對(duì)象的工廠類: public static class DependencyAccess { public static IPetShopCacheDependency CreateCategoryDependency() { return LoadInstance(”Category”)。 } public static IPetShopCacheDependency CreateProductDependency() { return LoadInstance(”P(pán)roduct”)。 } public static IPetShopCacheDependency CreateItemDependency() { return LoadInstance(”Item”)。 } private static IPetShopCacheDependency LoadInstance(string className) { string path = [”CacheDependencyAssembly”]。 string fullyQualifiedClass = path + “.” + className。 return (IPetShopCacheDependency)(path).CreateInstance(fullyQualifiedClass)。 } } 整個(gè)工廠模式的實(shí)現(xiàn)如圖 43所示: 圖 43 CacheDependency 工廠 雖然 DependencyAccess 類創(chuàng)建了實(shí)現(xiàn)了 IPetShopCacheDependency 接口的類Category、 Product、 Item,然而我們之所以引入 IPetShopCacheDependency 接口,其目的就在于獲得創(chuàng)建了依賴項(xiàng)的 AggregateCacheDependency 類 型的對(duì)象。我們可以調(diào)用對(duì)象的接口方法 GetDependency(),如下所示: AggregateCacheDependency dependency = ().GetDependency()。 為了方便調(diào)用者,似乎我們可以對(duì) DependencyAccess 類進(jìn)行改進(jìn),將原有的CreateCategoryDependency()方法,修改為創(chuàng)建 AggregateCacheDependency 類型對(duì)象的方法。 然而這樣的做法擾亂 了作為工廠類的 DependencyAccess 的本身職責(zé),且創(chuàng)建IPetShopCacheDependency 接口對(duì)象的行為仍然有可能被調(diào)用者調(diào)用,所以保留原有的 DependencyAccess 類仍然是有必要的。 在 PetShop 的設(shè)計(jì)中,是通過(guò)引入 Facade 模式以方便調(diào)用者更加簡(jiǎn)單地獲得 AggregateCacheDependency 類型對(duì)象。 引入 Facade 模式 利用 Facade 模式可以將一些復(fù)雜的邏輯進(jìn)行包裝,以方便調(diào)用者對(duì)這些復(fù)雜邏輯的調(diào)用。就好像提供一個(gè)統(tǒng)一的門面一般,將 內(nèi)部的子系統(tǒng)封裝起來(lái),統(tǒng)一為一個(gè)高層次的接口。一個(gè)典型的 Facade 模式示意圖如下所示: 圖 44 Facade 模式 Facade 模式的目的并非要引入一個(gè)新的功能,而是在現(xiàn)有功能的基礎(chǔ)上提供一個(gè)更高層次的抽象,使
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1