ASP.NET Web API アプリケーションを構築していて、次の構造を持っていると仮定します。
図からわかるように、ASP.NET Web API コアはドメイン サービス レイヤー (たとえば、 、 などMembershipService
のメソッドを持つクラス) と通信し、サービス クラスは 1 つまたは複数のリポジトリと通信して操作を処理します。GetUsers
CreateUser
サービス操作 (MembershipService.CreateUser
メソッドなど) がいくつかの理由 (満たされていない条件、リポジトリによってスローされた例外など) で失敗することは明らかであり、これは私が疑問を持っている場所です。
サービスクラスは例外を処理し、以下のような何らかの結果オブジェクトを返す必要があると思いますか:
public class OperationResult {
public OperationResult(bool isSuccess) : this(isSuccess) {
IsSuccess = isSuccess;
}
public OperationResult(bool isSuccess, Exception exception) : this(isSuccess) {
Exception = exception;
}
public bool IsSuccess { get; private set; }
public Exception IsSuccess { get; private set; }
}
public class OperationResult<TEntity> : OperationResult {
public OperationResult(bool isSuccess)
: base(isSuccess) { }
public OperationResult(bool isSuccess, Exception exception)
: base(isSuccess, exception) { }
public TEntity Entity { get; set; }
}
それとも、サービスメソッドはそのような例外を抽象化するべきではなく、例外を直接的または間接的にスローする必要があると思いますか (操作に固有の新しい意味のある例外タイプを作成し、スローされた例外をその内部例外として配置します)?