8

上記のように、WCF と Entity Framework 4 (poco を使用) で動作する多層アーキテクチャを実装しています。私はすでに POCO を永続的に無視しているので、DTO を実装する必要がありますか、それとも純粋な方法で WCF を使用できますか?

主な引用は次のとおりです-ネットワーク上で軽量オブジェクトを渡すにはDTOが必要です。そうしないと、POCOエンティティを使用できます。

皆さんは何をお勧めしますか?

4

3 に答える 3

3

「純粋な方法」とは何かを定義しない限り、答えるのは難しいです。SOA ピュアと WCF ピュアのどちらを話しているのでしょうか?

WCF プロキシは、サービス コントラクト全体にビジネス ロジックを持ち込まないため、ある意味で既に DTO です。WCF によって生成されたプロキシ クラスの上に DTO の別のレイヤーを作成するのは冗長に思えます。

あなたが答えたい最大の質問は、「このソリューションはどのような SOA ですか?」です。SOA に準拠したい場合、サービスの境界を越えて POCO エンティティを共有することはできません。SOA はすべて、異種の契約に関するものです。

すべての SOA ベースに移行すると、多くの機能が失われます。これは、ほとんどの場合、Web 層が動作するクラスが愚かなプロキシになるためです。多くのロジックを繰り返す必要があり、MVC 2 が提供する多くの「メタデータ、設定より規約」機能を失いました。

SOA のバズワードをシュレッダーに投げ込むと ( http://soafacts.com/ )、層を越えてビジネス ロジックとメタ データ情報を共有するのがはるかに簡単になります。Web サービスの唯一の利用者が自分自身である場合、この方法がおそらく最良の選択です。

これは、POCO エンティティの代わりに DTO を使用してネットワーク経由で送信できる場所です。唯一の欠点は、繰り返しのロジックと、何もしないボイラー プレートの儀式的なコードがたくさんあることです。本当にプロジェクトのサイズに依存します。規模が小さい場合は DTO のことは忘れてください。ただし、20 万人の LoC で作業している 20 人の開発者がいる場合は、おそらく DTO を作成する価値があります。

于 2010-01-05T15:29:17.427 に答える
1

jfar が言ったように、サービスを利用するのは 1 人だけになるのか、それともプレゼンテーション層があなただけになるのかによって異なります。

後者を行っていて、サービスを使用するのは自分だけになる場合は、wcf サービスの境界を越えて POCO をシリアル化できます。これは私が最近行ったことであり、それを機能させることについてこのブログ投稿を書きました。これにより、アプリケーション層とプレゼンテーション層で同じエンティティを使用できます。

それが役に立てば幸い。

于 2010-01-05T15:52:13.377 に答える
1

EF で WCF を使用する場合に DTO を推奨する最も強力な理由は、EF データベース ファースト クラスが実装の依存関係をプロキシ クラスにドラッグすることです。POCO クラスでコード ファーストを使用している場合、実装の依存関係はありません。

POCO クラスだけを返してみてください。ただし、生成されたプロキシ クラスをよく見てください。これらのクラスには、EF インフラストラクチャの一部であるものが何も含まれていないことを確認してください。プロキシ クラスがクリーンであれば、準備は完了です。

于 2011-10-10T23:35:14.573 に答える