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

正文內(nèi)容

petshop的系統(tǒng)架構(gòu)設(shè)計(參考版)

2025-07-02 18:28本頁面
  

【正文】 從職責(zé)分離與分層設(shè)計的角度分析,我更希望這些Proxy對象是被定義在業(yè)務(wù)邏輯層中,而不像在PetShop的設(shè)計那樣,被劃分到表示層UI中。引入Proxy模式,實現(xiàn)了在緩存級別上對業(yè)務(wù)對象的封裝,增強(qiáng)了對業(yè)務(wù)對象的控制。 }}與業(yè)務(wù)邏輯層Product對象的GetProductsByCategory()方法相比,增加了緩存機(jī)制。 return data。 // Store the output in the data cache, and Add the necessary AggregateCacheDependency object AggregateCacheDependency cd = ()。 { // Check if the data exists in the data cache IList data = (IList )[key]。 string key = “product_by_category_” + category。 return (category)。 { private static readonly bool enableCaching = ([”EnableCaching”])。 private static readonly int productTimeout = ([”ProductCacheDuration”])。也即是說,我們需要引入一個新的對象去控制原來的BLL業(yè)務(wù)對象,這個新的對象就是Proxy模式中的代理對象。為了改善系統(tǒng)性能,我們就需要為這些實現(xiàn)方法增加緩存機(jī)制的邏輯。 }}顯示頁面title的邏輯是放在Page_Load事件方法中,因而每次打開該頁面都要執(zhí)行獲取CategoryName的方法。 = ([”categoryId”])。 protected void Page_Load(object sender, EventArgs e)}GetCategoryName()方法首先會檢查緩存中是否已經(jīng)存在CategoryName數(shù)據(jù)項,如果已經(jīng)存在,就通過緩存直接獲取數(shù)據(jù);否則將通過業(yè)務(wù)邏輯層調(diào)用數(shù)據(jù)訪問層訪問數(shù)據(jù)庫獲得CategoryName,在獲得了CategoryName后,會將新獲取的數(shù)據(jù)連同DependencyFacade類創(chuàng)建的AggregateCacheDependency對象添加到緩存中。 } (cacheKey, data, cd, (cacheDuration), , , null)。 AggregateCacheDependency cd = ()。 data = (categoryId).Name。 int cacheDuration = ([”CategoryCacheDuration”])。 string data = (string)[cacheKey]。 string cacheKey = (CATEGORY_NAME_KEY, categoryId)。 if (!enableCaching),靜態(tài)類WebUtility的GetCategoryName()和GetProductName()方法調(diào)用了DependencyFacade類。 }}DependencyFacade類封裝了獲取AggregateCacheDependency類型對象的邏輯,如此一來,調(diào)用者可以調(diào)用相關(guān)方法獲得創(chuàng)建相關(guān)依賴項的AggregateCacheDependency類型對象:AggregateCacheDependency dependency = ()。 return null。 if (!(path)) public static AggregateCacheDependency GetItemDependency() else return ().GetDependency()。 { } return null。 if (!(path)) public static AggregateCacheDependency GetCategoryDependency() private static readonly string path = [”CacheDependencyAssembly”]。一個典型的Facade模式示意圖如下所示:圖44 Facade模式Facade模式的目的并非要引入一個新的功能,而是在現(xiàn)有功能的基礎(chǔ)上提供一個更高層次的抽象,使得調(diào)用者可以直接調(diào)用,而不用關(guān)心內(nèi)部的實現(xiàn)方式。 引入Facade模式利用Facade模式可以將一些復(fù)雜的邏輯進(jìn)行包裝,以方便調(diào)用者對這些復(fù)雜邏輯的調(diào)用。在PetShop ,是通過引入Facade模式以方便調(diào)用者更加簡單地獲得AggregateCacheDependency類型對象。為了方便調(diào)用者,似乎我們可以對DependencyAccess類進(jìn)行改進(jìn),將原有的CreateCategoryDependency()方法,修改為創(chuàng)建AggregateCacheDependency類型對象的方法。圖43 CacheDependency工廠雖然DependencyAccess類創(chuàng)建了實現(xiàn)了IPetShopCacheDependency接口的類Category、Product、Item,然而我們之所以引入IPetShopCacheDependency接口,其目的就在于獲得創(chuàng)建了依賴項的AggregateCacheDependency類型的對象。 { } return LoadInstance(”Item”)。 public static IPetShopCacheDependency CreateItemDependency() { } return LoadInstance(”Category”)。 public static IPetShopCacheDependency CreateCategoryDependency()類DependencyAccess即為創(chuàng)建IPetShopCacheDependency對象的工廠類:public static class DependencyAccess{由于它們的父類TableDependency實現(xiàn)了接口IPetShopCacheDependency,因而它們也間接實現(xiàn)了IPetShopCacheDependency接口,這為實現(xiàn)工廠模式提供了前提。 public Product() : base(”ProductTableDependency”) { }}如果需要自定義CacheDependency,那么創(chuàng)建依賴項的方式又有不同。由于接口方法GetDependency()的實現(xiàn)中,返回的對象dependency是在受保護(hù)的構(gòu)造函數(shù)創(chuàng)建的,因此這里的實現(xiàn)方式也可以看作是Template Method模式的靈活運(yùn)用。 }},其設(shè)置如下:根據(jù)各個數(shù)據(jù)表間的依賴關(guān)系,因而不同的數(shù)據(jù)表需要建立的依賴項也是不相同的,從配置文件中的value值可以看出。 return dependency。 } (new SqlCacheDependency(dbName, tableName))。 { // This is the separator that’s used in AggregateCacheDependency類起到了組合CacheDependency對象的作用,它可以將多個CacheDependency對象甚至于不同類型的CacheDependency對象與緩存項建立關(guān)聯(lián)。} Framework ,它負(fù)責(zé)監(jiān)視依賴項對象的集合。在PetShop ,定義了名為IPetShopCacheDependency接口,它僅包含了一個接口方法:public interface IPetShopCacheDependency{然而為了保證整個架構(gòu)的可擴(kuò)展性,我們也允許設(shè)計者建立自定義的CacheDependency類,用以擴(kuò)展緩存依賴。當(dāng)對應(yīng)的數(shù)據(jù)表數(shù)據(jù)發(fā)生更改后,該技術(shù)能夠?qū)⑾嚓P(guān)項從緩存中移除。在PetShop ,這一問題并沒有得到很好的解決。因而在對其進(jìn)行體系架構(gòu)設(shè)計時,整個系統(tǒng)的性能就顯得殊為重要。 在PetShop PetShop作為一個B2C的寵物網(wǎng)上商店,需要充分考慮訪客的用戶體驗,如果因為數(shù)據(jù)量大而導(dǎo)致Web服務(wù)器的響應(yīng)不及時,頁面和查詢數(shù)據(jù)遲遲得不到結(jié)果,會因此而破壞客戶訪問網(wǎng)站的心情,在耗盡耐心的等待后,可能會失去這一部分客戶。雖然說編程方式賦予了程序員更大的靈活性,但aspnet_regsql工具卻提供了更簡單的方法實現(xiàn)對SqlCacheDependency的配置與管理。如果要調(diào)用表41中所示的相關(guān)方法,需要注意的是訪問SQL Server數(shù)據(jù)庫的帳戶必須具有創(chuàng)建表和存儲過程的權(quán)限。 (connectionStr)。 { if (!IsPostBack)Database=MSPetShop4″。 利用SqlCacheDependencyAdmin類我們也可以利用編程的方式來來管理數(shù)據(jù)庫對SqlCacheDependency特性的使用。當(dāng)對Product數(shù)據(jù)表執(zhí)行Insert、Update或Delete等操作時,就會激活觸發(fā)器,然后執(zhí)行AspNet_SqlCacheUpdateChangeIdStoredProcedure存儲過程。 SET NOCOUNT ON例如Product數(shù)據(jù)表的觸發(fā)器:CREATE TRIGGER dbo.[Product_AspNet_SqlCacheNotification_Trigger] ON [Product]changeId作為一個類型為int的字段,用于記錄數(shù)據(jù)表數(shù)據(jù)發(fā)生變化的次數(shù)。字段tableName記錄要追蹤的數(shù)據(jù)表的名稱,例如在PetShop ,要記錄的數(shù)據(jù)表就包括Category、Item和Product。我們還可以對相關(guān)的數(shù)據(jù)表執(zhí)行aspnet_regsql命令,如:aspnet_regsql S localhost E d MSPetShop4 t Item etaspnet_regsql S localhost E d MSPetShop4 t Product etaspnet_regsql S localhost E d MSPetShop4 t Category et當(dāng)執(zhí)行上述的四條命令后,aspnet_regsql工具會在MSPetShop4數(shù)據(jù)庫中建立一個名為AspNet_SqlCacheTablesForChangeNotification的新數(shù)據(jù)庫表。 列出當(dāng)前數(shù)據(jù)庫中有哪些表已經(jīng)采用sqlcachedependency功能。 允許對數(shù)據(jù)表采用SqlCacheDependency功能;dt 允許對數(shù)據(jù)庫使用SqlCacheDependency功能;dd 后接參數(shù)為對哪一個數(shù)據(jù)庫采用SqlCacheDependency功能;t 后接的參數(shù)為數(shù)據(jù)庫的登陸密碼;E 后接的參數(shù)為數(shù)據(jù)庫服務(wù)器的名稱或者IP地址;U以PetShop ,數(shù)據(jù)庫名為MSPetShop4,則命令為:aspnet_regsql S localhost E d MSPetShop4 ed以下是該工具的命令參數(shù)說明:? 利用aspnet_regsql工具aspnet_regsql工具位于Windows\\Framework\[版本]文件夾中。有兩種方法配置SQL Server:使用aspnet_regsql命令行工具,或者使用SqlCacheDependencyAdmin類。解決的辦法就是利用輪詢機(jī)制, Server數(shù)據(jù)庫,以跟蹤數(shù)據(jù)的變化情況。由于版本的原因,SQL Server 2005完全支持SqlCacheDependency特性,但對于SQL Server Server 2000而言,就沒有如此幸運(yùn)了。通過該類,可以在所有支持的SQL Server版本(,2000,2005)上監(jiān)視特定的SQL Server數(shù)據(jù)庫表,并創(chuàng)建依賴于該表以及表中數(shù)據(jù)行的緩存項。事實上,在PetShop ,就充分地利用了SqlCacheDependency特性。所幸的是,.Net Framework ,它為我們的“魚與熊掌兼得”帶來了技術(shù)上的可行性。那么我們是否應(yīng)該為了追求高性能,而不顧所謂“數(shù)據(jù)過期”所帶來的隱患呢?顯然,在類似于股票系統(tǒng)這種數(shù)據(jù)更新頻繁的特定場景下,數(shù)據(jù)過期的糟糕表現(xiàn)甚至比低效的性能更讓人難以接受。一旦應(yīng)用程序數(shù)據(jù)或者頁面結(jié)果值發(fā)生的改變,那么在緩存有效期范圍內(nèi),你所獲得的結(jié)果將是過期的、不準(zhǔn)確的數(shù)據(jù)。通過ACT(Application Center Test)的測試,可以發(fā)現(xiàn)設(shè)置緩存后執(zhí)行的性能比未設(shè)置緩存時的性能足足提高三倍多。這就有效地避免了因為值的不同而導(dǎo)致輸出錯誤的數(shù)據(jù)。使用VaryByParam參數(shù)可以根據(jù)設(shè)置的參數(shù)值建立不同的緩存。Duration參數(shù)用于設(shè)置頁面或控件進(jìn)行緩存
點(diǎn)擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1