私はインターフェース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)
}
このクラスにこれらのメッセージを作成するためのすべての作業を行わせたくないので、指定されたタイプに応じて(メッセージTypeA、TypeB、TypeCなどのタイプに基づく列挙)MessageCreatorFactory
を生成するに委任するだけです。IMessageCreator
interface IMessageCreator
{
IMessage Create(MessageParams params);
}
IMessageCreator
だから私は:TypeAMessageCreator
、、、TypeBMessageCreator
の4つTypeCMessageCreator
の実装を持っていますTypeDMessageCreator
MessageParams
タイプごとに異なるパラメーターが必要なため、4つの異なるパラメーターに対して4つのプロパティを含むオブジェクトを作成する必要がありましたが、それぞれで使用されるのは一部のみであるという事実を除いて、これで問題ありませんIMessageCreator
。
これに代わるものはありますか?私が持っていたもう1つの考えは、Createメソッドのパラメーターとしてパラメーター配列を使用することでしたが、パラメーターが何であるかわからないため、これはさらに悪いようです。または、インターフェイスでCreateのオーバーロードをいくつか作成し、それらが特定の実装に適していない場合に例外をスローするようにします(つまり、より多くのパラメーターを必要とするメソッドを呼び出したため、他のオーバーロードの1つを呼び出す必要があります)。
これは大丈夫ですか?より良い解決策はありますか?