サービス層に検証コードを配置するように言っている本や記事の例をたくさん見てきました。ドメイン オブジェクトを「ダム」(別名、純粋な POCO) に保ち、ドメイン オブジェクトがサービス層で行う可能性のあるすべての検証を処理します。
サービス層は、見かけ上(または少なくともそうである可能性があります)、非常に多くの責任を負っています。ユーザー認証、ロール認証、IoC の依存関係オブジェクトのスクリプト作成 (ロガー、エラー ハンドラーなど)、ドメイン オブジェクトのスクリプト作成、リポジトリのスクリプト作成、およびリポジトリとの間でのドメイン オブジェクトの受け渡し...
サービス層でこれらすべてのルールを作成することは、ドメイン オブジェクトに重大な脅威をもたらしませんか? たとえば、一部のプログラマーがドメイン オブジェクトに対して直接消費するコードを記述し、サービス層を完全にバイパスすることを決定した場合はどうなるでしょうか? それは悪いことですが、信じられる状況です。
すべてのドメイン オブジェクトの検証を含め、サービス層に多くの責任を負わせようとしている場合、誰かがそれらを直接スクリプト化しようとしたときに、ドメイン オブジェクトを「保護」する方法はありますか? たとえば、何らかの方法でドメイン オブジェクトが特定のクライアント (この場合はサービス層?) によって使用されていない可能性があります。
優れた設計とは、ドメイン オブジェクトが、誰が呼び出しているのか、どのように呼び出されているのかについて何も知らなくてもよいと私に思わせるものです。
ドメイン オブジェクトを「ロックダウン」する方法がない場合、ドメイン オブジェクトの検証をサービス レイヤーに配置することを提案する記事や書籍が非常に多いのはなぜですか? 防御的なプログラミングの立場を取ることで、ドメイン オブジェクトを防弾となるように構築し、UI と BAL/DAL の間で要求を転送および受信するための単純なコード レイヤーとしてサービス レイヤーに依存する必要があると想像できます。
サービス層を迂回した人々によるドメイン オブジェクトの「悪用」について、実際のプロジェクトで経験した人はいますか?