3、PetShop数据访问层之消息处理
在进行系统设计时,除了对安全、事务等问题给与足够的重视外,性能也是一个不可避免的问题所在,尤其是一个 B/S 结构的软件系统,必须充分地考虑访问量、数据流量、服务器负荷的问题。解决性能的瓶颈,除了对硬件系统进行升级外,软件设计的合理性尤为重要。在前面我曾提到,分层式结构设计可能会在一定程度上影响数据访问的性能,然而与它给设计人员带来的好处相比,几乎可以忽略。要提供整个系统的性能,还可以从 数据库的优化着手,例如连接池的使用、建立索引、优化查询策略等等,例如在 PetShop 中就利用了数据库的 Cache,对于数据量较大的订单数据,则利用分库的方式为其单独建立了 Order 和 Inventory 数据库。而在软件设计上,比较有用的方式是利用多线程与异步处理方式。在 PetShop4.0 中,使用了 Microsoft Messaging Queue(MSMQ)技术来完成异步处理,利用消息队列临时存放要插入的数据,使得数据访问因为不需要访问数据库从而提供了访问性能,至于队列中的数 据,则等待系统空闲的时候再进行处理,将其最终插入到数据库中。PetShop4.0 中的消息处理,主要分为如下几部分:消息接口 IMessaging、消息工厂 MessagingFactory、MSMQ 实现 MSMQMessaging 以及数据后台处理应用程序OrderProcessor。从模块化分上,PetShop 自始自终地履行了“面向接口设计”的原则,将消息处理的接口与实现分开,并通过工厂模式封装消息实现对象的创建,以达到松散耦合的目的。由于在 PetShop 中仅对订单的处理使用了异步处理方式,因此在消息接口IMessaging 中,仅定义了一个 IOrder 接口,其类图如下:
