Domanda

Ho lottato con questa domanda per un po 'adesso, e non ho raggiunto una conclusione. Io non sono di solito un programmatore di interfaccia utente, così perdono il noobishness.

Sto scrivendo una tipica applicazione di uno strato di interfaccia utente (WPF) e uno strato di business. Voglio inviare messaggi di stato per l'interfaccia utente dal livello di business (forse nel profondo lo strato di business), ma non voglio che lo strato di business di avere qualsiasi la conoscenza dell'interfaccia utente. C'è un modello generalmente accettata per questo?

Stavo pensando di avere una coda di messaggi di una certa specie a cui i messaggi di stato post livello di business, e ho il modello di vista dell'interfaccia utente abbonarsi a quella coda e intercettare i messaggi dalla coda e li rotta per l'interfaccia utente. che è un buon approccio? C'è qualche altra parte devo iniziare?

Grazie.

È stato utile?

Soluzione

Credo che sia un buon approccio in generale. Vorrei creare un'interfaccia per il vostro fornitore di messaggio che pubblica un evento quando viene ricevuto un messaggio (Dove messaggio è il tipo di messaggio che si desidera):

public class MessageReceivedEventArgs : EventArgs
{
    public MessageReceivedEventArgs(Message message)
        : base()
    {
        Message = message;
    }

    public Message Message { get; set; }
}

public delegate void MessageRecievedHandler(object sender, MessageReceivedEventArgs e);

public interface IMessageProvider
{
    event MessageRecievedHandler MessageReceived;
    void Start();
    void Stop();
    bool IsRunning { get; }
}

public abstract class MessageProviderBase : IMessageProvider
{
    public event MessageRecievedHandler MessageReceived;

    public MessageProviderBase()
    {}

    protected void OnMessageReceived(MessageReceivedEventArgs e)
    {
        if (MessageReceived != null)
        {
            MessageReceived(this, e);
        }
    }

    public abstract void Start();
    public abstract void Stop();

    public abstract bool IsRunning { get; }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top