这个问题我纠结了好久,还没下定论。我通常不是 UI 程序员,所以请原谅我的笨拙。
我正在编写一个带有 UI 层 (WPF) 和业务层的典型应用程序。我想从业务层(可能在业务层深处)向 UI 发布状态消息,但我不希望业务层对 UI 有任何了解。这有一个普遍接受的模式吗?
我在想有一个消息队列,业务层向其发布状态消息,并让 UI 的视图模型订阅该队列并拦截来自队列的消息并将它们路由到 UI。这是一个好方法吗?还有其他地方我应该开始吗?
谢谢你。
这个问题我纠结了好久,还没下定论。我通常不是 UI 程序员,所以请原谅我的笨拙。
我正在编写一个带有 UI 层 (WPF) 和业务层的典型应用程序。我想从业务层(可能在业务层深处)向 UI 发布状态消息,但我不希望业务层对 UI 有任何了解。这有一个普遍接受的模式吗?
我在想有一个消息队列,业务层向其发布状态消息,并让 UI 的视图模型订阅该队列并拦截来自队列的消息并将它们路由到 UI。这是一个好方法吗?还有其他地方我应该开始吗?
谢谢你。
我认为总的来说这是一个很好的方法。我将为您的消息提供者创建一个接口,该接口在收到消息时发布事件(其中 Message 是您想要的消息类型):
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; }
}