一种基于配置的在界面元素之间传递消息的方法

文档序号:6651762阅读:285来源:国知局
专利名称:一种基于配置的在界面元素之间传递消息的方法
技术领域
本发明涉及一种计算机应用技术,具体说是提供了一种基于配置的在界面元素之 间传递消息的方法,解决了界面元素之间如何灵活高效稳定的发布、订阅、接受、处理消息。
背景技术
现有的管理信息系统大多没有实现界面元素消息的可配置管理,需要进行消息交 互的界面元素一般是高度耦合的,界面元素间传递消息需根据需求不断改变代码,致使灵 活性不高,效率低下。故提出一种基于配置的在界面元素之间传递消息的方法,用XML配 置界面元素和界面消息,按不同需求确定谁发布消息,谁订阅消息等,实现界面元素之间灵 活、高效、稳定的传递消息。

发明内容
本发明提供了一种基于配置的在界面元素之间传递消息的方法。本发明的目的是按以下方式实现的,包括界面元素和界面消息基于XML配置,消 息传递使用观察者模式和发布订阅模式,界面元素之间完全松耦合,界面元素消息可自由 扩展,界面元素基于消息接口。用XML配置界面元素和界面消息,按不同需求确定谁发布何 种消息,谁订阅此种消息等,实现界面元素之间灵活、高效、稳定的消息传递。包括如下内容1)参与消息过程的界面元素和界面消息的类型基于XML进行配置;界面元素消息 可自由扩展;界面元素基于消息接口 ;通过消息处理服务类,使用观察者模式和发布订阅 模式解耦界面元素;界面元素之间完全松耦合。2)参与消息过程的界面元素和界面消息的类型基于XML进行配置。其定义代码

< xml version二"1.0〃 encoding=〃utf-8〃 > 〈Messages〉
〈Message ID='' Type=' ' Publisher=,' Subscripers=,,,/> 〈/Messages〉3)界面元素消息可自由扩展。扩展方式是从消息抽象基类派生新的消息类。消息
抽象基类实现代码为public abstract class BIMessage {
III <summary) III消息描述 III </summary)
public virtual string Description { get; set; }
}4)界面元素实现消息接口。消息接口实现代码为
delegate void PublishMessage(IEleraent sender, BIMessage message);
public interface IElement
{
III <summary)
III处理自己订阅的消息
III </summary)
void DealMessage(IElement sender, BIMessage message);
III <summary) III对外发布消息 III </summary>
public PublishMessage OnMessagePublish;
}5)通过消息处理服务类,使用观察者模式和发布订阅模式解耦界面元素。界面元 素发布消息后,由消息处理服务类负责把消息分发给相应的界面元素。消息信息(对应于XML配置信息)定义代码为public class ElementMessageInfo
{
III <summary) III消息的I D
III </summary)
public string ID { get; set; }
III III III
<summary) 消息实现类全称 </summary)public string Type { get; set; }
III <summary)
///发布消息的界面元素
III </sumraary>
public IElement Publisher { get; set; } III <summary)
III订阅消息的界面元素的ID III </summary)
public List< IElement> Subscripers { get; set; }
} 〃
消息处理服务类定义代码为
public class ElementMessageService
{
Public ElementMessageService() {
//从XML配置信息巾解析出所有消息,并由本类接受各界面元素发布//的
消息
Messages = XMLParser. ParseMessage();
foreach (ElementMessageInfo info in Messages)
{
Tnfo. Publisher. OnMessagePublish += DistributeMessage;
1
.)
III <summary) III所有的消息 /// </summary>
public List<ElementMessageInfo> Messages{get;set;}
III<summary)
III向所有订阅者分发消息
III</summary>
III<param name="sender"〉消息发布者</param>
III<param name~"msg" > S</param>
private void DistributeMessage(IElement sender, BIMessage msg)
{
ElementMessageInfo msglnfo = GetMessageInfo(sender, msg);
foreach (IElement subscripter in msglnfo. Subscripers) {
subscripter. DealMessage(sender, msg);
}
}
private ElementMessageInfo GetMessageInfo (IElement sender, BIMessage
msg)
{
ElementMessageInfo rtn = null;
foreach (ElementMessageInfo msglnfo in Messages)
{
if (msglnfo. Publisher == sender && msg. GetType(). Ful!Name ==
msglnfo. Type)
{
rtn = msglnfo; break;
ι
}
return rtn; }
ι6)界面元素之间完全松耦合。实现方式是界面元素实现消息接口,消息处理服务 把所有界面元素视作具有消息发布和订阅功能的消息接口。本发明的优异效果目前本发明大量应用在政府行业以及大型综合型集团企业 中,不仅能让界面元素之间灵活、高效、稳定的传递消息,并且能够在不同需求下快速、高效 修改配置,进行界面元素之间传递消息。该发明使得信息化系统的应用得到良好支持,具有 很高的推广和经济价值。
具体实施例方式为使本发明的优点、目的更容易理解、易懂,下面就具体的实施方式做一个详细说 明。1)定义消息从消息基类BIMessage派生新的消息,添加消息内容等属性。例如Public FiscalYearChangedMessage BIMessage {
Public string NewFiscalYear{get;set;} Public string OldFiscalYear{get;set;}
}2)定义界面元素界面元素需要实现IElement接口。例如
Public class CompanyInfo UserControl, IElement
{
void DealMessage(IElement sender, BIMessage message)
{
}
void PublishMessage(IElement sender, BIMessage message)
{
}
}3)在XML配置文件中设置在哪些界面元素之间传递何种消息,以及消息的发 送者和接受者。下文中的XML配置例子表示elementl(指界面元素的名称,下同)发送 FiscalYearChangedMessage 类型的消息给 element2 禾口 element3。〈Message ID = ‘ msgl ‘ Type =' FiscalYearChangedMessage' Publisher =’ elementl’ Subscripers =’ element2, element3’ ></Message>4)在窗体界面中,创建一个消息处理服务类ElementMessageService的实例即可。本发明的方法具有轻便小巧、灵活、高效、易于部署的特点,能解决界面元素之间 传递消息的问题。
权利要求
1. 一种基于配置的在界面元素之间传递消息的方法,其特征在于,内容包括1)参与 消息过程的界面元素和界面消息的类型基于XML进行配置;2)界面元素消息可自由扩展; 3)界面元素基于消息接口 ;4)通过消息处理服务类,使用观察者模式和发布订阅模式解耦 界面元素;5)界面元素之间完全松耦合;1)参与消息过程的界面元素和界面消息的类型基于XML进行配置;其定义代码如下 < xml version=〃l.0〃 encoding="utf-8〃 >〈Messages〉〈Message ID=,, Type=,, Publisher=,’ Subscripers=',' /> 〈/Messages〉2)“界面元素消息可自由扩展”,是从消息抽象基类派生新的消息类,消息抽象基类实 现代码为public abstract class BIMessage{III <summary)III消息描述 III </summary>public virtual string Description { get ; set ; }}3)“界面元素实现消息接口 ”,其特征在于,界面元素实现消息接口,消息接口实现代码为delegate void PublishMessage(!Element sender,BIMessage message);public interface IElement{III <summary)III处理自己订阅的消息III </summary)void DealMessage(IElement sender, BIMessage message);III <summary〉 III对外发布消息 III </summary)public PublishMessage OnMessagePublish;}4)“通过消息处理服务类,使用观察者模式和发布订阅模式解耦界面元素”,界面元素 发布消息后,由消息处理服务类负责把消息分发给相应的界面元素,对应于XML配置信息的定义代码为public class ElementMessageInfo {III <summary) III消息的ι D III </summary)public string ID { get; set ; }III <summary) III消息实现类全称 III </summary)public string Type { get; set; }III <summary)III发布消息的界面元素III </summary)public IElement Publisher { get ; set ; } III <summary)III订阅消息的界面元素的ID III </summary>public List< IElement> Subscripers { get; set; }}消息处理服务类定义代码为public class ElementMessageService{Publi c ElementMessageServico(){//从XML配置信息中解析出所有消息,并由本类接受各界面元素发布//的消息Messages 二 XMLParser. ParseMessageO ;foreach (ElementMessageInfo info in Messages){Info. Publisher. OnMessagePublish +二 DistributeMessage;}ι/// <summary) III所有的消息 ill </summary)public List<ElementMessageInfo> Messages{get;set;}III <summary)III向所有订阅者分发消息III </summary)III <param name="sender"〉消息发布者</param> ill <param name=//msg")^y§、</param>private void DistributeMessage (IKlernent sender, RlMessage msg) {ElementMessageInfo msglnfo = GetMessageInfo(sender, msg);foreach (IElement subscripter in msglnfo. Subscripers){subscripter. DealMessage(sender, msg); }}private ElementMessageInfo GetMessageInfo(IElement sender, BIMessagemsg){ElementMessageInfo rtn = null;foreach (ElementMessageInfo msglnfo in Messages) {if (msglnfo. Publisher 二= sender && msg. GetType(). FullName =msglnfo.Type) {rtn 二 msglnfo; break;return rtn;}.}5) “界面元素之间完全松耦合”,界面元素实现消息接口,消息处理服务把所有界面元 素都视作具有消息发布和订阅功能的消息接口。
全文摘要
本发明提供了一种基于配置的在界面元素之间传递消息的方法,解决了动态创建的界面元素之间的交互和控制问题。所述方法包括基于XML配置;观察者模式;发布订阅模式;完全松耦合;消息可自由扩展;界面元素基于特定接口。本发明大量应用在软件界面需要动态配置、自由组合的软件系统中,通过配置可以设置任意界面元素之间进行任意形式的消息通讯,具有很好的推广使用价值。
文档编号G06F9/54GK102110026SQ20111003488
公开日2011年6月29日 申请日期2011年2月9日 优先权日2011年2月9日
发明者王宏涛, 王涛威 申请人:浪潮集团山东通用软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1