0

OperationContractエンティティを追加/更新するときに、何をすべきかを定義するのに問題があります。エンティティ (またはエンティティのリスト) を WCF サービス経由で送信したいと考えていますObjectContext(これにより、実際の検証を行うためにビジネス マネージャーがインスタンス化されます)。

エンティティがすべての検証ルールに合格した場合 (より複雑なビジネス ルールの合否を判断するためにデータベースにクエリを実行する必要がある場合があります)、エンティティはデータベースに保存され、返せるようにする必要があります。その ID (ID 列の主キー) と同時実行トークン (タイムスタンプ列) の値ですが、それが失敗した場合は、明らかに、何が問題だったかを示すメッセージが必要です。更新の場合、必要なのは同時実行トークンの新しい値だけですが、ここでも検証メッセージが必要です。

さらに複雑にするために、エンティティは複数の子/孫エンティティを持つこともできます。たとえば、トリップにはストップがあり、オーダーが含まれる可能性があります。

私は、人々が現実の世界でこれをどのように扱っているのか疑問に思っています。最も単純な例は、次のような WCF サービスの操作を示しています。

[OperationContract]
bool AddEntity(Entity e);

[OperationContract]
bool UpdateEntity(Entity e);

これを処理するための素晴らしいアイデアはありますか? 私は本当にここで実用的なアドバイスを探しているだけだと思います。

1 回のサービス呼び出しでオブジェクトのコレクションを保存しようとする必要がありますか?

フォールト コントラクトを通じて検証メッセージを伝達する必要がありますか?

アドバイス/入力があれば助かります、ありがとう!

4

1 に答える 1

0

1 回のサービス呼び出しでオブジェクトのコレクションを保存しようとする必要があるでしょうか?

1回の呼び出しでオブジェクトグラフ全体を保存することを意味する場合、答えは間違いなくイエスです。1 回の呼び出しで複数の独立したオブジェクト グラフ (コレクション) を保存することを意味する場合、答えはおそらくイエスです。クライアントとサービス間の往復回数を最小限に抑えることは良い考えですが、同時にこれを行うと複雑になる可能性があります。コレクション全体をアトミック操作として保存する必要があるか、それともコレクションの一部のみを保存して残りのエラーを返すことに満足するかを決定する必要があります。これは、アーキテクチャの残りの部分に影響を与えます。

フォールト コントラクトを通じて検証メッセージを伝達する必要がありますか?

はい。ただし、フォールト コントラクトは例外であり、例外は現在の操作を中断し、検証エラーのみを返す必要があるため、保存操作をアトミックとして使用する場合に限ります。すべての検証エラーを転送する単一のフォルト コントラクトがあれば十分です。アプリケーションが非常に面倒で役に立たなくなる可能性があるため、検証エラーごとに例外を発生させないでください。

検証に合格し、残りのエラーを返すコレクションの一部のみを保存する場合は、フォルト コントラクトを使用しないでください。フォールト コントラクトの代わりに、保存されたデータの ID とタイムスタンプ、および保存されていないデータの ID とエラーの両方を運ぶ、応答に使用されるコンテナー データ コントラクトが必要です。

STE への注意: ID とタイムスタンプだけを返すのは、おそらく注意が必要です。トラッキングを設定したいときにトラッキングをオフにしてから、トラッキングを再度オンにする必要がないかどうかはわかりません。

于 2011-06-17T08:47:19.423 に答える