2

現在、私のプロジェクトは、データベースにリンクされている WCF に大きく依存しています。システムで処理を行う場合は、ORM であるデータベースから生成されたクラスを使用します。

DataSvcUtil を使用すると、すべてのクラスを簡単に抽出し、それを DLL としてコンパイルして、他のシステム間で共有できることを知っています。

しかし、現在のプロジェクトでは、これらのクラスを直接使用するのではなく、WCF で生成されたテーブル クラスをミラーリングする別の DLL を作成します。

  1. だから私の質問は、これらの種類のベストプラクティスはありますか?
  2. これら2つの方法の長所と短所は何ですか?
  3. 他の方法はありますか?

ありがとう

アップデート:

コンセンサスは、WCF によって作成されたクラスに依存するのではなく、独自のカスタム クラスを作成することにあるようです。

私は現在このメソッドに従っています。現在、拡張機能を使用してモデルに変換するメソッドと、それを型に戻すメソッドを作成しています。

そして、独自のより単純なクラスを持つことは、拡張性やその他のものに適しています:)

4

3 に答える 3

1

WCF を引き続き使用することをお勧めしますが、サービス参照の代わりにコンパイル済みの dll をクライアントとして使用します。これにより、将来データベースを変更することにした場合でも、インターフェイスの一貫性を保つことができます。DLL を使用する利点:

  1. サービスが成長するにつれて、ユーザーがサービス参照を生成しようとすると、タイムアウトが発生することがあります。
  2. 間違ったサービス参照を持っている人から安全になります。サービス参照を生成するときに一部のプロパティを変更できるため、ユーザーは潜在的にデッド サービス参照を生成できます。
  3. わずかに異なる参照を生成する他の IDE から保護されます。
  4. クライアントの使用方法がユーザー間で同じであることを 100% 確信できるため、下位互換性を維持して問題を特定するのは少し簡単です。

DLL を使用する短所:

  1. 追加の参照があります
于 2012-02-22T14:01:06.697 に答える
0

現在のプロジェクトで行っているように、個別の dll を用意することをお勧めします。デカップリングはベスト プラクティスです。ただし、データベースから WCF DataContract を生成することは、ほぼ確実に良い考えではありません。ただし、最初のショットには使用できますが、その後の変更はデータベースが Web サービスに直接反映されないようにする必要があります。

WCF を使用する利点の 1 つは、サービス層を介して簡単にデカップリングを実現できることです。説明した方法でコンパイルされた dll を配布する場合、基本的にすべてのクライアントをデータベース表現に結合します。

デカップリングにより、すべてのクライアントを再コンパイルする必要なく、ORM / データベースを必要に応じて微調整できます。

短所としては、このようなデカップリングは事前に実装するのに少し時間がかかります。そのため、非常に小さなプロジェクトの場合はやり過ぎになる可能性があります。

于 2012-02-22T14:26:01.390 に答える
0

私はWCFにはあまり詳しくありませんが、Linq To Sqlを使用しています。これは、同じタイプのクラスを生成すると想定しています(ORMツールと同様)。私は常に、ドメイン モデルを記述する独自の POCO クラスを作成します。もう少し作業が必要であることは承知していますが、POCO クラスを生成されたクラスにマッピングする必要があります。しかし、ドメイン クラスを純粋に保つには、これが最善の方法だと思います。生成されたクラスは、データを入力するために使用されるテーブルと列を記述する属性で、多少複雑になる場合があります。生成されたクラスは、データベースとのやり取りが簡単になるので気に入っていますが、単純なドメイン クラスを分離することは常に好きです。また、データベースの実装を交換する柔軟性も与えてくれます。

于 2012-02-22T14:00:50.113 に答える