問題タブ [data-transfer-objects]
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.
business-objects - DTOとBOとは何ですか?違いはなんですか?
DTOはデータ転送オブジェクトであり、BOはビジネスオブジェクトであることを私は知っています。しかし、それは実際にはどういう意味ですか?いつどちらを選ぶべきですか?から、私が理解していることは、DTOはデータの転送に使用されるだけであり、ビジネスロジックはありません。これは、DTOにプロパティ(ゲッターとセッター)のみのメソッドがないことを意味しますか?しかし、それでもBOの特性があります。誰か説明してもらえますか?ありがとう。
wcf - WCF サービスは EntityObject または POCO/DTO クラスを返す必要がありますか?
私は EntityFramework を使用して多くの WCF の例を見てきましたが、それらのほとんどは、ある種の POCO または DTO クラスをクライアントに返すようです。
EntityObject
デフォルトには[DataContract]
属性と実装が含まれているため、これがなぜなのか疑問に思っていましたINotifyPropertyChanged
。DTOまたはPOCOクラスを返すことはEntityObject
(またはその逆)よりも優れていますか? また、ある戻り値を別の戻り値よりも使用する方が良い特定のインスタンスはありますか?
c# - WCF サービスのモデルだけですか、それともクライアントのレプリカが必要ですか?
私はアプリケーションを構築しています。MVVM Light を使用して Silverlight 4 クライアントを作成しています。WCF サービスからデータを取得しています。少なくとも、これは計画です。
WCF サービスでは、アプリケーションで使用する必要がある "エンティティ" を定義しました。Silverlight クライアントで WCF サービスへの参照を追加すると、Visual Studio はクライアント側で、サービス内の属性 [DataContract] でマークされたすべてのクラスを再作成します。
私が知りたいのは、これが悪い習慣であるかどうか、そしてモデルをクライアント内に作成する方が良いかどうかです。私が理解している限り、最初のケースでは、Silverlight クライアントで ViewModel と View のみを作成する必要がありますが、2 番目のケースでは、Silverlight クライアント内で View、ViewModel、および Models を作成し、Models インスタンスにWCF サービスからの値。
ご協力ありがとうございました。
乾杯、G.
アップデート
わかりました、多くのフィードバックを受け取っていないので、私の質問は十分に明確ではないと思います. ただし、これに関する最新情報を提供したいと思います。私が探していた答えは「いいえ! データ転送オブジェクト!」です。
エンティティ クラス (DB テーブルにマップされたもの) を WCF サービスの DataContract として使用することを考えていました。この WCF サービスへの参照をクライアントに追加すると、DataContract で装飾されたすべてのクラスがクライアントにも作成されます。
私の場合の大きな問題は、データ層が Hibernate に基づいていることです。Hibernate は実行時に「データ プロキシ」クラスを頻繁に使用します (Castle Proxy を参照)。さて、これらのデータ プロキシにはシリアライゼーションの問題があることが判明しました。私が理解している限り、最善のアプローチは、「複雑な」エンティティを同様の「より軽量な」クラスにマップするためにデータ転送オブジェクト パターンを採用することです。 (DTO)。
これが他の誰かを助けることができることを願っています。
良い1日を!ジャンルカ。
oop - 複合 DTO 内の DTO は、主キーまたはオブジェクト参照によって相互に参照する必要がありますか?
転送オブジェクトには、他の転送オブジェクトへのオブジェクト参照を含めないようにすることをお勧めします。代わりに、他の転送オブジェクトの主キーを外部キー フィールドとして使用する必要があります。
Order と Customer をエンティティとして使用する簡単な例
明らかに、顧客の詳細を含まない注文のリストを含む OrderListDTO には、注文する顧客の詳細への外部キーが含まれます。
複合 DTO OrderWithCustomerDTO には、OrderDTO および CustomerDTO へのオブジェクト参照があります。しかし、この場合、埋め込まれた OrderDTO 自体に CustomerDTO へのオブジェクト参照が必要でしょうか? それとも、注文した顧客の主キーを使用する必要がありますか?
オブジェクト参照の表示
利点の 1 つは、クライアントが転送オブジェクトをプレゼンテーション モデルなどとして直接使用できることです。私は、関連する DTO を持つ複合 DTO や完全なツリーなど、常に完全に自己完結型の転送オブジェクトに対してこのアプローチを受け入れる傾向があります。クライアントは自己完結型に依存できます。クライアントは、転送オブジェクトを後処理する必要はまったくありません。
外部キーとしての主キーの表示
利点は、内部参照と外部参照が同じように扱われることです。外部参照を含む可能性のある転送オブジェクト (外部の childId を持つサブツリーなど) には、このアプローチが必要になる傾向があります。クライアントは、完全なリストを繰り返し処理して、外部の childIds を解決する必要があります。
ツリーまたはサブツリーを使用したより複雑な例
問題の転送オブジェクトはツリーまたはサブツリーです。技術的には、これはノードのリストです。
以下の NodeTOWithObjectReferences のようなオブジェクト参照で、転送オブジェクト内のノードが相互に参照しても問題ありませんか?
または、転送オブジェクトは、以下の NodesTOWithForeignKeys のような外部キー フィールドですべてのオブジェクト参照を置き換える必要がありますか?
(クライアントからのドメイン モデルをカプセル化し、クライアント固有のデータ ビューを提供するために、転送オブジェクトを選択しました。)
c# - データ転送オブジェクトのプロパティが外部キーを拡張するか、単に主キーを公開する必要があります
データベース内の従業員レコードを表すEmployeeDTOがあります。Employeeテーブルには、Departmentとの関係、およびPermissionとの1対多の関係があります。
私のエンティティでは、これらは完全に拡張されたDepartmentプロパティと完全に拡張されたアクセス許可オブジェクトのリストとして表されます。
問題は、DTOにDepartmentIdの完全に拡張されたDepartmentDTOプロパティを含める必要があるかどうかです。DTOには、List of PermissionIdの完全に拡張されたPermissionDTOプロパティのリストが必要ですか?
silverlight - Silverlightでアクセスできる必要があるDTOのVisualStudioプロジェクトタイプ
作成したデータ転送オブジェクトにSilverlightプロジェクトとWCFサービスプロジェクトの両方でアクセスできるようにするには、どのVSプロジェクトタイプを選択する必要がありますか。
(WCFサービスへのWebサービス参照を作成するときに、VSでSilverlightプロジェクトに新しいセットを生成するのではなく、両方のプロジェクトで定義したDTOを再利用できるようにしたい)。
IE、私の質問は、プロジェクトをWindowsクラスライブラリにすることも、Silverlightクラスライブラリにすることもできます(SilverlightプロジェクトとWCFプロジェクトの両方で参照するため)。
c# - POCOと「値オブジェクト」の唯一の違いはPOCOターゲット.Netですか?
私は実際にPOCOの正確な意味を理解しようとしています(はい、私はすでにウィキペディアを読んでいますが、それでも要点を理解することはできません:()。
値オブジェクトは、基本的に、動作なしでデータを保持するためのプロパティのみを持つオブジェクトであることを理解しています。
この場合、POCOと「値オブジェクト」は同じ構造を持っているように見えますが、違いはPOCOが.netフレームワークをターゲットにしているという事実にあります。
私は正しいですか?
ありがとう。
design-patterns - 転送オブジェクトは常に DB 行エントリ全体を反映する必要がありますか?
DAO パターンの transfer オブジェクトについて質問があります。USER テーブルがあり、このテーブルには 20 個のフィールドがあるとします。ビジネス ロジックでは、シナリオによってはフィールド 1 からフィールド 3 が必要であり、別のシナリオではフィールド 4 からフィールド 6 が必要になる場合があることに気付きました。したがって、userTO クラスを実装するときは、フィールド 1 ~ 6 のみを定義するか、20 個のフィールドすべてを定義する必要があります。もう 1 つのことは、20 個のフィールドすべてを定義するとUserDAOImpl
、userTO オブジェクトを開始するために、クラス内の SQL が常に 20 個のフィールドすべてをフェッチする必要があることです。これは問題になりますか?
どんな提案でも大歓迎です。ありがとう!
silverlight - WCF RIA サービスのマスターと詳細の DTO
マスターで多くの種類のアイテムを表示できるマスター/ディテール シナリオを作成する必要があります。それらはすべて実装されていますIDto
。
注: Entity Framework EDM (生成ObjectContext
およびEntityObject
s) を使用しています。
クラス階層は、はContact
のサブクラスでPerson
ありCompany
、Person
は のベースクラスであり、は のベースクラスです。には、または のいずれかのプロパティがあり、 のリストがあります。Employee
Company
Vendor
Customer
Contact
Contact
Person
Job
マスター リストで、DTO のコレクションをロードしますDomainService
(これは です。コントラクトLinqToEntitiesDomainService<ObjectContext>
で指定されたフィールドのみをIDto
選択し、選択すると、エンティティ全体とそのすべてのフィールド/関連データをロードします詳細エリアで。
更新:別のアイデアを考えました。
列挙型が int または tinyint として格納される上記のコントラクトの 3 行を返すデータベース ビュー (SQL2008) を作成しIDto
(その後、列挙型をバイトに変更します)、edm で階層ごとのテーブルを作成できます。リストに格納されている各 EntityType に対して、 からそれを返しDomainService
ます。
ところで、すべての列挙値がクエリに使用されます。実際、エンティティはContact
そのEntityType
プロパティに対して返されません。これContact
は、抽象的で aPerson
または a のいずれかである可能性があるためですCompany
が、両方をクエリするオプションが必要です。
更新 2
顧客は、リスト内の項目のそれぞれについて、そのすべての仕事も望んでいます。
上で説明した階層に基づいて、 a Customer
- すべてのジョブを選択します。aContact
または aの場合Person
- その を選択します( a の場合)。またはs は、s に登録するためのものではありません。Customer
Job
Customer
Vendor
Employee
Job
これを行う唯一の方法は、データベースビューを使用することだと思います。
私が間違っている?結果は何ですか?私はRIAでSL5を使用しています。
ビューの方法は良いですか?または、クライアント POCO を使用して、クライアント内のすべてのクエリを処理する必要がありますか? 実際には、この値は連絡先の名前とその仕事を取得するためにのみ使用されるためです。さらなる詳細と操作は、Entity
エンティティ自体の他のビューで行われます。
それで、専門家はどう思いますか?
ruby - 仮想オブジェクトへの配列
問題!
メソッドを介して配列を仮想オブジェクトに転送できるかどうか疑問に思いました。2つのプロパティ「@name」と「@lastname」を持つクラス「Person」があり、この情報を含む配列があるとします。したがって、必要なのは、各配列アイテムをPersonのクラスから新しいオブジェクトに渡すことです。
例 #
質問?
これは、Arrayのクラスを拡張することでも可能ですか?
どんな助けでも大歓迎です
〜EderQuiñones