采用Agile Framework框架开发企业应用程序会编写大量的业务组件,这些组件都是被作为插件插入到框架中,结构上是完全解耦的。虽然按照SOA的设计理念在每个子系统之间不应该存在直接通信,但是有时候也可能需要在组件之间通信,比如和基础子系统或工作流组件通信。
因为,为了能保持最大程度的保持组件之间解耦状态,Agile Framework提供了组件之间的事件自动连接机制(Castle也提供了一个EventWiringFacility,提供了同样的功能,但是有一个比较严重的Bug:假如在系统中存在相互之间都有发布和订阅关系的组件就会造成死循环)。
在Agile Framework中使用自动事件连接非常简单,只需要对发布的事件打上EventPublisher特性,然后在订阅方法上打上EventSubscriber标记,框架就会自动的把具有相同eventkey的事件连接起来:
public class Publisher
{
[EventPublisher("eventkey", "description")]
public event EventHandler<CommonEventArgs<String>> EventPublished;
public void RaiseEvent(string data)
{
if (EventPublished != null)
EventPublished(this, new CommonEventArgs<String>(data));
}
}
public class Substriber
{
private string recievedArgs;
[EventSubscriber("eventkey")]
public void EventSubstribe(object sender, CommonEventArgs<String> args)
{
recievedArgs = args.Args;
}
}
{
[EventPublisher("eventkey", "description")]
public event EventHandler<CommonEventArgs<String>> EventPublished;
public void RaiseEvent(string data)
{
if (EventPublished != null)
EventPublished(this, new CommonEventArgs<String>(data));
}
}
public class Substriber
{
private string recievedArgs;
[EventSubscriber("eventkey")]
public void EventSubstribe(object sender, CommonEventArgs<String> args)
{
recievedArgs = args.Args;
}
}
这样,当Publisher触发了EventPublished之后,Substriber就会接受到这个事件。
关于Agile Framework更多信息请访问:敏捷实验室