ビジネスインターセプタ:詳細は、成功または失敗を決定します

オリジナルリンク: http://www.cnblogs.com/Barton131420/articles/280664.html

インターセプタこの事は限りインターセプタはに依存しなければならないとして、基本的にはアスペクト指向の概念であるAOPを実現するためのフレームワーク。しかし、まだ私は、.NET フレームワークの下でAOP はかなり私はについて非常に、非常に楽観していたなど、疑問の枠組みを存在城DynamicProxy に基づい城動的プロキシAspectSharp 私は間違いなく持って城を、しかし、容疑者Microsoftは、疑いないマイクロソフトの機能を、しかし疑いがマイクロソフトを開放性の。私は私が持っていた覚えている記事に書かれてAsp.net あなたが書く場合は、HttpModuleをしないあなたに、HttpModuleをのキャプチャセッション終了イベントを。それは私に深刻な打撃を与えました。私の結論は、ということであるマイクロソフトで製造この「バグ」のトラブルの枠組みにサードパーティの拡張機能を目的とした、意図的でした。理由は以下のとおりです。まず、バグ技術的な理由はない、なぜなら技術的な理由ではありません。第二には、バグは非常に、非常に軽いです、偶発好きではないバグを、そして関連でAPIのドキュメントを拡大しようとすることはない、常に曖昧でHttpModuleをを明確にすることにより説明。その後、あなたがで展開する必要があり、すべての穴をブロックのHttpApplication 由来クラス例えば、グローバル)を達成するために、そして春でカスタム設定として、ユーザによって解決されません。この理解を生成した後、私が持っているマイクロソフト嫌うを。私は、に基づいてすべてだと思うのMicrosoft .NET Framework どこにバインドされていない、サードパーティのライブラリ・ベンダー、オープンソースや商用。残念ながら、嫌悪感はなかった私のクライアントマイクロソフトでは、船が沈没されている場合があります軍艦に航海したとき、私も縛られなければなりません。これは、読者には影響されないことがあり、ちょうど私の個人的意見です

私が使用することはできませんリモーティングを提供AOPのパフォーマンスを考慮に加えて、アーキテクチャはあまりにも少し複雑になって、フレームワークを。そして私切片は、いくつかの非常にシンプルな傍受、またはまったくない本当の傍受されています。しかし、世界的に適していません委任)達成傍受し、十分に離れてビジネスへの依存からでなければならない、それは非常に単純にビジネス層にカスタム構成を織ることによってできなければなりません。

Iフレーム、ユーザー定義インターセプターに限り実装としてIInterceptorにこの例を実現するためにインターフェースを介して、インターフェースを、静的AppContextをインストールクラスは、インターセプタを織るの効果を得ることができます。余分なオブジェクトはもはやので、傍受ロジックを簡素化するために、「尊重」の考え方を隠し、関与することが必要であるため、パフォーマンスが理由傍受の影響を受けません。

このように定義されたインターセプタインターフェース:

None.gif      パブリック インターフェース IInterceptor { ボイド BeforeLoad(AppContextをコンテキストタイプLOADTYPE、  REF  制約constraint)。ボイド ポストロード(AppContextをコンテキスト  オブジェクト OBJ)。無効 BeforeInsert(AppContextをコンテキスト  オブジェクト OBJ)を、無効 PostInsert(AppContextをコンテキスト  オブジェクト OBJ)を、無効 のBeforeUpdate(AppContextをコンテキスト  オブジェクト OBJ)を、ボイド PostUpdate(AppContextをコンテキスト  オブジェクト OBJ)。BOOL  BeforeDelete(AppContextをコンテキスト  オブジェクト OBJ)。空隙  
ExpandedBlockStart.gifContractedBlock.gif    
dot.gifを使用
InBlock.gif        

InBlock.gif        

InBlock.gif        

InBlock.gif        

InBlock.gif        

InBlock.gif        

InBlock.gif        

InBlock.gif        
 削除後(AppContextをコンテキスト  オブジェクト OBJ)。
ExpandedBlockEnd.gif    }

None.gif

明らかに、各メソッドは、現在参加しているAppContextをすることが容易に現在のユーザーのコンテキストのIDを取得すること、パラメータを、権限の必要なセットを得ることは容易です。今、これらの8つのインターセプト法のそれぞれについて教えてください。

ロードする前に:そこにいくつかの「尊敬」されているそのような権利などいくつかの制約を追加する機会を持っています。方法制約型アドレスパラメータが渡され、それを交換することができます。また、ロードする前にオブジェクト権限のコントローラのようないくつかのエンティティをロードすることができます。

ローディング後:オブジェクトの「側面」の通知がロードされ、動的に生成するために、特定の「側面」で使用することができるデータセットを

オブジェクトを挿入する前に:いくつかの制御「アスペクト」プロパティがありますこれらのプロパティは、基本的なビジネス層が透明である可能性があります今回はこれらのプロパティを設定する機会を持っています。例えば、タイムスタンプに基づいて追加しました。

オブジェクトを挿入した後:成功したオブジェクトを挿入した後、「アスペクト」は、必要な仕上げを行う機会を持っています。

オブジェクトを更新する前に、いくつかの「面」があります。例えば、ビジネスルールの校正はこの改正の廃止まで、補正の値を修正する機会を持っています。

更新オブジェクト後:お知らせ「に対する」オブジェクトが正常に変更されている、動的に変更するために使用することができるデータセットを、またはログイン。

オブジェクトを削除する前に:いくつかの「尊敬」があるなどのログなどは、オブジェクトが削除され、またはのみ削除操作ではなく、操作を変更するかどうかを確認する必要があります。例えば、「顧客情報を削除し、」動作「が非表示お客様情報」操作に変更されました。インターフェースメソッドは操作をキャンセルするのに必要な持続性を通知するかどうかのためにブールを戻します。

オブジェクトを削除した後:お知らせ「に関して」オブジェクトが削除されている、また、動的に変更するために使用することができますDataSetをまたは記録されます。

ます。https://www.cnblogs.com/Barton131420/articles/280664.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_30410999/article/details/94797274