DDD パターンを使用してエンタープライズのようなプロジェクトを開発しています。C# ソリューションには次のプロジェクトがあります。
ドメイン モデル - DLL プロジェクト
WebUI - ASP.NET MVC3 プロジェクト
DesktopUI - WPF プロジェクト
DAL - エンティティ フレームワーク コード ファースト
持続性 - SQL Server データベース
このプロジェクトは大規模ではありませんが、エンタープライズ アプリケーションのすべての優れたプラクティスを使用しようとしています。
今定義したいのは例外戦略ですが、それにアプローチする方法がわかりません。おそらく Enterprise Library Exception Handling と Logging Blocks を使用する必要がありますが、それをどのように図に収めればよいかわかりません。私が頭の中で解決しようとしているいくつかの具体的なシナリオは次のとおりです。
新しいエンティティが WPF アプリケーションでユーザーによって作成され、[保存] ボタンがクリックされた場合、さまざまなレベルで例外が発生した場合にエラーを報告してログに記録する方法 (たとえば、エンティティがドメイン ルールに従って適切に作成されていない、または新しいオブジェクトをデータベースに永続化しようとしてエラーが発生しました)
ユーザーがデータベースから不明なエンティティを取得しようとしています (例: URL で不明なエンティティ ID を指定して WebUI から)
カスタム例外を定義できることは理解していますが、どこでどのように定義するのかよくわかりません。各レイヤーごとに定義する必要がありますか? ラッピング例外のプラクティスがあることは知っていますが、そのパターンを最適に使用する方法がよくわかりません。
また、いくつかのレイヤーでエラーごとに 1 つのカスタム例外を作成する必要があります (たとえば、同じメールで 2 人のユーザーを保存しようとする場合は UserAlreadyExistInDatabaseException、DB から不明なユーザーを取得しようとする場合は UnknownUserDatabaseException)、または複数のレイヤー エラーを処理する 1 つの例外タイプを作成する必要があります。 (例: DatabaseException、カスタム プロパティまたは Exception.Message プロパティでエラーを区別)。