有几种方法可以做到:
1) 抛出带有内部描述消息的异常。
2) 触发事件
3)使用特殊的界面与用户进行交互。
例如,您可以实现类似 IUiCallbacks 接口的东西,并将实现此接口的对象发送到 BLL 类或方法。之后,BLL 中的方法可以调用 IUiCallbacks.SendMessage() 或 IUiCallbacks.SendError() 来通知演示。你可以有不同的类,例如 WinFormsUiCallbacks、WebFormsUiCallbacks 和 SilentUiCallbacks,来实现这个接口。
我通常使用 1) 和 3)
3)的示例根据要求:
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;
}
...
}
...
}
所以它可以像这样使用:
public partial class OrderForm : Form
{
...
public void btnAddOrderFromExcel_Click(...)
{
Order order = LoadOrderFromExcel(...);
OrderService orderService = new OrderService(new WinFormsUiCallbacks());
orderService.AddOrder(order);
}
...
}