Spring.NET教程(十一)——AOPの概念(基礎編)

3813 ワード

上編は簡単にAOPの応用シーンを了解しました.AOPを知っています.
プログラミングの重要性.このコードを見て、今日の勉強を始めます.
前編と似たコードを回顧します.SecurityService類のIsPassはユーザー名が「admin」であると判断した場合、データを保存する権限があります.Order Serviceはデータを保存するクラスで、IOrder Serviceインターフェースを実現します.    public class SecurityService
    {
        public bool IsPass(string userName)
        {
            return userName == "admin";
        }
    }
    public interface IOrderService
    {
        string UserName { get; set; }
        object Save(object id);
    }
実現部分
Order Service    public class OrderService : IOrderService
    {
        public string UserName { get; set; }
        public object Save(object id)
        {
            return " :" + id.ToString();
        }
    }
Around Advice    public class AroundAdvise : IMethodInterceptor
    {
        public object Invoke(IMethodInvocation invocation)
        {
            IOrderService target = (IOrderService)invocation.Target;
            SecurityService manager = new SecurityService();
            if (manager.IsPass(target.UserName))
            {
                return invocation.Proceed();
            }
            else
            {
                return null;
            }
        }
    }
クライアント部分:
Program    class Program
    {
        static void Main(string[] args)
        {
            ProxyFactory factory = new ProxyFactory(new OrderService() { UserName = "admin" });
            factory.AddAdvice(new AroundAdvise());
            IOrderService service = (IOrderService)factory.GetProxy();
            object result = service.Save(1);
            Console.WriteLine(result);
            
            Console.ReadLine();
        }
    }
出力:保存:1
上編の学習を通して、私達はAOPとは何かを知っています.AOP(切断面向けプログラミング)では、プログラムを作成する時、まずプログラムの中でどのような方法をブロックするかを考えます.これらの方法をブロックした後、どのような業務処理をしますか?これらの過程に注目して、私達はこれを「横断的な懸念点」と呼びます.「横断的な懸念点」から以下の概念を示しています.
Asppect(面を切ります):横断的に点に関心を持つ抽象的なことを指して面を切って、それは種類と似ていて、ただ両者の関心の点は異なっていて、種類は物体の特徴に対する抽象的なので、面を切るのは横断的に点の抽象に関心を持つのです.プログラムの中のうどんはArondAdvice類の実現部分です.
ジョインポイント:接続点とは、ブロックされている点のことです.Spring.NETでは、接続点は方法のタイプの接続点だけをサポートしているので、実際には、jinpoint(接続点)はフィールドやコンストラクタでも良いです.プログラムの接続点は、Order Service類のSave方法のようにブロックされる方法です.
Point cut(切り込みポイント):切り込みポイントとは、それらのjoinpoint(接続点)をブロックするという定義です.プログラムではinvocation.Methodを使ってブロックの方式を判断していませんが、Pointcutはすべての方法をブロックします.
 
Advice(通知):通知とは、joinpoint(接続点)を遮断した後にすることです.通知は事前通知、後置通知、異常通知、折り返し通知に分けられます.AoundAdviceはAopAlliance.Intercept.IMethodIntercepterインターフェイスを継承しています.プログラムではサラウンド通知を使用しています.
ターゲット:エージェントのオブジェクト.プログラム内のターゲットはOrder Service類です.
ProxyFactory factory=new ProxyFactory(new OrderService){UserName=「admin」);
このコードはターゲットがOrder Serviceであることを確定しています.
AOPエージェント(AOP proxy):ターゲットに適用されたことを知らせるAOPフレームで作成されたオブジェクトです.プログラムでGetProxy()法により作成された代理オブジェクトです.
Weave(織込み):切面を対象対象対象に適用し、代理(proxy)オブジェクトを作成するプロセスを織込みといいます.プログラムに適用されているように、Order Service類は判断権限の機能を備えていません.私たちは判断権限の機能であるSecurityService類のIsPass方法をターゲットオブジェクトに適用します.
Introduction(導入):クラスコードを修正しない前提で、Introduction(導入):実行期間中にクラスのために、いくつかの方法またはフィールドを動的に追加することができる.プログラムでは、Order Service類を修正することなく、実行期間中に判断権限の機能をProxyFactoryのAddAdviceメソッドによって動的に追加します.
これらの用語はSpring.NETに属さず、全体のAOPプログラミングに属する.AOPというのは、私の理解というのはこのような過程であるべきです.まず切断面を定義する必要があります.この面は一つの種類です.中の方法は注目点(通知でもあります.)です.あるいは、中の方法は目標対象方法を実行する時に実行する前の通知、後の通知、異常通知、最終通知、折り返し通知などです.切面と通知があり、対象対象に適用するには、これらの通知の切込み点を定義する必要があり、言い換えれば、どのような方法をブロックする必要がありますか?これらのブロックされた方法は接続点です.接続点とは、動的に実行する過程で、切断面に織り込まれる方法です.したがって、動的プロセスにおいて通知された実行は織り込みプロセスに属し、これらの通知に織り込まれたオブジェクトが対象となります.