問題タブ [dto]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
repository - DDD では、読み取り専用リストの複数のリポジトリをどのように操作しますか?
ページ上のデータの読み取り専用リストを生成する必要があり、そのデータが複数の、場合によっては 5 つ以上の異なるリポジトリから自然に取得される場合はどうしますか?
私たちは DDD を使用しており、リポジトリを介してデータベースへのアクセスを強制していますが、DDD に適合しないと思われるシナリオが発生し、使用する最適なパターンを決定しようとしています。
たとえば、ビデオ、フォーラム、ブログなどを含むコミュニティ ベースの Web サイトがあるとします。コメントのリストを含むフォーラム ページがあるとします。これは大雑把ですが、意味があることを願っています。
したがって、各コメントには、ユーザー名、コミュニティ スコア、アバター、電子メール、ユーザーのブログ、ユーザーのビデオ ページなど、いくつかの異なる部分が含まれます。従来、これらの情報はすべて別々のリポジトリから取得されていました。
その際の問題は効率です。リポジトリは最大化できますが、作成したアグリゲートの周りだけです。複数のリポジトリにあるデータにアクセスする必要がある場合、リポジトリを使用すると読み取りアクセスが非効率になります。
私の解決策は、関連情報を含む UserInformation DTO を作成し、署名付きの UserForumsRepository にメソッドを配置することです。
私の同僚の 1 人は、この方法で DTO を使用すると、これまで使用してきた設計パターンが壊れ、より良い方法はフォーラム コメント ID のリストを取得し、それらの ID をさまざまなリポジトリに渡して、結果。
私自身の見解では、リポジトリの主な目的は CRUD の CUD 部分にとって重要なビジネス ロジックをカプセル化することですが、読み取り専用リストは最も理にかなった方法で生成する必要があります。必要に応じて、読み取り専用のリスト メソッドをリポジトリから完全に削除することも理にかなっていると思います (たとえば、複数の異なるタイプのページで使用される共通のウィジェットなど)。
この状況をどのように処理しますか?
c# - キーと値のペアのリストをデータ転送オブジェクトに変換する方法はありますか
...リストの明らかなループと、汚い偉大なケースステートメントは別として!
私は頭の中でいくつかのLinqクエリをひっくり返しましたが、何も近づいていないようです。
これが役立つ場合の DTO の例を次に示します。
残念ながら、KV ペアとしてデータを取得しているという事実を制御することはできません。
また、各 KV ペアの各プロパティへの効果的なマッピングがあり、事前にキーを知っていますが、それらは DTO と同じ名前ではありません。
c# - ビジネスオブジェクトは独自のDTOを作成できる必要がありますか?
次のクラスがあるとします。
...そして、サービス境界(WCF)を越えてカメラ情報を転送するためのDTO(たとえば、WinForms / WPF / Webアプリで表示するため):
Camera
これで、データを公開するためのメソッドを追加できます。
または、カメラがデータを公開するために特別なIReporterを渡す必要があるメソッドを作成できます。これにより、Contractsレイヤーへの依存関係が削除されます(CameraはCameraDataについて知る必要がなくなります)。
だから私はどちらをすべきですか?私は2番目の方が好きですが、IReporterにCameraDataフィールド(によって変更されるGetCameraInfo()
)が必要であり、これは奇妙に感じます。また、さらに良い解決策があれば、私と共有してください!私はまだオブジェクト指向の初心者です。
java - 親子関係と DAO/DTO パターンのための Hibernate GenericDAO
親/子関係の管理 (追加、削除、子の取得、親の設定など) を含む Hibernate での汎用 DAO 実装を探しています。
実際、Web で最も使用されている汎用 DAO は、jboss.orgで見つけたものです。
また、DAO/DTO のサンプル実装とデザイン パターンを探していました。
そこにいくつかの良いリソースを知っていますか?
wpf - MVVM パターン: モデル サーバーのラウンドトリップ後に ViewModel が更新される
サーバー側にステートレス サービスと貧血ドメイン オブジェクトがあります。サーバーとクライアント間のモデルは POCO DTO です。クライアントは MVVM になる必要があります。モデルは、20 の異なるクラスの約 100 のインスタンスのグラフである可能性があります。クライアント エディターには、モデル/ビューモデルにライブ接続されたさまざまなタブ ページが含まれています。
私の問題は、サーバーのラウンドトリップ後に変更を適切に伝達する方法です。ViewModel から DTO に変更を反映するのは非常に簡単です。古い DTO を破棄して新しいものに置き換えることはできますが、リスト/DataTemplates の再描画が大量に発生します。
サーバー側の変更を収集し、クライアント側に送信できました。ただし、変更されたフィールドの名前は、ViewModel 固有ではなく、ドメイン/DTO 固有のものになります。そして、マッピングは私には自明ではないようです。ラウンドトリップ後に必須の方法で行う必要がある場合、ビューモデルの SOC/モジュール性が損なわれます。
オートマッパーやエミットマッパーなど、ある種のマッピングルールエンジンについて考えています。しかし、それは非常に単純なユースケースを解決します. アイテムをリストまたは削除に追加することをマップ/伝播/変換する方法がわかりません。値を既存のインスタンスにマージできるように、コレクション内のインスタンスを識別する方法。同様に、検証/エラー情報を伝達する必要があります。
たぶん、DTO に INotifyPropertyChanged を実装し、サーバー側のイベントを再生しようとする必要がありますか? そしてViewModelをそれにバインドしますか?バインディングは、コレクションのマージに関する問題を適切に解決しますか? そのために PRISM の EventAgregator は役に立ちますか? イベントの記録再生コンポーネントはありますか?
サーバー側のロジックを備えたアーキテクチャのためのより良いクライアント側のパターンはありますか?
datatable - DAL から DTO と DataTable を返す
DAL がドメイン モデルから DTO タイプを返すのに対して、DataTable を返すだけで問題ありませんか? DAL 関数が DataTables/DataSets を返すようにし、BLL がデータをビジネス オブジェクトにマップするようにする方が緩いのではありませんか?
dto - ベストプラクティス:DTOにナビゲーションプロパティを設定できますか?
DTOは他のDTOと関係がありますか?
このトピックに関する他の意見:-)?
model - ビューレイヤーのDTOまたはドメインモデルオブジェクト?
これはおそらく古くからの質問だと思いますが、より良い方法は何ですか?アプリケーションのすべてのレイヤーでドメインモデルオブジェクトを使用し、JSPで値をそれらに直接バインドすることもできます(私はJSFを使用しています)。または、ドメインモデルオブジェクトをDAOまたはサービスレイヤーでDTOに変換し、軽量のDTOをプレゼンテーションレイヤーに送信します。
データベースを変更するとすべてのDTOが変更されるのに対し、どこでもモデルオブジェクトを使用するには、影響を受けるモデルオブジェクトを変更するだけでよいため、DTOを使用するのは意味がないと言われています。ただし、DTOの使いやすさと軽量性はそれを上回っているようです。
私のアプリはHibernateモデルオブジェクトを使用し、独自にカスタム作成されたモデルオブジェクトを使用していることに注意してください(つまり、DBセッションにバインドされず、常にデタッチされます)。上記のシナリオのいずれかが、厳密なモデルオブジェクトパターンにとってより有益ですか?Hibernateの使用は、LazyInitializationExceptionsなどに関して非常に大きなPITAでした。
私はさらに議論を進めることを期待してこの質問を編集しています(私がこれを正しく行っているかどうかはわかりません):
私がモデルオブジェクトで抱えている問題は、それらがまったく柔軟ではないということです。以下のコメントは、モデルオブジェクトがすべてのレイヤーで使用できるようにアプリケーションを設計する必要があることを示しています。なんで?ユーザーがばかげた機能の一部を望んでいる場合、私は彼らに「それはモデルオブジェクトでは機能しない」と言うことになっていますか?
単純明快で、モデルオブジェクトが機能しない場合があります。あなたが持っているかもしれません:
しかし、多分あなたはそのすべての情報を必要としないでしょう。必要なのは、教師の名前、今年教える生徒の数、およびすべての生徒の平均GPAを合わせたものだけです。その場合はどうしますか?完全な教師情報と生徒の関係を取得すると、コードは生徒のリストにカウントされ、内部のすべてのGPAの合計平均を計算しますか?これは、「String lastName」、「int numStudents」、および「doublecombinedGpa」を使用してDTOを作成するよりも手間がかかるようです。
これらについては決心しているように聞こえるかもしれませんが、モデルオブジェクトをすべてのインスタンスで完全にクリーンに使用できるアプリケーションではまだ作業していません。異常なユーザー要求を伴う通常の実際のアプリケーションは、そのようには機能しません。
wpf - MVVMのデータモデルとしてDTOを使用する必要がありますか?
私は現在、MVVMを使用するための最初の実際の取り組みとなるものに取り組んでおり、MVVMを実装するための最良の方法に関するさまざまな記事を読んでいます。
私の現在の考えは、データモデルをデータ転送オブジェクトとして効果的に使用し、シリアル化可能にして、クライアント側とサーバー側の両方に存在させることです。両方のオブジェクトタイプが実際にはプロパティゲッターとセッターの単なるコレクションであり、その間の別のレイヤーが完全にやり過ぎのように見えることを考えると、論理的なステップのように思えます。
明らかに、通信するViewModelがないため、サーバー側でINotifyPropertyChangedが正しく機能しないという問題がありますが、サービスレイヤーのデータモデルから適切なドメインモデルオブジェクトを構築し、サーバー側のデータモデル大きな問題ではないと思います。
私はこのアプローチについてあまり多くの情報を読んでいないので、これがかなり標準的なものであるかどうかを知りたいのですが、これは多層環境でMVVMを実行する事実上の方法であると想定されていますか?私が物事について完全に間違った考えを持っているなら、他のアプローチについての考えもありがたいです。
java - DTO への Hibernate オブジェクトの Dozer マッピング
Dozer を使用して、ドメイン エンティティを DTO オブジェクトに変換しようとしています。だから、PersistentList、PersistentBag、...を私のドメインエンティティからArrayListに変換したい...私のDTOオブジェクトでは、怠惰な問題を避けることができます。
これは、私のドメイン エンティティの 2 つの例です。
クラスがDTO型であることを除いて、私のDTOオブジェクトは同じです。したがって、ドメインを DTO オブジェクトに変換するには、次の Dozer マッピングを使用します。
BagConverter は Dozer カスタム コンバーターであり、それがそのコードです。
したがって、ロールを持つ PersistentBag を含む User オブジェクトを取得します。そのオブジェクトに dozer マッパー マップを適用して、UserDTO オブジェクトを取得します。取得した結果は、Role の ArrayList を持つ UserDTO オブジェクトであり、RoleDTO の ArrayList はありません。
カスタム コンバーターを使用しても、dozer はリストの内容を変換してくれると思いました。それは正しい方法ではありませんか?いいえの場合、永続的なコレクションを従来の Java コレクションに置き換えて、ドメイン エンティティを dto オブジェクトに変換するにはどうすればよいですか?
ご協力いただきありがとうございます。
シルヴァン。