デバイスを監視し、そのデバイスが使用可能なデータを正常に受信したかどうかを報告するモニタークラスがあります。これはいつでも発生する可能性があります。
クライアントは、デリゲートを渡すことによって独自のモニターを作成し、それを開始して、正常に読み取られたデータまたは一種のドメイン固有の例外タイプ(1つの基本例外タイプ)のいずれかを待ちます。
基本例外タイプのサブタイプをスローし、クライアントが各サブタイプに個別に応答できるようにする慣用的な方法は何でしょうか。
public class MyMonitor
{
private SuccessHandler _successHandler;
private ErrorHandler _errorHandler;
public delegate void SuccessHandler(MyDTO result);
public delegate void ErrorHandler(MyBaseException exception);
public MyMonitor(SuccessHandler successHandler, ErrorHandler errorHandler) {
_successHandler = successHandler;
_errorHandler = errorHandler;
}
public void start() {
try {
_successHandler(new MyDTP().doSomethingRisky());
} catch(Exception e) {
_errorHandler(e);
}
}
}
public class Client {
static void Main(string[] args) {
MyMonitor monitor = new MyMonitor(new MyMonitor.SuccessHandler(handleSuccess), new MyMonitor.ErrorHandler(handleException));
monitor.start();
}
static void handleSuccess(MyDTO result) {
// do something with result
}
static void handleException(MyBaseException e) {
try {
throw e;
} catch(UserException mbe) {
// present message to user
} catch(DataNotFoundException se) {
// log error and show generic error message
} catch(UnexpectedException ue) {
// log error and try to hide it from the user
}
}
}