petshop4.0详解三:PetShop数据访问层之消息处理
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-04-12
pe.Automatic; return (OrderInfo)((Message)base.Receive()).Body; } public orderInfo Receive(int timeout) { base.timeout = TimeSpan.FromSeconds(Convert.ToDouble(timeout)); return Receive(); } public void Send(OrderInfo orderMessage) { // This method does not involve in distributed transaction and optimizes performance using Single type base.transactionType = MessageQueueTransactionType.Single; base.Send(orderMessage); } 所以,最后的类图应该如下: 注意在Order类的Receive()方法中,是用new关键字而不是override关键字来重写其父类PetShopQueue的Receive()虚方法。因此,如果是实例化如下的对象,将会调用PetShopQueue的Receive()方法,而不是子类Order的Receive()方法: PetShopQueue queue = new order(); queue.Receive(); 从设计上来看,由于PetShop采用“面向接口设计”的原则,如果我们要创建Order对象,应该采用如下的方式: IOrder order = new order(); order.Receive(); 考虑到IOrder的实现有可能的变化,PetShop仍然利用了工厂模式,将IOrder对象的创建用专门的工厂模块进行了封装: 在类QueueAccess中,通过CreateOrder()方法利用反射技术创建正确的IOrder类型对象: public static PetShop.IMessaging.IOrder CreateOrder() { string className = path + ".Order"; return PetShop.IMessaging.IOrder)Assembly.Load(path).CreateInstance(className); } path的值通过配置文件获取: private static readonly string path = ConfigurationManager.AppSettings["OrderMessaging"]; 而配置文件中,OrderMessaging的值设置如下: <add key="OrderMessaging" value="PetShop.MSMQMessaging"/> 之所以利用工厂模式来负责对象的创建,是便于在业务层中对其调用,例如在BLL模块中OrderAsynchronous类: public class orderAsynchronous : IOrderStrategy { private static readonly PetShop.IMessaging.IOrder asynchOrder = PetShop.MessagingFactory.QueueAccess.CreateOrder(); public void Insert(PetShop.Model.OrderInfo order) { asynchOrder.Send(order); } } 一旦IOrder接口的实现发生变化,这种实现方式就可以使得客户仅需要修改配置文件,而不需要修改代码,如此就可以避免程序集的重新编译和部署,使得系统能够灵活应对需求的改变。例如定义一个实现IOrder接口的SpecialOrder,则可以新增一个模块,如PetShop.SpecialMSMQMessaging,而类名则仍然为Order,那么此时我们仅需要修改配置文件中OrderMessaging的值即可: <add key="OrderMessaging" value="PetShop.SpecialMSMQMessaging"/> OrderProcessor是一个控制台应用程序,不过可以 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于petshop4.0详解三:PetShop数据访问层之消息处理的所有评论