C#中面向切面編程AOP

AOP(Aspect-Oriented Programming)面向切面編程思想做爲OOP的補充,在.Net領域也流行好幾年了,確實能解決OOP的頑疾,是OOP程序設計一大福音!如今各類框架組件裏面,AOP已是標配,各類筆試面試的過程當中,更是不可或缺的!上一篇Eleven從理論上細談了對AOP的理解,今天直接上C#實例!面試

【靜態AOP】編程

AOP要作的就是在不破壞封裝的前提下,去擴展新的功能。咱們應該很容易想到設計模式裏面的裝飾器模式和代理模式,下面分別看看具體實現:設計模式

interface IUserProcessor
    {
        void RegUser(User user);
    }

    public class UserProcessor : IUserProcessor
    {
        public void RegUser(User user)
        {
            Console.WriteLine("用戶已經註冊。Name:{0}  PWD: {1}", user.Name, user.Pwd);
        }
    }

以上爲 原始的業務,實現爲:一個簡單的抽象+實現,裏面模擬完成用戶的註冊功能。框架

public class UserProcessorDecorator : IUserProcessor
    {
        private IUserProcessor _UserProcessor { get; set; }
        public UserProcessorDecorator(IUserProcessor userProcessor)
        {
            _UserProcessor = userProcessor;
        }
        public void RegUser(User user)
        {
            this.BeforProceed(user);
            this._UserProcessor.RegUser(user);
            this.AfterProceed(user);
        }
    }

組合+繼承的融合,是裝飾器模式的顯示特徵。這裏作到了經過Decorator來調用RegUser時,你在註冊用戶完成後加上另外的邏輯,同時也沒有破壞原有的封裝。this

public class ProxyUserProcessor:IUserProcessor
    {
        private IUserProcessor _UserProcessor = new UserProcessor();
        public void RegUser(User user)
        {
            BeforeProceed(user);
            this._UserProcessor.RegUser(user);
            AfterProceed(user);
        }
    }

代理模式一樣簡單,作到了經過proxy來調用RegUser時,能在註冊用戶先後,分別加上額外的功能;同時也不會破壞原有的封裝性。spa

【動態AOP】設計

看完2中靜態AOP實現後,下列將經過動態AOP來實現;代理

public static class TransparentProxy
    {
        public static T Create<T>()
        {
            T instance = Activator.CreateInstance<T>();
            return instance;

            
        }
    }
相關文章
相關標籤/搜索