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

正文內(nèi)容

1、petshop的系統(tǒng)架構(gòu)設(shè)計petshop的系統(tǒng)架構(gòu)設(shè)計filedunder∶design(編輯修改稿)

2024-10-09 22:10 本頁面
 

【文章內(nèi)容簡介】 ing 模塊中定義的接口 IOrder,同時它還繼承了基類 PetShopQueue,其定義如下: public class Order:PetShopQueue, 方法的實現(xiàn)代碼如下: public new OrderInfo Receive() { // This method involves in distributed transaction and need Automatic Transaction type = 。 return (OrderInfo)((Message)()).Body。 } public OrderInfo Receive(int timeout) { = ((timeout))。 return Receive()。 } public void Send(OrderInfo orderMessage) { // This method does not involve in distributed transaction and optimizes performance using Single type = 。 (orderMessage)。 } 所以,最后的類圖應(yīng)該如下: 注意在 Order 類的 Receive()方法中,是用 new 關(guān)鍵字而不是 override關(guān)鍵字來重寫其父類 PetShopQueue 的 Receive()虛方法。因此,如果是實例化如下的對象,將會調(diào)用 PetShopQueue 的 Receive()方法,而 不是子類 Order 的Receive()方法: PetShopQueue queue = new Order()。 ()。 從設(shè)計上來看,由于 PetShop 采用 “ 面向接口設(shè)計 ” 的原則,如果我們要創(chuàng)建 Order 對象,應(yīng)該采用如下的方式: IOrder order = new Order()。 ()。 考慮到 IOrder 的實現(xiàn)有可能的變化, PetShop 仍然利用了工廠模式,將IOrder 對象的創(chuàng)建用專門的工廠模塊進(jìn) 行了封裝: 在類 QueueAccess 中,通過 CreateOrder()方法利用反射技術(shù)創(chuàng)建正確的 IOrder 類型對象: public static CreateOrder() { string className = path + “.Order”。 return )(path).CreateInstance(className)。 } path 的值通過配置文件獲?。? private static readonly string path = [”O(jiān)rderMessaging”]。 而配置文件中, OrderMessaging 的值設(shè)置如下: add key=”O(jiān)rderMessaging” value=””/ 之所以利用工廠模式來負(fù)責(zé)對象的創(chuàng)建,是便于在業(yè)務(wù)層中對其調(diào)用,例如在 BLL 模塊中 OrderAsynchronous 類: public class OrderAsynchronous : IOrderStrategy { private static readonly asynchOrder = ()。 public void Insert( order) { (order)。 } } 一旦 IOrder 接口的實現(xiàn)發(fā)生變化,這種實現(xiàn)方式就可以使得客戶僅需要修改配置文件,而不需要修改代碼,如此就可以避免程序集的重新編譯和部署,使得系統(tǒng)能夠靈活應(yīng)對需求的改變。例如定義一 個實現(xiàn) IOrder 接口的SpecialOrder,則可以新增一個模塊,如 ,而類名則仍然為 Order,那么此時我們僅需要修改配置文件中 OrderMessaging 的值即可: add key=”O(jiān)rderMessaging” value=””/ OrderProcessor 是一個控制臺應(yīng)用程序,不過可以根據(jù)需求將其設(shè)計為Windows Service。它的目的就是接收消息隊列中的訂 單數(shù)據(jù),然后將其插入到Order 和 Inventory 數(shù)據(jù)庫中。它利用了多線程技術(shù),以達(dá)到提高系統(tǒng)性能的目的。 在 OrderProcessor 應(yīng)用程序中,主函數(shù) Main 用于控制線程,而核心的執(zhí)行任務(wù)則由方法 ProcessOrders()實現(xiàn): private static void ProcessOrders() { // the transaction timeout should be long enough to handle all of orders in the batch TimeSpan tsTimeout = ((transactionTimeout * batchSize))。 Order order = new Order()。 while (true) { // queue timeout variables TimeSpan datetimeStarting = new TimeSpan()。 double elapsedTime = 0。 int processedItems = 0。 ArrayList queueOrders = new ArrayList()。 using (TransactionScope ts = new TransactionScope(, tsTimeout)) { // Receive the orders from the queue for (int j = 0。 j batchSize。 j++) { try { //only receive more queued orders if there is enough time if ((elapsedTime + queueTimeout + transactionTimeout) ) { d((queueTimeout))。 } else { j = batchSize。 // exit loop } //update elapsed time elapsedTime = new TimeSpan().TotalSeconds 。 } catch (TimeoutException) { //exit loop because no more messages are waiting j = batchSize。 } } //process the queued orders for (int k = 0。 k 。 k++) { ((OrderInfo)queueOrders[k])。 processedItems++。 totalOrdersProcessed++。 } //batch plete or MSMQ receive timed out ()。 } ((Thread Id + + ) batch finished, + processedItems + items, in + () + seconds.)。 } } 首先,它會通過 類的公共方法 ReceiveFromQueue()來獲取消息隊列中的訂單數(shù)據(jù),并將其放入到一個 ArrayList 對象中,然而再調(diào)用 類的 Insert 方法將其插入到 Order 和 Inventory 數(shù)據(jù)庫中。 在 類中,并不是直接執(zhí)行插入訂單的操作,而是調(diào)用了 IOrderStrategy 接口的 Insert()方法: public void Insert(OrderInfo order) { // Call credit card procesor ProcessCreditCard(order)。 // Insert the order (a)synchrounously based on configuration (order)。 } 在這里,運用了一個策略模式,類圖如下所示: 在 類中,仍然利用配置文件來動態(tài)創(chuàng)建IOrderStategy 對象: private static readonly orderInsertStrategy = LoadInsertStrategy()。 private static LoadInsertStrategy() { // Look up which strategy to use from config file string path = [”O(jiān)rderStrategyA ssembly”]。 string className = [”O(jiān)rderStrategyClass”]。 // Using the evidence given in the config file load the appropriate assembly and class return ()(path).CreateInstance(className)。 } 由于 OrderProcessor 是一個單獨的應(yīng)用程序,因此它使用的配置文件與PetShop 不同,是存放在應(yīng)用程序的 文件中,在該文件中,對IOrderStategy 的配置為: add key=”O(jiān)rderStrategyAssembly” value=”” / add key=”O(jiān)rderStrategyClass” value=”” / 因此,以異步方式插入訂單的流程如下圖所示: Microsoft Messaging Queue(MSMQ)技術(shù)除用于異步處理以外,它主要還是一種分布式處理技術(shù)。分布式處理中,一個重要的技術(shù)要素就是有關(guān)消息的處理,而在 命名空 間中,已經(jīng)提供了 Message 類,可以用于承載消息的傳遞,前提上消息的發(fā)送方與接收方在數(shù)據(jù)定義上應(yīng)有統(tǒng)一的接口規(guī)范。 MSMQ 在分布式處理的運用,在我參與的項目中已經(jīng)有了實現(xiàn)。在為一個汽車制造商開發(fā)一個大型系統(tǒng)時,分銷商 Dealer 作為 .Net 客戶端,需要將數(shù)據(jù)傳遞到管理中心,并且該數(shù)據(jù)將被 Oracle 的 EBS(EBusiness System)使用。由于分銷商管理系統(tǒng)( DMS)采用的是 C/S結(jié)構(gòu),數(shù)據(jù)庫為 SQL Server,而汽車制造商管理中心的 EBS 數(shù)據(jù)庫為 Oracle。這里就涉及到兩個系統(tǒng) 之間數(shù)據(jù)的傳遞。 實現(xiàn)架構(gòu)如下: 首先 Dealer 的數(shù)據(jù)通過 MSMQ 傳遞到 MSMQ Server,此時可以將數(shù)據(jù)插入到 SQL Server 數(shù)據(jù)庫中,同時利用 FTP 將數(shù)據(jù)傳送到專門的文件服務(wù)器上。然后利用 IBM 的 EAI 技
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1