例外とその使用に関するいくつかの質問と回答を読んでいます。例外は例外、未処理の場合にのみ発生させるべきだという強い意見があるようです。そのため、検証がビジネス オブジェクトでどのように機能するのか疑問に思いました。
オブジェクトのプロパティのゲッター/セッターを持つビジネス オブジェクトがあるとします。値が 10 ~ 20 であることを検証する必要があるとします。これはビジネス ルールであるため、ビジネス オブジェクトに属します。そのため、検証コードがセッターに入っていることを暗示しているようです。これで、UI データがデータ オブジェクトのプロパティにバインドされました。ユーザーは 5 を入力するため、ルールは失敗する必要があり、ユーザーはテキスト ボックスから移動できません。. UI はプロパティにデータバインドされているため、setter が呼び出され、ルールがチェックされて失敗します。ルールが失敗したことを示すためにビジネス オブジェクトから例外を発生させた場合、UI はそれを取得します。しかし、それは例外の好ましい使用法に反しているようです。それがセッターであることを考えると、セッターの「結果」は実際にはありません。
では、検証はどのように機能するのでしょうか?
編集: ここでは、単純化しすぎた例を使用した可能性があります。上記の範囲チェックのようなものは UI で簡単に処理できますが、検証がより複雑な場合、たとえば、ビジネス オブジェクトが入力に基づいて数値を計算し、計算された数値が範囲外の場合は拒否する必要があります。これは、UI に含めるべきではない、より複雑なロジックです。
また、すでに入力されているフィールドに基づいて入力された追加データも考慮されます。たとえば、在庫や現在のコストなどの特定の情報を取得するために、注文にアイテムを入力する必要があります。ユーザーは、この情報を入力してさらに入力するかどうかを決定する必要がある場合があります (注文するユニット数など)。さらなる検証が行われるように。アイテムが有効でない場合、ユーザーは他のフィールドに入力できるようにする必要がありますか? ポイントは何ですか?