問題タブ [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.
c# - さまざまなコンテキストで DTO を処理および整理する方法は?
さまざまなシナリオで単純な DTO を使用しているときに、同じ種類の問題に頻繁に遭遇し、それを処理するためのより良い方法があるかどうか常に疑問に思っていました。
問題は、たとえば、一連のプロパティ、子オブジェクト、および計算フィールドを持つビジネス オブジェクトがありAsset
、そのうちのいくつかは時間の意味で計算するのに高価であり、いくつかはデータ量の意味で巨大です。UI のさまざまな画面で、このオブジェクトの別のフレーバーを使用する必要があります。
- 階層が表示されているツリーで、表示名以外は必要ありません
- いくつかのプロパティのみを表示しているグリッドで
- 詳細ペインには利用可能な情報の大きなサブセットがありますが、その一部 (マップされたオブジェクトなど) はオンデマンドでのみ表示されます
このシナリオで最適なパフォーマンスを達成できるようにするために、私は常にコンテキストごとに異なる DTO を作成し、そのコンテキストで実際に使用される情報のサブセットのみを含めました。リソースを最適化するソリューションですが、これはいくつかの問題を引き起こします。
- 膨大な数の DTO クラスでクラスが急増しています
- のような同じものに異なる名前を付けるのにかなり苦労
AssetDtoForGridInTheOverviewScreenInTheUpperPaneAboveTheSplitter
します。後でそれらを維持することは言うまでもありません - ほとんどの DTO で使用されているがすべての DTO では使用されていないプロパティがあるため、変換メソッドで頻繁に繰り返します (したがって、それらをスーパークラスに入れて変換ロジックを再利用することはできません)。
私が使用しているテクノロジは ASP.NET SOAP WebServices と C# 3.5 ですが、これは言語に依存しない問題である可能性があると思います。どんなアイデアでも大歓迎です..
visual-studio - T4 ファイルが出力を生成するかどうかを指定する方法
いくつかの DTO クラス + マッパーの生成に T4 を使用しています。
ファイルをいくつかの再利用可能なビットに分割し (一部には一般的な方法が含まれ、その他には一般的な手順が含まれています)、出力を生成する T4 テンプレートにそれらを含めています。これはすべて問題ありません。
私の問題は、再利用可能な .tt ファイルが、変更を加えるたびに独自の出力を生成しようとして失敗することです (他の .tt ファイルに結合されているため)。
特定のファイルを指定して出力を生成してはならないことを指定するディレクティブをどこかで見たと確信していますが、それを追跡できないようです。
どんな助けでも大歓迎です!
jpa - JPAを使用したエンティティからDTOへの変換
クラスをWebアプリケーションに格納するためのJPA実装としてDataNucleusを使用しています。toDTO()
私はすべてが持っているコンバーターのセットを使用しますfromDTO()
。
私の問題は、DB全体がネットワーク経由で送信されるのを避けたいということです。
- ロードを遅延すると、コンバーターはすべてのフィールドにアクセスしようとし、ロードします(結果として非常に熱心なロードになります)。
- 遅延読み込みを行わないと、ユーザーにはグループが含まれ、グループにはユーザーが含まれるなど、DBの大部分を取得します。
ロードしたクラスで、一部のフィールドを明示的にロードし、他のフィールドをNULLのままにする方法はありますか?運が悪かったので、DataNucleusのドキュメントを試しました。
c# - インポートデータを記述したXMLファイルを作成してDTOにマッピングするにはどうすればよいですか?
xmlファイルに保持されているデータをインポートするインポートユーティリティを作成する必要があります。インポートデータの表現である単純なDTOオブジェクトを作成し、このオブジェクトに基づいてインポートを実行するようにすべてのコードを記述します。
XMLファイルが転送形式の定義になるので、サードパーティがデータをアプリケーションにインポートできる形式でファイルを作成することを期待しています。この形式は、将来、より多くの種類のデータをインポートできるように拡張される可能性もあります。
私が望んでいるのは、XMLファイルから処理するすべてのインポートデータをオブジェクトに取り込む簡単な方法です。
xmlファイルを逆シリアル化できると思っていたのですが、そもそもDTOオブジェクトをシリアル化せずにサードパーティがファイルを作成する際に問題が発生する可能性があるのではないかと心配しています。これは問題になる可能性がありますか?他の選択肢は何ですか、できればxmlファイルを手動で読み取る必要はありませんが、明らかにそれがフォールバックソリューションになります。
model-view-controller - MVC: DTO にデータ アクセス層への参照を与えるのは悪い形式と見なされますか?
DTOにデータ アクセス層への参照を与えるのは悪い形式と見なされますか?
それとも、データ アクセス層とアプリケーション層の間で常に DTO を渡す必要がありますか?
編集:たとえば、次のように想像してください。
- データベースに製品タイプのリストを保持しています。
- このリストを部分ビューのドロップダウン ボックスに表示したいと思います。
- この部分ビューは、DTO に厳密に型指定されています。
- 質問:
- 最初に製品タイプのリストを取得してから、コンストラクターを介して DTO に渡す必要がありますか?
- それとも、リポジトリ参照を DTO に渡し、データ アクセス レイヤーからこのリストを取得することを期待してもよいでしょうか?
.net - WCF (namedPipes) 経由で DTO を使用する必要がありますか?
つまり、http で WCF を使用していた場合、ためらうことはありません。
私の ORM は LLBLGen Pro で、変更の追跡などの非常に優れたエンティティ コレクション機能を提供してくれます。DTO パスに行くと、この機能が失われます。今のところ、クライアント側には Web アプリがあり、変更の追跡機能は必要ありませんが、いつの日かクライアント側に Silverlight アプリが登場するかもしれません。
これについてどう思いますか?
c# - AutoMapper:多対多の関連付けをDTOにマップします(コレクションアイテムのフラット化はサポートされていますか?)
チームと従業員の間には多対多の関係があります。
これを次のDTOにマッピングしたいと思います。
したがって、TeamNameはマップする必要があるものです。
次のマッピングコードを使用します。
問題はEmployee.Teamsメンバーです。ちなみに、Teamsコレクションは熱心にロードされています。だからそれはそこにあります。
TeamsがNullの場合、NullReference例外が発生します。
チームの名前をDTOにマッピングするにはどうすればよいですか?
編集:今のところ、私はAutomapperを離れ、代わりにこの面倒なコードを使用します:
私にとって、これはペントの匂いがします...
c# - BestPractice: ビューに多対多の関連付けをきれいに表示する方法は?
私は NHibernate を使用しており、従業員とチームの間に多対多の関連付けがあります。
ここで、すべての従業員をそのチーム メンバーの名前とともに表示したいと考えています。
可能性 1:
- AutoMapper を使用して、従業員のプロパティとチームの名前を含む DTO を作成します (チームのイーガー ロード)
- ビューに DTO を表示する
可能性 2:
- EmployeeTeam という新しいエンティティを作成し、それを NHibernate/FluentNHibernate にマップします (このエンティティは、データベース内の従業員とチームの間のリレーショナル テーブルとして機能します)。
- 熱心な読み込みを使用して TeamEmployee を読み込むには、Employee と Team を含めます
- EmployeeTeam エンティティを表示する
- EmployeeTeam メンバーを使用する (EmployeeTeam.Employee.Name、EmployeeTeam.Team.Name)
可能性 3:
- 可能性1と2として
- EmployeeTeam に DTO を使用する
可能性 4:
- ICriteria API を使用する
- AliasToBeanResultTransformer を使用します (これは使用しませんでした)
可能性 5:
- LINQ to NHibernate を使用する
- 私はまだ EmployeeTeam エンティティが必要だと思います (これは今のところ私のドメイン モデルにはありません)。
この問題のベスト プラクティスは何ですか?
他の提案はありますか?
java - XML を Java DTO に変換して GWT に戻す
GWT の使用中に Java DTO を XML に変換し、元に戻すための最良の方法を探しています。GWT のクライアント パッケージには、DOM パーサーである XMLParser が含まれていることがわかりました。GWT で使用できる JAXB のようなプラグイン機能を探しています。