AOP面向切面编程C#实例
原创: eleven
原文:https://mp.weixin.qq.com/s/8klfhCkagOxlF1R0qfZsgg
【前言】
AOP(Aspect-Oriented Programming)面向切面编程思想作为OOP的补充,在.Net领域也流行好几年了,确实能解决OOP的顽疾,是OOP程序设计一大福音!现在各种框架组件里面,AOP已经是标配,各种笔试面试的过程中,更是不可或缺的!上一篇Eleven从理论上细谈了对AOP的理解,今天直接上C#实例!
【静态AOP】
AOP要做的就是能在不破坏封装的前提下,去扩展新的功能!说道这里,我们应该很容易想到设计模式里面的装饰器模式和代理模式,下面分别看看具体实现:

以上为原始业务,就是一个简单的抽象+实现,里面模拟完成用户的注册功能。

组合+继承的融合应用,是装饰器模式的显著特征。这里做到了通过Decorator来调用RegUser时,能在注册用户前后,分别加上额外的逻辑,可以是任何你需要的通用逻辑,同时也没有破坏原有封装!

代理模式同样简单,做到了通过Proxy来调用RegUser时,能在注册用户前后,分别加上额外的逻辑,可以是任何你需要的通用逻辑,同时也没有破坏原有封装!
注:有小伙伴儿会觉得两个模式是一样的,建议去历史消息查看代理模式和和装饰器模式的文章,有分别讲解两种模式和异同!
【动态AOP】
看完两种静态AOP实现后,小伙伴儿们可能有些疑问,如果扩展功能都是这样写死的话,好像也没啥意义呀,而且目前这两个也谈不上通用,只是为固定业务服务的。是的,那下面就来看集中动态的AOP实现方式,这才是真的AOP实现!



基于.Net Remoting的RealProxy实现的动态代理,有个局限是业务类必须继承自MarshalByRefObject类型。调用RegUser时,能在注册用户前后,分别加上额外的逻辑,可以是任何你需要的通用逻辑,同时也没有破坏原有封装!


基于Castle的DynamicProxy实现的动态代理,有个局限是业务类方法必须显示声明为virtual。调用RegUser时,能在注册用户前后,分别加上额外的逻辑,可以是任何你需要的通用逻辑,同时也没有破坏原有封装!
动态AOP还有种实现方式是静态织入,常见的框架有AspectSharp、PostSharp等。实现的核心原理是在程序运行之前的编译时或者编译后在IL的级别修改二进制程序集的方式来插入额外代码,来完成功能的织入!这种植入是直接修改了dll文件的,基于成熟的框架实现并不难(PostSharp收费),但是有个重大缺陷是dll替换升级问题,而且调试很不方便!这里Eleven就不打算展开了。
【结语】
本文展示了C#中AOP的四种实现方式,包含静态设计模式实现和动态代理实现,同时还探讨了静态织入技术的原理和局限性。不过以上多种方式都有自己的局限性,在实际开发过程中并不太方便,下一篇文章里,我将带来实际开发项目中,AOP的实践,敬请期待!欢迎关注公众号,欢迎讨论,欢迎转发,愿天下有需求的人都能看到!

更多技术问题,欢迎关注公众号【程序员在职场】进行获取
AOP面向切面编程C#实例的更多相关文章
- Spring:AOP面向切面编程
AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果. AOP是软件开发思想阶段性的产物,我们比较熟悉面向过程O ...
- Aspects– iOS的AOP面向切面编程的库
简介 一个简洁高效的用于使iOS支持AOP面向切面编程的库.它可以帮助你在不改变一个类或类实例的代码的前提下,有效更改类的行为.比iOS传统的 AOP方法,更加简单高效.支持在方法执行的前/后或替代原 ...
- 浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~
简介 我们都知道,Spring 框架作为后端主流框架之一,最有特点的三部分就是IOC控制反转.依赖注入.以及AOP切面.当然AOP作为一个Spring 的重要组成模块,当然IOC是不依赖于Spring ...
- AOP 面向切面编程, Attribute在项目中的应用
一.AOP(面向切面编程)简介 在我们平时的开发中,我们一般都是面对对象编程,面向对象的特点是继承.多态和封装,我们的业务逻辑代码主要是写在这一个个的类中,但我们在实现业务的同时,难免也到多个重复的操 ...
- AOP面向切面编程的四种实现
一.AOP(面向切面编程)的四种实现分别为最原始的经典AOP.代理工厂bean(ProxyFacteryBean)和默认自动代理DefaultAdvisorAutoProxyCreator以及Bea ...
- Javascript aop(面向切面编程)之around(环绕)
Aop又叫面向切面编程,其中“通知”是切面的具体实现,分为before(前置通知).after(后置通知).around(环绕通知),用过spring的同学肯定对它非常熟悉,而在js中,AOP是一个被 ...
- Method Swizzling和AOP(面向切面编程)实践
Method Swizzling和AOP(面向切面编程)实践 参考: http://www.cocoachina.com/ios/20150120/10959.html 上一篇介绍了 Objectiv ...
- [转] AOP面向切面编程
AOP面向切面编程 AOP(Aspect-Oriented Programming,面向切面的编程),它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. ...
- C# AOP 面向切面编程之 调用拦截
有时候我们需要在代码中对方法调用进行拦截,并修改参数和返回值,这种操作叫做AOP(面向切面编程) 不过需要注意的是,AOP的效率很慢,在需要高效率场合慎用. 以下是C#的AOP方法: 首先建立一个控制 ...
随机推荐
- JavaSE-管道流
1,)创建管道输出流PipedOutputStream pos和管道输入流PipedInputStream pis 2,)将pos和pis匹配,pos.connect(pis); 3,)将pos赋给信 ...
- 查询APP Store已发布过的版本记录
1.国内APP使用 酷传 搜索,即可查询到版本记录 2.国外的APP 无法通过国内软件进行搜索,可在App store中直接查询.步骤如下:
- TensorFlow从1到2(一)续讲从锅炉工到AI专家
引言 原来引用过一个段子,这里还要再引用一次.是关于苹果的.大意是,苹果发布了新的开发语言Swift,有非常多优秀的特征,于是很多时髦的程序员入坑学习.不料,经过一段头脑体操一般的勤学苦练,发现使用S ...
- Java进阶篇设计模式之十 ---- 访问者模式和中介者模式
前言 在上一篇中我们学习了行为型模式的解释器模式(Interpreter Pattern)和迭代器模式(Iterator Pattern).本篇则来学习下行为型模式的两个模式,访问者模式(Visito ...
- [开源]MasterChief 快速开发辅助类库
C# 开发辅助类库,和士官长一样身经百战且越战越勇的战争机器,能力无人能出其右. GitHub:MasterChief 欢迎Star,欢迎Issues: 项目架构思维导图: 目录 1. 数据库访问 2 ...
- Unity3D Input按键系统
默认输入轴: Horizontal 和 Vertical被映射到w, a, s, d键和方向键 Fire1, Fire2, Fire3被分别映射到Ctrl,Option(Alt)和Command键 M ...
- 设计模式之行为类模式PK
行为类模式包括: 责任链模式 命令模式 解释器模式 迭代器模式 中介者模式 备忘录模式 观察者模式 状态模式 策略模式 模板方法模式 访问者模式 行为型模式涉及到算法和对象间职责的分配 行为类模式关注 ...
- Rest_framework Serializer 序列化 (含源码浅解序列化过程)
目录 Rest_framework Serializer 序列化 序列化与反序列化中不得不说的感情纠葛 三角恋之 save/update/create 四角恋之 序列化参数instance/data/ ...
- Nginx 一个高性能的HTTP和反向代理服务器
本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解过,欢迎留言交流. Nginx能做什么 ——反向 ...
- x宝23大洋包邮的老式大朝华MP3播放器简单评测
(纯兴趣测评,非广告) 最近逛X宝,看到了这个古董级MP3播放器居然还在售,于是脑抽+情怀泛滥买了一个. 然后呢,从遥远的深圳跨越好几千公里邮过来了这个玩意: 那节南孚5号电池是我自己的,是为了对比一 ...