J'ai une classe de base:Quel est le modèle de conception C# correct pour plusieurs méthodes, toutes les acceptant comme des paramètres différents des classes dérivées?
class Message
Et deux classes dérivées:
class SimpleMessage : Message
class ComplexMesssage : Message
Ces types sont utilisés dans une autre partie du code en tant que tel:
void ProcessSimpleMessage(SimpleMessage m)
void ProcessComplexMessage(ComplexMessage m)
Ces méthodes sont pas à l'intérieur de la classe Message, car le traitement ne fait pas partie du message.
Maintenant, je voudrais éviter une structure if/else/switch, car il y a beaucoup de types de messages. Quel est le meilleur modèle de conception à utiliser ici?
Une option consiste à encapsuler en utilisant le modèle de stratégie (au moins si je comprends bien):
class ProcessableMessage
{
delegate void ProcessMessageDelegate(Message m)
private Message m;
private ProcessMessageDelegate ProcessMessage;
}
Mais est-ce la meilleure pratique vraiment faire toutes les méthodes de traitement acceptent le type de base du message et jeté à l'intérieur ? Et un autre problème serait avec le fait que le type dynamique du message (simple ou complexe) est réellement stocké dans 2 endroits dans cette classe - le message et l'algorithme de processus, qui semble plutôt moche.
De meilleures solutions là-bas?
Merci!
Assaf
Je sais que vous avez mentionné «Ces méthodes ne sont pas à l'intérieur du message de classe, car le traitement ne fait pas partie du message. "Mais y a-t-il une raison spécifique à cela? Considérant que vous avez une logique de traitement spécifique à chaque type de message, ne serait-il pas plus facile d'avoir une méthode de processus virtuelle dans le message de classe de base que chaque sous-classe peut surcharger? Message.Process() - dont l'objet est transmis? – InSane
référez Merlyn Morgan-Graham réponse ci-dessous. +1 pour cela – InSane
Qu'est-ce que vous essayez d'atteindre? Discuter du problème pourrait vous donner de meilleures réponses ... au lieu d'essayer de faire correspondre une solution. – Gishu