我知道什么是“通常”的中介设计模式(一些描述在维基百科:http://en.wikipedia.org/wiki/Mediator_pattern)。在我的SOA中,我有通知服务:他应该将消息从一个服务广播到订阅此特定服务的所有其他服务。实际上,任何服务都可以成为此类消息的来源。
我对此类服务实现的看法导致服务之间的循环依赖。在这里(Circular dependency in SOA) 我已经问过如何解决它并收到建议,为此目的使用'Mediator'模式。
如果我理解正确,我的通知服务应签订合同:
interface IMediator
{
void PublishMessage(IMessage message);
}
服务应实现(主持)此接口并将其作为服务外部公开。
任何订阅者都应:
实际上,订阅者可以使用具有其他含义的界面,例如:
interface IReceiver
{
void ProcessMessage(IMessage message);
}
在这种情况下,我看到以下通信流程:
问题1:这样设计的一切都很好吗?
问题2:应该是什么类型的IMessage?
现在我需要传递简单的字符串,因此可能的实现之一可能如下:
interface IMessage
{
string MessageType{get;}
string MessageContent{get;}
}
但在这里我看到了两个问题:
请指教。欢迎任何想法!
P.S。我计划使用WCF服务作为服务的基础引擎。
编辑:经过一番思考后,我看到了:
从一方面看 - 从另一方面来看似乎是合理的 - 大开头......
答案 0 :(得分:2)
重申上面提到的内容,中介模式的核心思想是去除对象之间的耦合。 其中一个原因是通过将对象限制为类而不是将其扩展到整个程序来封装与对象交互的复杂性。 恕我直言,该课程是为了授权。
您在此处讨论的发布 - 订阅问题更多是观察者模式的领域 - http://en.wikipedia.org/wiki/Observer_pattern
这里有很好的描述:http://en.wikipedia.org/wiki/Event-driven_SOA 本文还解决了消息的数据结构问题。