使用接口的UI BLL通信

时间:2012-04-04 12:53:19

标签: c# architecture

找到了解释层之间通信方式的question。 然而,还有一个方面。

假设我使用接口将消息从BLL发送到UI,如下面的示例所示:

public interface IUiCallbacks
{
  void SendMessage(string message);
  void SendException(string message, Exception ex);
}

public class WinFormsUiCallbacks : IUiCallbacks
{
  public void SendMessage(string message)
  {
    MessageBox.Show(message);
  }

  public void SendException(string message, Exception ex)
  {
    MessageBox.Show(string.Format("Unfortunately, the following errror has occurred:{0}{1}", Environment.NewLine, ex.Message));
  }
}

public class OrderService
{
  private IUiCallbacks _iUiCallbacks;
  ...
  public OrderService() { ... }
  public OrderService(IUiCallbacks iUiCallbacks)
  {
    _iUiCallbacks = iUiCallbacks;
  }
  ...
  public void AddOrder(Order order)
  {
    ...
    if(OrderAlreadyExists(order))
    {
      if(_iUiCallbacks != null)
        _iUiCallbacks.SendMessage("The order can not be added, because it is already accepted.");
      return;
    }
    ...
  }
  ...
}

我想要一个确认框来确认现有订单的覆盖,而不是信息消息。

在这种情况下,如何处理确认框的结果?

谢谢, 亚历

1 个答案:

答案 0 :(得分:1)

只需让你的SendMessage返回DialogResult,并添加所有必要的参数:

  public DialogResult SendMessage(string message, string caption, MessageBoxButtons buttons)
  {
    return MessageBox.Show(message, caption, buttons);
  }

并使用它。

如果您不想在IUiCallbacks接口中引用DialogResult类型,则创建自己的DialogResult类型,并提供代码以在WPF DialogResult和DialogResult之间进行映射(例如强制转换)。

你可以看一下来自In The Box MVVM Training的IDialogService - 即使是WPF + MVVM(BTW:MVVM是一个很好的模式,非常值得学习),它已经包含了你需要的一切。