2

私はWebサービスの世界に手を出しており、数学演算を模倣した単純なWebサービスを作成しています。最初は単純で、2つの整数を渡してから、呼び出されたメソッドに応じて2項演算子がこれら(プラス、マイナスなど)に適用されます。

次に、物事をもう少し複雑にしてオブジェクトの受け渡しを開始することにしましたが、Webサービスはクラスのデータ側のみを公開し、機能側は公開しないことに気付きました。

これに対処する良い方法は、サービス側のクラスを部分クラス(クラスカプセル化フォームのこちら側)にし、クライアント側に別の部分クラス(クラスのこちら側が機能をカプセル化する)にすることだと言われました。 )。これは物事を行うためのエレガントな方法のようです。

そこで、上記のように2つのクラスを設定しましたが、言われたとおりに機能していないようです。

私が試みていることは可能ですか?もしそうなら、私はどこが間違っているのですか?

4

4 に答える 4

2

部分クラスは、実際には、自動生成コードを開発者コードから分離するためのツールです。

良い例は、VS の Windows フォーム デザイナー、または新しい DBML Linq DataContext 生成コードです。

一度に 1 人のユーザーのみがファイルを編集できる VSS スタイルのソース管理プロバイダーでそれらを使用することについても議論があります。

機能を論理的に分離するためにそれらを使用することはお勧めできません。分割はコンパイル前にのみ存在します。コンパイルするとすぐに 1 つのクラスだけが得られますが、デバッグや内部操作の追跡が容易なクラスはありません。

あなたが説明したことは、WCF コントラクトを使用するのに非常に適した状況のように思えます。その場合、クライアントとサーバーの両方がインターフェース (またはインターフェース) を共有します。

複雑なコードはそこに移動し、個別に、つまり接続されたアプリケーションの外部で単体テストできます。バグが見つかった場合は、コードの問題を迅速に排除し、代わりに接続関連の問題の調査に移ることができます。

于 2008-10-22T19:47:48.500 に答える
0

フランシが言ったように、それは単にあなたが同じクラスの別々の部分を異なるファイルに入れることを可能にします。

代わりに、どのように構造化するかは、実際に何をしているかによって異なります。もし私があなたなら、データを運ぶクラスと、そのデータを処理するために使用できるコンシューマーを持っているでしょう。

共有アセンブリを使用することもお勧めします。ただし、本当にサーバーからクライアントにコードを送信できるようにしたい場合は、CSharpCodeProviderが機能します。

于 2008-10-22T19:28:31.537 に答える
0

部分クラスではありません。部分クラスは、さまざまなソース ファイルにクラスのさまざまな部分を含めることができる構文構造です。ただし、部分クラスのすべての部分は、最終的に同じバイナリにコンパイルされます。

拡張メソッドを使用して、データ コントラクトを表すクラスに機能を追加できます。

また、共有アセンブリにクラスを実装し、svcutil.exe /reference を使用してクライアント プロキシにインポートすることもできます。Web サービスの名前空間にまったく新しい宣言を含める必要はありません。

于 2008-10-22T16:34:41.933 に答える