それにはいくつかの方法があります。
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);
}
...
}