基于消息的应用框架

       我们经常为调用不同的功能时显式创建不同的业务类进行调用,这种调用关系是紧密依赖的;很多时候采用工厂模式来进行分离.基于消息的应用框架就是采用工厂模式的原理并细化.在际实工作中开发人员并不需了解有那些业务功能类,只需要向业务容器发送相应功能的消息;业务容器收到消息后会进行分析并启动执行相关的业务功能.由于消息和业务类是分离描述的,所以可以很方便地在不改变原有代码的情况插入新的功能.框架还织入了上下文对象,事务处理用于解决了对象信息共享和事务问题,从而使开发人员有更多的精力在业务功能设计上.

 

框架主要由以下几部份组成:

消息(IMessage)

         在框架中消息是用于描述需要做什么,可以说是消息处理容器的一条指命;定义一条自己的消息只需要实现框架的IMessage接口; IMessage接口并没有任何成员,只是用于标识是框架处理的消息.

public class BusinessMessage:Messages.IMessage

          {

  }

消息处理容器(DispenseContainer)

容器是用于接收消息和分发处理.容器只有一个切入点用于接收消息处理完成后返回消息给调用对象.

Messages.DispenseContainer container = Messages.DispenseContainer.OpenConfig();

Messages.IMessage msg = container.Incept(new BusinessObjects.BusinessMessage());

消息和业务对象关系描述(MessageSectionHandler)

框架是以XML配置文件的方式来描述消息和业务对象之间的关系.可以任意为消息类型配置一个或多个业务对象.

<message type="类型名称,程序集" transaction="消息处理通道是否具备事务功能">

                       <export type="类型名称,程序集" single="是否单一实例化"/>

                      

</message>

上下文对象(MessageContext)

上下文对象可以很好地解决对象之间信息共享的问题,只要业务对象在消息通道里执行就可以得到该对象的访权.

public class BObject1:Messages.IDispense

    {

        #region IDispense Members

 

        Messages.IMessage Messages.IDispense.Export(Messages.IMessage message)

        {

            if (Messages.MessageContext.Current.Properties.Contains("name"))

            {

                Messages.MessageContext.Current.Properties["name"] =

                    Messages.MessageContext.Current.Properties["name"] + "\n\r" + this.ToString();

            }

            else

            {

                Messages.MessageContext.Current.Properties["name"] = this.ToString();

            }

              Console.Write(Messages.MessageContext.Current.Properties["name"]+"\n");

            return new Counter();

 

        }

 

        #endregion

}
 事务处理

框架对消息通道集成了事务处理能力,可以在消息和业务对象关系描述里设置该类型的消息通道是否具备事务能力;如果具备事务,在通道里所有业务对象都会运行在事务环境中.事务由COM+提供,对于业务对象存在无状态调用时是得不到事务的保证(如果调WebService等)

框架类图描述

框架还在设计阶段,有些功能还不具备,这么早公布出来主要是想大家提下意见和想法.

相关事例和源码

posted on 2006-01-05 21:52  henry  阅读(1475)  评论(0编辑  收藏  举报

导航