《解剖PetShop》系列之3

《解剖PetShop》系列之3

ID:42565544

大小:109.00 KB

页数:13页

时间:2019-09-17

《解剖PetShop》系列之3_第1页
《解剖PetShop》系列之3_第2页
《解剖PetShop》系列之3_第3页
《解剖PetShop》系列之3_第4页
《解剖PetShop》系列之3_第5页
资源描述:

《《解剖PetShop》系列之3》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、PetShop数据访问层之消息处理  在进行系统设计时,除了对安全、事务等问题给与足够的重视外,性能也是一个不可避免的问题所在,尤其是一个B/S结构的软件系统,必须充分地考虑访问量、数据流量、服务器负荷的问题。解决性能的瓶颈,除了对硬件系统进行升级外,软件设计的合理性尤为重要。  在前面我曾提到,分层式结构设计可能会在一定程度上影响数据访问的性能,然而与它给设计人员带来的好处相比,几乎可以忽略。要提供整个系统的性能,还可以从数据库的优化着手,例如连接池的使用、建立索引、优化查询策略等等,例如在PetShop中就利用了数据库

2、的Cache,对于数据量较大的订单数据,则利用分库的方式为其单独建立了Order和Inventory数据库。而在软件设计上,比较有用的方式是利用多线程与异步处理方式。  在PetShop4.0中,使用了MicrosoftMessagingQueue(MSMQ)技术来完成异步处理,利用消息队列临时存放要插入的数据,使得数据访问因为不需要访问数据库从而提供了访问性能,至于队列中的数据,则等待系统空闲的时候再进行处理,将其最终插入到数据库中。  PetShop4.0中的消息处理,主要分为如下几部分:消息接口IMessaging、

3、消息工厂MessagingFactory、MSMQ实现MSMQMessaging以及数据后台处理应用程序OrderProcessor。  从模块化分上,PetShop自始自终地履行了“面向接口设计”的原则,将消息处理的接口与实现分开,并通过工厂模式封装消息实现对象的创建,以达到松散耦合的目的。  由于在PetShop中仅对订单的处理使用了异步处理方式,因此在消息接口IMessaging中,仅定义了一个IOrder接口,其类图如下:  在对消息接口的实现中,考虑到未来的扩展中会有其他的数据对象会使用MSMQ,因此定义了一个Q

4、ueue的基类,实现消息Receive和Send的基本操作:publicvirtualobjectReceive(){   try{     using(Messagemessage=queue.Receive(timeout,transactionType))      returnmessage;   }   catch(MessageQueueExceptionmqex){     if(mqex.MessageQueueErrorCode==MessageQueueErrorCode.IOTimeout)     

5、 thrownewTimeoutException();        throw;   }}publicvirtualvoidSend(objectmsg){   queue.Send(msg,transactionType);}  其中queue对象是System.Messaging.MessageQueue类型,作为存放数据的队列。MSMQ队列是一个可持久的队列,因此不必担心用户不间断地下订单会导致订单数据的丢失。在PetShopQueue设置了timeout值,OrderProcessor会根据timeout值定期

6、扫描队列中的订单数据。  MSMQMessaging模块中,Order对象实现了IMessaging模块中定义的接口IOrder,同时它还继承了基类PetShopQueue,其定义如下:  publicclassOrder:PetShopQueue,PetShop.IMessaging.IOrder  方法的实现代码如下:publicnewOrderInfoReceive()  {    //ThismethodinvolvesindistributedtransactionandneedAutomaticTransact

7、iontype    base.transactionType=MessageQueueTransactionType.Automatic;    return(OrderInfo)((Message)base.Receive()).Body;  }  publicOrderInfoReceive(inttimeout)  {    base.timeout=TimeSpan.FromSeconds(Convert.ToDouble(timeout));    returnReceive();  }    publicvo

8、idSend(OrderInfoorderMessage)  {    //ThismethoddoesnotinvolveindistributedtransactionandoptimizesperformanceusingSingletype    base.transactionType=Mes

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。