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

正文內(nèi)容

petshop的系統(tǒng)架構(gòu)設(shè)計(jì)-免費(fèi)閱讀

  

【正文】 當(dāng)緩存內(nèi)不存在相關(guān)數(shù)據(jù)項(xiàng)時(shí),則直接調(diào)用業(yè)務(wù)邏輯層Product的GetProductsByCategory()方法來(lái)獲取數(shù)據(jù),并將其與對(duì)應(yīng)的AggregateCacheDependency對(duì)象一起存儲(chǔ)在緩存中。 public static IListGetProductsByCategory(string category)如果沒(méi)有采用緩存機(jī)制,當(dāng)Category數(shù)據(jù)較多時(shí),頁(yè)面的顯示就會(huì)非常緩慢。 // 通過(guò)Facade類創(chuàng)建AggregateCacheDependency對(duì)象。 {然而這樣的做法擾亂了作為工廠類的DependencyAccess的本身職責(zé),且創(chuàng)建IPetShopCacheDependency接口對(duì)象的行為仍然有可能被調(diào)用者調(diào)用,所以保留原有的DependencyAccess類仍然是有必要的。 return (IPetShopCacheDependency)(path).CreateInstance(fullyQualifiedClass)。 string fullyQualifiedClass = path + “.” + className。 string path = [”CacheDependencyAssembly”]。 {在PetShop ,依然利用了配置文件和反射技術(shù)來(lái)實(shí)現(xiàn)工廠模式。例如TableDependency的子類Product,就是利用父類的構(gòu)造函數(shù)建立了Product、Category數(shù)據(jù)表的SqlCacheDependency依賴:public class Product : TableDependency{ public AggregateCacheDependency GetDependency() protected AggregateCacheDependency dependency = new AggregateCacheDependency()。 AggregateCacheDependency GetDependency()。PetShop ,使得系統(tǒng)對(duì)緩存的處理較之以前大為改觀。如果要調(diào)用EnableTableForNotifications方法,還需要具有在該表上創(chuàng)建SQL Server觸發(fā)器的權(quán)限。那么為數(shù)據(jù)庫(kù)MSPetShop4啟用SqlCacheDependency對(duì)象更改通知的實(shí)現(xiàn)為:protected void Page_Load(object sender, EventArgs e){notificationCreated字段記錄開(kāi)始追蹤的時(shí)間。 禁止對(duì)數(shù)據(jù)庫(kù)采用SqlCacheDependency功能;et 顯示該工具的幫助功能;S Framework ,因此它并沒(méi)有實(shí)現(xiàn)自動(dòng)監(jiān)視數(shù)據(jù)表數(shù)據(jù)變化。故而,我們需要在性能與數(shù)據(jù)正確性間作出權(quán)衡。例如在一個(gè)輸出天氣預(yù)報(bào)結(jié)果的頁(yè)面中,如果需要為一個(gè)ID為txtCity的TextBox控件建立緩存,其值將顯示某城市的氣溫,那么我們可以進(jìn)行如下的設(shè)置: % OutputCache Duration=”60” VaryByParam=”txtCity” %如此一來(lái),只有輸入的值與緩存值相同,才從緩存中取出相應(yīng)的值。此時(shí),利用頁(yè)輸出緩存就可以將第一次搜索得到的查詢結(jié)果頁(yè)存儲(chǔ)在緩存中。(”Second”, “Second Item”)。放入緩存中的應(yīng)用程序數(shù)據(jù)對(duì)象,以鍵/值對(duì)的方式存儲(chǔ),這便于用戶在訪問(wèn)緩存中的數(shù)據(jù)項(xiàng)時(shí),可以根據(jù)key值判斷該項(xiàng)是否存在緩存中。緩存機(jī)制正是解決這一缺陷的加速器。 上述架構(gòu)是一個(gè)典型的分布式處理結(jié)構(gòu),而技術(shù)實(shí)現(xiàn)的核心就是MSMQ和EAI。 MSMQ在分布式處理的運(yùn)用,在我參與的項(xiàng)目中已經(jīng)有了實(shí)現(xiàn)。 } string className = [”O(jiān)rderStrategyClass”]。 ,并不是直接執(zhí)行插入訂單的操作,而是調(diào)用了IOrderStrategy接口的Insert()方法:public void Insert(OrderInfo order){ //batch plete or MSMQ receive timed out } } { try // queue timeout variables { 在類QueueAccess中,通過(guò)CreateOrder()方法利用反射技術(shù)創(chuàng)建正確的IOrder類型對(duì)象: ()。 public OrderInfo Receive(int timeout) return (OrderInfo)((Message)()).Body。 = 。 ,作為存放數(shù)據(jù)的隊(duì)列。 catch (MessageQueueException mqex) {從模塊化分上,PetShop自始自終地履行了“面向接口設(shè)計(jì)”的原則,將消息處理的接口與實(shí)現(xiàn)分開(kāi),并通過(guò)工廠模式封裝消息實(shí)現(xiàn)對(duì)象的創(chuàng)建,以達(dá)到松散耦合的目的。 在進(jìn)行系統(tǒng)設(shè)計(jì)時(shí),除了對(duì)安全、事務(wù)等問(wèn)題給與足夠的重視外,性能也是一個(gè)不可避免的問(wèn)題所在,尤其是一個(gè)B/S結(jié)構(gòu)的軟件系統(tǒng),必須充分地考慮訪問(wèn)量、數(shù)據(jù)流量、服務(wù)器負(fù)荷的問(wèn)題。//……這些實(shí)現(xiàn)邏輯散布于整個(gè)PetShop系統(tǒng)中,在我看來(lái),是可以在此基礎(chǔ)上進(jìn)行重構(gòu)的。// Look up the DAL implementation we should be using解決的辦法是“依賴注入”。而上面所述的兩個(gè)問(wèn)題,也都可以通過(guò)抽象工廠模式來(lái)解決。當(dāng)然,ORM框架并非是萬(wàn)能的,面對(duì)紛繁復(fù)雜的業(yè)務(wù)邏輯,它并不能完全消滅SQL語(yǔ)句,以及替代復(fù)雜的數(shù)據(jù)庫(kù)訪問(wèn)邏輯,但它卻很好的體現(xiàn)了“80/20(或90/10)法則”(也被稱為“帕累托法則”),也就是說(shuō):花比較少(10%20%)的力氣就可以解決大部分(80%90%)的問(wèn)題,而要解決剩下的少部分問(wèn)題則需要多得多的努力。 try ISession s = ()。同樣的道理,這些SQL語(yǔ)句也可以存放到XML文件中,更有利于系統(tǒng)的擴(kuò)展或修改。如果數(shù)據(jù)庫(kù)訪問(wèn)是由程序完成,我們僅需要在修改程序后,將重新編譯的程序集xcopy到部署的服務(wù)器上即可。這給程序的維護(hù)帶來(lái)極大的困難。尤其復(fù)雜的是Parameter的傳遞,在PetShop中,使用了大量的字符串常量來(lái)保存參數(shù)的名稱。將數(shù)據(jù)實(shí)體與其行為分開(kāi),使得兩者之間依賴減弱,當(dāng)數(shù)據(jù)行為發(fā)生改變時(shí),并不影響Model模塊中的數(shù)據(jù)實(shí)體對(duì)象,避免了因一個(gè)類職責(zé)過(guò)多、過(guò)大,從而導(dǎo)致該類的引用者發(fā)生“災(zāi)難性”的影響。這些對(duì)象并不具有持久化的功能,簡(jiǎn)單地說(shuō),它們是作為數(shù)據(jù)的載體,便于業(yè)務(wù)邏輯針對(duì)相應(yīng)數(shù)據(jù)表進(jìn)行讀/寫(xiě)操作。PetShop數(shù)據(jù)訪問(wèn)層之?dāng)?shù)據(jù)庫(kù)訪問(wèn)設(shè)計(jì)PetShop數(shù)據(jù)訪問(wèn)層之?dāng)?shù)據(jù)庫(kù)訪問(wèn)設(shè)計(jì)Filed under: Design amp。插入訂單的策略可以分為同步和異步,兩者的插入策略明顯不同,但對(duì)于調(diào)用者而言,插入訂單的接口是完全一樣的,所以PetShop 。因?yàn)閿?shù)據(jù)庫(kù)類型的不同,對(duì)數(shù)據(jù)庫(kù)的操作也有所不同,代碼也會(huì)因此有所區(qū)別。,將數(shù)據(jù)訪問(wèn)邏輯作為單獨(dú)的一層獨(dú)立出來(lái):圖四:PetShop ,但在性能上作了一定的改進(jìn),引入了緩存和異步處理機(jī)制, ,:圖五:PetShop ,其核心的內(nèi)容并沒(méi)有發(fā)生變化。有時(shí)會(huì)導(dǎo)致級(jí)聯(lián)的修改。降低層與層間的依賴性,既可以良好地保證未來(lái)的可擴(kuò)展,在復(fù)用性上也是優(yōu)勢(shì)明顯。概括來(lái)說(shuō),分層式設(shè)計(jì)可以達(dá)至如下目的:分散關(guān)注、松散耦合、邏輯復(fù)用、標(biāo)準(zhǔn)定義。業(yè)務(wù)邏輯層:是整個(gè)系統(tǒng)的核心,它與這個(gè)系統(tǒng)的業(yè)務(wù)(領(lǐng)域)有關(guān)。簡(jiǎn)單的說(shuō)法就是實(shí)現(xiàn)對(duì)數(shù)據(jù)表的Select,Insert,Update,Delete的操作。表示層中的邏輯代碼,僅與界面元素有關(guān)。松散耦合的好處是顯而易見(jiàn)的?!敖馃o(wú)足赤,人無(wú)完人”,分層式結(jié)構(gòu)也不可避免具有一些缺陷:降低了系統(tǒng)的性能。這樣的設(shè)計(jì)雖然提高了數(shù)據(jù)訪問(wèn)的性能,但也同時(shí)導(dǎo)致了業(yè)務(wù)邏輯層與數(shù)據(jù)訪問(wèn)的職責(zé)混亂。抽象出來(lái)的IDAL模塊,脫離了與具體數(shù)據(jù)庫(kù)的依賴,從而使得整個(gè)數(shù)據(jù)訪問(wèn)層利于數(shù)據(jù)庫(kù)遷移。如果此時(shí)需要修改數(shù)據(jù)訪問(wèn)層的具體實(shí)現(xiàn),只要不涉及到IDAL的接口定義,那么業(yè)務(wù)邏輯層就不會(huì)受到任何影響。所以表示層和業(yè)務(wù)邏輯層之間的調(diào)用關(guān)系,其耦合度相對(duì)較高:圖八:表示層的模塊結(jié)構(gòu)圖在圖五中,各個(gè)層次中還引入了輔助的模塊,如數(shù)據(jù)訪問(wèn)層的Messaging模塊,是為異步插入訂單的功能提供,采用了MSMQ(Microsoft Messaging Queue)技術(shù)。在PetShop中,系統(tǒng)需要處理的數(shù)據(jù)庫(kù)對(duì)象分為兩類:一是數(shù)據(jù)實(shí)體,對(duì)應(yīng)數(shù)據(jù)庫(kù)中相應(yīng)的數(shù)據(jù)表。由于這些業(yè)務(wù)邏輯對(duì)象,僅具有行為而與數(shù)據(jù)無(wú)關(guān),因此它們均被抽象為一個(gè)單獨(dú)的接口模塊IDAL,例如數(shù)據(jù)表Order對(duì)應(yīng)的接口IOrder:以O(shè)rder為例,在SQLServerDAL、OracleDAL兩個(gè)模塊中,有不同的實(shí)現(xiàn),但它們同時(shí)又都實(shí)現(xiàn)了IOrder接口,如圖:OracleHelper的類圖如下:一是存儲(chǔ)過(guò)程的測(cè)試相對(duì)困難。然而這種方式卻在性能上無(wú)法得到保證。例如在NHibernate中,我們可以直接調(diào)用ISession對(duì)象的Save方法,來(lái)Insert(或者說(shuō)是Create)一個(gè)數(shù)據(jù)實(shí)體對(duì)象:public void Insert(OrderInfo order){ }}沒(méi)有SQL語(yǔ)句,也沒(méi)有那些煩人的Parameters,甚至不需要專門去考慮事務(wù)。留待我們的還有兩個(gè)問(wèn)題需要解決:數(shù)據(jù)對(duì)象創(chuàng)建的管理利于數(shù)據(jù)庫(kù)的移植在PetShop中,要?jiǎng)?chuàng)建的數(shù)據(jù)對(duì)象包括Order,Product,Category,Inventory,Item。但這樣的設(shè)計(jì)雖然已經(jīng)達(dá)到了“封裝變化”的目的,但在創(chuàng)建PetShopFactory對(duì)象時(shí),仍不可避免的出現(xiàn)了具體的類SQLServerFactory,也即是說(shuō),程序在這個(gè)層面上產(chǎn)生了與SQLServerFactory的強(qiáng)依賴。那么,抽象工廠模式中的相關(guān)工廠就可以簡(jiǎn)化為一個(gè)工廠類了,所以我將這種模式稱之為“具有簡(jiǎn)單工廠特質(zhì)的抽象工廠模式”,其類圖如下:例如類DataAccess就可以簡(jiǎn)化為:public sealed class DataAccess{ Pattern — bruce zhang 12:11 pm 《解剖PetShop》系列之三三、PetShop數(shù)據(jù)訪問(wèn)層之消息處理 在前面我曾提到,分層式結(jié)構(gòu)設(shè)計(jì)可能會(huì)在一定程度上影響數(shù)據(jù)訪問(wèn)的性能,然而與它給設(shè)計(jì)人員帶來(lái)的好處相比,幾乎可以忽略。 return message。 if ( == )} 注意在Order類的Receive()方法中,是用new關(guān)鍵字而不是override關(guān)鍵字來(lái)重寫(xiě)其父類PetShopQueue的Receive()虛方法。 ()。 string className = path + “.Order”。 return )(path).CreateInstance(className)。 一旦IOrder接口的實(shí)現(xiàn)發(fā)生變化,這種實(shí)現(xiàn)方式就可以使得客戶僅需要修改配置文件,而不需要修改代碼,如此就可以避免程序集的重新編譯和部署,使得系統(tǒng)能夠靈活應(yīng)對(duì)需求的改變。它的目的就是接收消息隊(duì)列中的訂單數(shù)據(jù),然后將其插入到Order和Inventory數(shù)據(jù)庫(kù)中。 private static void ProcessOrders() { // Receive the orders from the queue j batchSize。 { //update elapsed time //exit loop because no more messages are waiting for (int k = 0。 processedItems++。 (order)。 ,仍然利用配置文件來(lái)動(dòng)態(tài)創(chuàng)建IOrderStategy對(duì)象:private static readonly orderInsertStrategy = LoadInsertStrategy()。 因?yàn)镃ache的存取速度比內(nèi)存快,因而引入Cache能夠有效的解決CPU與內(nèi)存之間的速度不匹配問(wèn)題。一種是應(yīng)用程序緩存,它允許開(kāi)發(fā)者將程序生成的數(shù)據(jù)或報(bào)表業(yè)務(wù)對(duì)象放入緩存中。它是一個(gè)密封類,不能被繼承。相對(duì)于應(yīng)用程序緩存而言,頁(yè)輸出緩存的應(yīng)用更為廣泛。Duration參數(shù)用于設(shè)置頁(yè)面或控件進(jìn)行緩存的時(shí)間,其單位為秒。一旦應(yīng)用程序數(shù)據(jù)或者頁(yè)面結(jié)果值發(fā)生的改變,那么在緩存有效期范圍內(nèi),你所獲得的結(jié)果將是過(guò)期的、不準(zhǔn)確的數(shù)據(jù)。通過(guò)該類,可以在所有支持的SQL Server版本(,2000,2005)上監(jiān)視特定的SQL Server數(shù)據(jù)庫(kù)表,并創(chuàng)建依賴于該表以及表中數(shù)據(jù)行的緩存項(xiàng)。 利用aspnet_regsql工具aspnet_regsql工具位于Windows\\Framework\[版本]文件夾中。 后接參數(shù)為對(duì)哪一個(gè)數(shù)據(jù)庫(kù)采用SqlCacheDependency功能;t我們還可以對(duì)相關(guān)的數(shù)據(jù)表執(zhí)行aspnet_regsql命令,如:asp
點(diǎn)擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1