0

データ・モデル:

tTemplate (TemplateId int PK)
tPage (PageId int PK、TemplateId int FK)
tEmailMessage (EmailMessageId int PK、TemplateId int FK)

要件:

テンプレートの削除は、依存関係がない場合にのみ許可する必要があります。

TemplateService は、テンプレートの削除を担当します。

new TemplateService().Delete(myTemplate);

Page および Email モジュールは Template モジュールに依存していますが、Template モジュールはこれらの依存関係を認識していません。一部のセットアップでは、ページまたは電子メール モジュールが存在しません。基になるデータ モデルへの依存関係をどのように解決しますか? 項目を削除してもよいかどうかを確認するために、TemplateService に照会を開始させるにはどうすればよいですか?

EventBroker と Message Queue について調査しましたが、それらだけでどのように役立つかわかりません。また、.net イベント モデルだけを使用してこれを解決する方法もわかりません。

データの整合性を維持する方法を実際に探しているわけではありませんが、不要なサービス依存を引き起こすことなくサービス間通信を可能にする方法を探しています。テンプレートを削除しても問題がなく、tPage.TemplateId を null に設定することで依存関係が解決される PageService の実装があるかもしれません。他の実装では、カスケード削除を作成したい場合があります。

4

1 に答える 1

1

これが、バッキング ストアが参照整合性を実装する必要がある理由です。可能であれば、モデルは同じことを実装しますが、削除は何も参照されていない場合にのみ機能します。

さらに、競合状態が発生して問題が発生する可能性があるため、削除を試みる前にすべてのデータをチェックしないことをお勧めします。効率の観点から、最上位オブジェクトの子行が常に存在すると仮定して、最初からカスケード削除を実装するだけで済みます。

.Net モデルは、すべてのデータがある場合にのみ参照整合性を保証します。それ以外の場合、削除は試行されるだけで、保証されません。

于 2009-02-11T11:52:26.780 に答える