公式説明:AOP(アスペクト指向プログラミング、アスペクト指向プログラミング)。これは、実行時にプリコンパイルと動的プロキシを介してソースコードを変更することなく、プログラムに関数を動的に追加できるテクノロジーです。これは新しい方法論であり、従来のOOPプログラミングを補足するものです。OOPは、需要関数をさまざまな比較的独立したカプセル化されたクラスに分割し、それらに独自の動作を持たせることと、継承とポリモーフィズムに依存して相互の関係を定義することに関係しています。AOPは、一般的な需要関数を決して作成できないようにしたいと考えています。関連するクラスを分離すると、多くのクラスで動作を共有できます。変更が発生すると、多くのクラスを変更する必要はなく、この動作を変更するだけで済みます。AOPはアスペクトを使用して分野横断的な懸念をモジュール化し、OOPはクラスを使用して状態と動作をモジュール化します。OOPの世界では、プログラムはクラスとインターフェースを介して編成され、プログラムのコアビジネスロジックを実装するためにそれらを使用するのが適切です。ただし、ロギング、権限の検証、例外インターセプトなどの分野横断的な問題(アプリケーションの複数のモジュールにわたる機能要件)を達成することは非常に困難です。
理解:特定の手段を通じて、関連するビジネスを監視および傍受する(監視方法の実装など)
AOP:シンプルな実装:
public interface IMessage { void SendMessage(string msg); } public class Message:IMessage { public virtual void SendMessage(string msg) { Console.WriteLine($ "{nameof(Message)} _ msa:{msg}"); } } / // <summary> ///これはメッセージ内のメソッドをラップする単純なプロキシクラスを使用します /// </ summary> public class ProxyMessage:Message { public override void SendMessage(string msg) { BeforExcute(msg) ; //実行前 base.SendMessage(msg); AfterExcute(msg); //実行後 } void BeforExcute(string msg) { Console.WriteLine($ "{nameof(BeforExcute)} _ msa:{msg}"); } void AfterExcute(string msg) { Console.WriteLine($ "{nameof(AfterExcute)} _ msa:{msg}"); } }
短所:取引量が多い場合、オブジェクトごとにプロキシオブジェクトを追加できないため、実装が面倒