4

かなり複雑なクラス ライブラリをサービスとして公開しようとしていますが、WCF だと思いますが、かなりグリーンで、アーキテクチャ上で何ができて何ができないかを理解するのに苦労しています。私のクライアントも .NET (たとえば、WinForms、WPF、および/または ASP.NET MVC3 など) である場合、パブリック クラスを再公開するため、または複雑なオブジェクトをシリアル化するために一連のコントラクトを作成するのはやり過ぎのように思えます。それらの多くは値/プリミティブ型でのみ機能するため、そこにある多くのチュートリアルから知るのは困難です。

WCFは行くべき道ですか?その場合、クラス ライブラリがデータのすべての側面を管理し、オブジェクトのみを公開する場合、実装が最も簡単なフレーバーはどれですか?

簡単なアナロジー:HumanBody複数のユーザーを許可するサービスとして公開する必要があるクラス、常時オンなど。.NET Applause クライアントがあり、次のようなことをしたい場合

ServiceName.HumanBody myBody = new HumanBody();
myBody.Parts.Hands.Clap();  

これらのオブジェクトをインターフェイスに変換し、一連のラッパー メソッドを作成する必要がありますが、オブジェクトは存在するので「完全」です。これが、やり過ぎのように感じる理由です。(私はこれについて正しく考えていないことを知っています-それが質問の理由です。これらの質問があいまいすぎる場合は、コメント/回答を絞り込みます。)

(また、これを実際に達成する方法を尋ねているわけではないことに注意してください-SOにはすでにその質問の多くのバージョンがあり、ここここにいくつかの注目すべき良い答えがあります。独自のビルド方法に関する非常に役立つチュートリアルもありますVS が自動追加された乱雑さのない WCF アーキテクチャここ. 私は自分で構築に取り組んでいます.)

4

2 に答える 2

3

WCFはおそらくあなたにとって最良のルートです。ただし、アプローチ方法を考える前に、サービスとは何かを少し明確にする必要があると思います。

サービスは、使用するトランスポート層(HTTP、HTTPS、TCP、UDP、MSMQ、キャリアpidgeonsなど)に関係なく、パラメーターを受け取る操作のリストにすぎません。「HumanBody」クラスをそのままサービスとして公開することはできません。サービスはオブジェクト指向ではありません。それらは手続き型プログラミングに非常によく似ています。

もちろん、複雑なオブジェクトグラフをパラメーターとして送信したり、サービス操作の戻り値として返したりすることもできます。サービスへのインターフェイスがオブジェクト指向になるようにクライアントライブラリを作成することもできますが、実際のサービスコマンドはそのようにはなりません。

上記の例を使用するには、これをサービスインターフェイスとして使用します。

public interface IHumanBodyService
{
    ClapHands(<parameters>);
}

<parameters>これは、サービスが何をすべきかを知ることができるように、サービスに送信するために必要な識別情報です。これは、オブジェクトグラフ全体myBody(もちろん、シリアル化されていますが、クラスに適切な注釈が付けられている限り、WCFが処理します)の場合もあれば、BodyIdまたはPersonId値のような単純なものの場合もあります。

于 2012-04-20T14:31:36.220 に答える
2

ネットワーク上で実行されるインターフェイスは、できるだけおしゃべりをしないようにする必要があります。つまり、ネットワークを介した 1 回のラウンドトリップでほとんどの操作を実行することが望ましいということです。

メソッド呼び出しのチェーンを使用した例は、優れたオブジェクト指向 API ですが、残念ながら、これらすべての関数呼び出しで非常におしゃべりです。それを優れたネットワーク対応サービスとして公開するには、クライアントが必要とする基本機能ごとに 1 つのメソッドを含むサービス層にラップする必要があります。転送するデータは、データ転送オブジェクト (プロパティのみを持ち、動作を持たないクラス) にグループ化する必要があります。

WCF は、この設計原則をサポートするように設計されています。操作のみのサービス コントラクト インターフェイスと、データのみのデータ コントラクト クラスがあります。

オブジェクト指向の設計をネットワークに最適化されたサービス層にラップするのに役立つため、WCF は良い選択だと思います。

于 2012-04-20T14:35:40.030 に答える