ここにエラーはないと思いますが、ビジネス ルール違反です。
私は両方を区別したいと思います。最初の予期しない状況 (データベース接続の喪失など) と、その後に発生する可能性が高いとわかっているシナリオです。
エラーについては、一般的な方法でユーザーに通知するのが適切だと思います(「予期しないエラーが発生しました」など)。これは、ユーザーが修正できず、詳細な情報を必要としないものであるためです。
一方、ビジネス ルールは、ユーザーが理解し、修正するためのアクションを実行できるものです (ここでは、ユーザー名の制約)。したがって、ユーザーに通知する必要があります。
私が取り組んできたプロジェクトでは、例外のタイプがありますBusinessException
。何が問題であったかを示すメッセージとともにスローし、人間が読める形式でレンダリングします。この例外を明示的に try-catch することはしませんが、ハンドラーを使用してそれらを管理します。MVC を使用している場合は、それを実行できる拡張フックがあります。
他のタイプの例外については、スタックトレースをどこかに記録することをお勧めします (つまり、EventViewer) が、ユーザーに詳細を提供しないでください。
この場合、次のようにします。
- ボタンで名前をチェックして、ユーザーが名前を事前に検証できるようにします。
- 名前を検証する場所は、アプリケーションのビジネス ロジックを配置する場所によって異なります。DB では、ストアド プロシージャを使用するのが 1 つのアプローチですが、EF を使用している場合、これはデータ アクセスから抽象化する必要があることを意味します。代わりに、
LINQ
(のようなものを使用して、この検証を自分で作成し、 Context.Users.SingleOrDefault(x => x.Name == name)
null またはユーザーを返すかどうかを確認できます。DB 制約が既にあるため、この検証は必要ないと思うかもしれませんが、この方法では、ロジックは残りますアプリケーションのコード。
- EF からの例外のキャプチャは、SQL エラー コードをチェックして、それが制約違反なのか他のエラーなのかを判断する必要があるため、厄介な場合があります。そして、それを判断したとしても、メッセージをユーザーフレンドリーなものに変換する必要があります.
これがあなたの決定に役立つことを願っています!