前言
1.引言
2.Aop概念
3.Aop实践
4.总结
一、引言
对于初入行的小白来讲,aop,ioc这两个程序设计思想总是傻傻分不清,不知道是个什么东东?别人再一谈各种框架更是云里雾里。。。博主今天带大家且先入个门,哈哈;)
二、Aop概念
AOP为Aspect Oriented Programming的缩写,译为:面向切面编程。通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
三、Aop实践
在开发中,相信大家都遇到过验证用户权限的事情,那是不是需要在每个界面上都要加个判断呢?假如通过验证,就执行某某业务逻辑,不通过,就跳转或者提示啊 怎么怎么样。。。
示图一
从程序设计的角度来考虑,验证用户 这件事情我们是不是可以分离出去呢,因为都是相同的嘛,减少重复,也是在不修改源代码的情况下动态统一添加功能;另一个方面可以 让一个对象尽可能的多关注自己的业务逻辑。这对于建立一个松耦合、可复用、可扩展性的系统是非常有利的。
下面介绍静态代理和动态代理实现AOP。(IL编织实现AOP这篇暂时先不介绍。。。)
创建公用的Model类
public class User { public int Age { get; set; } public string Name { get; set; } }
代理模式 实现静态代理
//代理模式 实现静态代理 class DecoratorAop { public static void Show() { User user = new User { Age = 3, Name = "Michael" }; IUserProcesser processer = new UserProcesser(); processer.RegUser(user); IUserProcesser userProcesser = new UserProcesserDecorator(processer); userProcesser.RegUser(user); } public interface IUserProcesser { void RegUser(User user); } public class UserProcesser : IUserProcesser { public void RegUser(User user) { Console.WriteLine($"注册用户,年龄为{user.Age},姓名{user.Name}"); } } public class UserProcesserDecorator : IUserProcesser { public IUserProcesser userProcesser; public UserProcesserDecorator(IUserProcesser processer) { userProcesser = processer; } public void RegUser(User user) { BeforeProcess(); Console.WriteLine($"注册用户,年龄为{user.Age},姓名{user.Name}"); AfterProcess(); } public void BeforeProcess() { Console.WriteLine("方法执行前"); } public void AfterProcess() { Console.WriteLine("方法执行后"); } } } class Program { static void Main(string[] args) { DecoratorAop.Show(); Console.ReadLine(); } }