У меня есть интерфейс, IMessage
и класс, в котором есть несколько методов для создания различных типов сообщений, например:
class MessageService
{
IMessage TypeAMessage(param 1, param 2)
IMessage TypeBMessage(param 1, param 2, param 3, param 4)
IMessage TypeCMessage(param 1, param 2, param 3)
IMessage TypeDMessage(param 1)
}
Я не хочу, чтобы этот класс делал всю работу по созданию этих сообщений, поэтому он просто делегирует MessageCreatorFactory
, который выдает IMessageCreator
в зависимости от заданного типа (перечисление, основанное на типе сообщения TypeA , TypeB, TypeC и т. Д.)
interface IMessageCreator
{
IMessage Create(MessageParams params);
}
Итак, у меня есть 4 реализации IMessageCreator
: TypeAMessageCreator
, TypeBMessageCreator
, TypeCMessageCreator
, TypeDMessageCreator
Я согласен с этим, за исключением того факта, что, поскольку каждый тип требует различных параметров, мне пришлось создать объект MessageParams
, который содержит 4 свойства для 4 различных параметров, но только некоторые из них используются в каждом IMessageCreator
,
Есть ли альтернатива этому? Еще одна мысль, которая у меня была, заключалась в том, чтобы иметь массив параметров в качестве параметра в методе Create, но это кажется еще хуже, поскольку вы не представляете, что это за параметры. Или создать несколько перегрузок Create в интерфейсе, и некоторые из них выдают исключение, если они не подходят для данной конкретной реализации (т. Е. Вы вызвали метод, которому нужно больше параметров, поэтому вы должны были вызвать одну из других перегрузок.)
Кажется ли это нормально? Есть ли лучшее решение?