Шаблон проектирования для обработки нескольких типов сообщенийC#

Место общения программистов C#
Anonymous
Шаблон проектирования для обработки нескольких типов сообщений

Сообщение Anonymous »

У меня на столе стоит GOF, и я знаю, что должен быть какой-то шаблон проектирования, который решает мою проблему, но, блин, я не могу этого понять.
/>
Для упрощения я изменил названия некоторых интерфейсов, которые использую.

И вот в чём проблема: на одной стороне провода у меня есть несколько серверов, которые рассылают разные типы сообщений. На другой стороне провода у меня есть клиент, который должен иметь возможность обрабатывать все типы сообщений.

Все сообщения реализуют один и тот же общий интерфейс IMessage. Моя проблема в том, что когда клиент получает новое сообщение IMessage, как он узнает, какой тип IMessage он получил?

Я предполагал, что могу сделать что-то вроде следующего, но это просто ЧУВСТВУЮ себя ужасно.

Код: Выделить всё

TradeMessage tMessage = newMessage as TradeMessage;
if (tMessage != null)
{
ProcessTradeMessage(tMessage);
}

OrderMessage oMessage = newMessage as OrderMessage;
if (oMessage != null)
{
ProcessOrderMessage(oMessage);
}
Вторая мысль — добавить в IMessage свойство под названием MessageTypeID, но для этого мне потребуется написать что-то вроде следующего, что тоже ОЧУВСТВУЕТСЯ ужасно.

Код: Выделить всё

TradeMessage tMessage = new TradeMessage();
if (newMessage.MessageTypeID == tMessage.MessageTypeID)
{
tMessage = newMessage as TradeMessage;
ProcessTradeMessage(tMessage);
}

OrderMessage oMessage = new OrderMessage();
if (newMessage.MessageTypeID == oMessage.MessageTypeID)
{
oMessage = newMessage as OrderMessage;
ProcessOrderMessage(oMessage);
}
Я знаю, что эта общая проблема решалась миллион раз, поэтому должен быть более удобный способ решения проблемы наличия метода, который принимает интерфейс в качестве параметра. , но требует другого управления потоком в зависимости от того, какой класс реализовал этот интерфейс.

Подробнее здесь: https://stackoverflow.com/questions/147 ... sage-types

Вернуться в «C#»