基于消息的应用框架
框架主要由以下几部份组成:
消息(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等)
框架类图描述
框架还在设计阶段,有些功能还不具备,这么早公布出来主要是想大家提下意见和想法.