私はこれに苦労しました。プレゼンテーションで DTO を使用するのが理にかなっている場合があります。システムで会社のドロップダウンを表示したいとしましょう。値をバインドするために会社の ID が必要です。
サブスクリプションへの参照を含む可能性のある CompanyObject をロードする代わりに、名前と ID を含む DTO を送り返すことができます。これは良い使い方です。
では、別の例を見てみましょう。私は見積もりを表すオブジェクトを持っています。この見積もりは人件費、設備などで構成されている可能性があり、これらすべての項目を取得して合計するユーザーによって定義された多くの計算が含まれている可能性があります (各見積もりはタイプによって異なる場合があります)計算の)。このオブジェクトを 2 回モデリングする必要があるのはなぜですか? UI で計算を列挙して表示できないのはなぜですか?
通常、DTO を使用してドメイン層を UI から分離することはありません。私はそれらを使用して、自分のドメイン層を自分の制御の及ばない境界から分離しています。誰かがビジネス オブジェクトにナビゲーション情報を入れるという考えはばかげています。ビジネス オブジェクトを汚染しないでください。
誰かがビジネスオブジェクトに検証を入れるという考えは? まあ、これは良いことだと言います。UI だけがビジネス オブジェクトの検証を行うべきではありません。ビジネス層は独自の検証を行う必要があります。
UI 生成コードを busienss オブジェクトに入れるのはなぜですか? 私の場合、UI とは別に UI コードを生成する別のオブジェクトがあります。私は自分のビジネス オブジェクトを Xml にレンダリングする個別のオブジェクトを持っています。この種の汚染を防ぐためにレイヤーを分離する必要があるという考えは、なぜビジネス オブジェクトに HTML 生成コードを入れるのでしょうか...
編集
もう少し考えてみると、UI 情報がドメイン層に属している場合があります。これはドメイン レイヤーと呼ばれるものを曇らせる可能性がありますが、私はマルチテナント アプリケーションに取り組みました。このアプリケーションは、UI のルック アンド フィールと機能ワークフローの両方で非常に異なる動作をしていました。さまざまな要因によって異なります。この場合、テナントとその構成を表すドメイン モデルがありました。それらの構成にはたまたま UI 情報が含まれていました (たとえば、一般的なフィールドのラベル)。
オブジェクトを永続化できるように設計する必要がある場合、オブジェクトも複製する必要がありますか? 新しいフィールドを追加する場合は、追加する場所が 2 つあることに注意してください。おそらくこれは、DDD を使用している場合、すべてのエンティティが永続化されたドメイン オブジェクトであるかという別の疑問を提起しますか? 私の例では、彼らがそうだったことを知っています。