"평범한"중재자 디자인 패턴 (일부 설명은 위키 백과 : http://en.wikipedia.org/wiki/Mediator_pattern)을 알고 있습니다. 내 SOA에는 알림 서비스가 있습니다. 특정 서비스에서 구독하는 다른 모든 서비스로 메시지를 브로드 캐스트해야합니다. 사실, 어떤 서비스도 그러한 메시징의 원천이 될 수 있습니다.SOA의 중재자로서의 서비스
이러한 서비스 구현에 대한 필자의 시각은 서비스 간 순환 의존성을 초래합니다. 여기 (Circular dependency in SOA) 나는 그것을 해결하는 방법을 물어 왔고이 목적을 위해 '중재자'패턴을 사용하라는 조언을 받았다.
만약 내가 제대로 이해하고, 내 알림 서비스는 계약이 있어야합니다
interface IMediator
{
void PublishMessage(IMessage message);
}
서비스를 구현해야합니다 (호스트)이 인터페이스를 외부 서비스로 노출됩니다.
상관 가입자해야 :
- (호스트) 자신 측의 동일한 인터페이스를 구현;
- 알림 서비스쪽에 등록해야합니다. 사실
가입자는 예를 들어, 다른 의미로 인터페이스를 사용할 수 있습니다 : 나는 다음과 같은 통신 흐름을 볼 수이 경우
interface IReceiver
{
void ProcessMessage(IMessage message);
}
:
이- 모든 서비스가 IMediator.PublishMessage를 호출을 (메시지) 통지 서비스;
- 알림 서비스는 구독자 목록을 살펴보고 각 구독자에 대한 IReceiver.ProcessMessage (메시지)를 호출합니다.
질문 1 :과 같은 디자인으로 모든 것이 괜찮습니까?
질문 2 : IMessage의 유형은 무엇입니까?
interface IMessage
{
string MessageType{get;}
string MessageContent{get;}
}
을하지만, 여기에 내가이 문제를 참조하십시오 : 나는 생각하지 않습니다
- 을 나는 간단한 문자열을 전달해야하는 지금은
때문에 가능한 구현 중 하나는 다음을 수 MessageType을 문자열로 전달하는 것은 좋은 생각입니다. 내가 문자열로 메시지의 모든 유형을 인코딩하고 싶지 않다
- ....
알려 주시기 바랍니다. 어떤 생각이라도 환영합니다!
P. WCF 서비스를 서비스의 기본 엔진으로 사용할 계획입니다.
편집 : 몇 가지 생각 후에 내가 볼 것을 :
- IMediator에 별도의 방법은 각 메시지 유형에 따라 필요합니다;
- 각 메시지 유형마다 별도의 수신자 인터페이스가 필요합니다. 한쪽에서
은 - ...
큰 오버 헤드 - 서로, 합리적인 것 같다?
감사합니다. – Budda
예, 몇 가지 생각을 한 후에 SOA에 대한 '옵서버 (Observer)'적응을 시작하겠습니다. – Budda