プレゼンテーション レイヤー (PL) と WCF ベースのサービス レイヤー (SL) で MVP パターンを使用しています。PL は SL の操作コントラクトを呼び出し、内部でいくつかのビジネス検証を行います。検証に合格すると、(データ コントラクトとして公開された) オブジェクトを PL に返します。
しかし、検証が失敗した場合、PL に通知するベスト プラクティスは何ですか。
Entity2 Operation1(Entity1 e)
{
//Do some business validation and if passes pass on the updated object back to PL
}
1 つの方法は、すべての操作コントラクトに共通の汎用応答クラスを作成することです。こんな感じになります。
public class Response
{
public ExceptionType exceptionType;
public ExceptionInfo exceptionInfo;
Collection<Entity> entityCollection;
}
ExceptionType: これは、businessValidation が失敗したか、SecurityValidation または不明な例外が発生したかを示す列挙型です。
ExceptionInfo: これは、errorCode などのように発生した検証/例外の特定の詳細を伝える列挙型です。
コレクション: サービス レイヤーは、単一のエンティティまたはエンティティのコレクションを返すことができます。このプロパティを使用して、要件に従ってエンティティを返します。検証の失敗があった場合、またはメソッドがサービス層からの戻りエンティティを想定していない場合にも、null になる可能性があります。
これは、検証の失敗を PL に渡すための適切なアプローチですか。
これの欠点は、PL が exceptionInfo で定義されたすべてのケースを処理する必要があることです。おそらく、スイッチ ケースを使用し、必要なことを行います。
これを行う他の方法は、ビジネス検証またはセキュリティ検証が失敗した場合に PL に例外をスローすることです。ビジネスロジックを処理するために例外を使用したくないので、このアプローチにはあまり熱心ではありません。
このシナリオを処理するためのアイデアはありますか?