2 Stimmen

Was ist das korrekte C#-Entwurfsmuster für mehrere Methoden, die alle unterschiedliche abgeleitete Klassen als Parameter akzeptieren?

Ich habe eine Basisklasse:

class Message

Und zwei abgeleitete Klassen:

class SimpleMessage : Message
class ComplexMesssage : Message

Diese Typen werden in einem anderen Teil des Codes als solche verwendet:

void ProcessSimpleMessage(SimpleMessage m)
void ProcessComplexMessage(ComplexMessage m)

Diese Methoden befinden sich nicht innerhalb der Klasse Nachricht, da die Verarbeitung nicht Teil der Nachricht ist.

Nun möchte ich eine if/else/switch-Struktur vermeiden, da es viele Arten von Nachrichten gibt. Welches ist das beste Entwurfsmuster, das hier verwendet werden kann?

Eine Möglichkeit ist die Kapselung mit Hilfe des Strategiemusters (zumindest soweit ich es verstehe):

class ProcessableMessage
{
delegate void ProcessMessageDelegate(Message m)

private Message m;
private ProcessMessageDelegate ProcessMessage;
}

Aber ist es wirklich die beste Praxis, alle Verarbeitungsmethoden den Basistyp Message akzeptieren zu lassen und darin zu casten? Ein weiteres Problem wäre die Tatsache, dass der dynamische Typ der Nachricht (einfach oder komplex) in dieser Klasse an zwei Stellen gespeichert ist - in der Nachricht und im Verarbeitungsalgorithmus, was ziemlich hässlich aussieht.

Gibt es bessere Lösungen?

Danke!
Assaf

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X