什麼是AOP?
Aspect-oriented programming(AOP)稱為面向導向程式設計,但他不是一個設計模式
這樣說很抽象,也不知道這可以應用在何處,所以這邊講幾個可以應用的情況
1.權限的檢查 (判斷是否登入)
2.執行時間 (效能分析)
3.想記錄Method傳入的參數與傳出的參數
所以這邊介紹一個AOP套件AspectInjector,以下是程式範例
using AspectInjector.Broker; using Newtonsoft.Json; using System; namespace ConsoleApp3 { class Program { static void Main(string[] args) { Console.WriteLine(GetData("1234")); Console.ReadLine(); } [LogAspect] public static string GetData(string value) { return "test" + value; } } [Aspect(Scope.Global)] [Injection(typeof(LogAspect))] public class LogAspect : Attribute { /// <summary> /// 執行前 /// </summary> /// <param name="name">方法名</param> /// <param name="arguments">参数</param> [Advice(Kind.Before)] public void LogBefore([Argument(Source.Name)] string name, [Argument(Source.Arguments)] object[] arguments) { Console.WriteLine($"Before,方法:'{name}'," + $"參數:{JsonConvert.SerializeObject(arguments)}"); } /// <summary> /// 執行後 /// </summary> /// <param name="name">方法名</param> /// <param name="arguments">参數</param> /// <param name="retrrnValue">返回值</param> [Advice(Kind.After)] public void LogAfter([Argument(Source.Name)] string name, [Argument(Source.Arguments)] object[] arguments, [Argument(Source.ReturnValue)] object retrrnValue) { Console.WriteLine($"After,方法:'{name}'," + $"參數:{JsonConvert.SerializeObject(arguments)}," + $"返回:{JsonConvert.SerializeObject(retrrnValue)}"); } } }
執行結果,呼叫這個Method會自動記錄Log是不是很方便
AOP最重要的目的就是,抽離共用邏輯,專注於商業邏輯
沒有留言:
張貼留言