私は scott millett による本専門的な asp.net デザイン パターンを読みました。彼の例では、彼は Validate() メソッド内でビジネス ロジックを検証し、壊れたルールが壊れている場合はコレクションに追加され、サービス レイヤーはメソッドを呼び出しますGetBrokenRules() と呼ばれるモデル。
現在、DDD に関するいくつかの本、ブログ、フォーラムも読んでおり、DDD ではオブジェクトが無効な状態になることは決してないと書かれています。
私が見た DDD に関する例はすべて、ビジネス ルールが破られたときに、破られたルールのコレクションを返すのではなく、エラーをスローします。私は scott millett による最新のソース コードをダウンロードしましたが、彼はコードを変更して、壊れたルールのリストを返す代わりにエラーをスローするようにしました。他の DDD コード サンプルでも同じアプローチを見てきました。
私は、エラーをスローするとリソースが高価であり、エラーをスローするのではなく、現在のように壊れたルールのコレクションを返す必要があると考えているチーム メンバーと議論しています。ただし、これを行うと、危険なデータが含まれているため無効なオブジェクトが渡され、最後に壊れたルールをチェックするだけです。
私は、この件に関して他の人々の意見がどうであるかを考えていました。ビジネス ルールが失敗したらすぐにエラーをスローする必要がありますか? もしそうなら、そうすることの長所と短所を強調できますか. .net でリソースを消費するスロー エラーがどのように発生するかはわかりません。そのため、その点に反論することはできませんが、これはコーディング標準ではなく、個人的な意見の問題でもあるのではないかと考えていました。
マイク