Pergunta

I am writing an application in C#. Now i am thinking over and over again about its design. Have already changed my mind 3 or 4 times but thankfully for the good.

After few iterations i come up with a solution but i am still wondering what is the best way to achieve that with C#.

Basically i will have a class lets call it MessageManager, and after each action different classes will send a message to MessageManager and MessageManager will send the message depending on the response. Then i will have another manager call it UIManager it will perform all the UI switching or inform the MessageManager in case of any core/helper operation is required.

Now the thing is messages could make up to like 50-60 types each will have different type of arguments. And i want to design it in a way if i have new messages in future it can accommodate that as well.

What is the best way to accomplish that in C# like what will be the best for such case delegates, events. Flexibility is the most important thing.

Foi útil?

Solução

I believe that combining the Observer pattern (publish/subscribe logic) along side with the Mediator one can be a good solution to your problem. Your Mediator class will act as an Event Manager (most of your classes will depend on it as a mediator rather than depending on each others) :

public class MessageManager{

    private Dictionary<string,List<MessageListener>> listeners;

    public void sendMessage(Message m){
        //loop over listeners of m
    }

    public void addMessageListener(MessageListener ml){
         //add a listener
    }

    public void removeMessageListener(MessageListener ml){
         //remove a listener
    }
}

Message would be the parent interface, having a generic abstraction at this level is very important as it avoids the MessageManager from distinguishing between your 50-60 types of messages and thus becoming a nightmare to maintain. The specificity of depending on a particular sub-type of Message should be moved to a lower level: the direct consumers.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top