走进AOP In .NET
AOP是什么,有的译为面向方面编程,有的译为面向切面编程,我更加赞同后者。接下来,让我们一步步揭开AOP的面纱。
AOP衍生自 编程中出现了一些用OOP技术无法捕捉和解决的问题。跟其他开发工具和思想一样,AOP有他自己的一套东西包括语法什么的以此来描述它的特性。AOP存在的意义在于OOP的切面上,所谓切面也就是在整个系统的很多部分中都存在,我们将这部分独立出来放到一个类里然后在任何需要使用的地方apply刚才那个Aspect,我觉得现在的很多框架或者思想都是在追求一个解耦,当然完全解耦的程序是没有用处,我们往往需要在里面找到一个平衡点,比较典型的就是MVC。我们来看一个例子:
考虑这样一个场景,整个系统分为很多部分每个部分都有日志记录功能,这个功能在开发测试完后却被告知要修改,没有AOP我们只能去找出所有包含这段代码的地方然后去修改它(也许有的童鞋会说使用属性或者其他的方法,这里主要是介绍AOP不是说这个是唯一的方法),现在有了AOP我们把这部分独立出来,一旦要修改只需要修改写好的切面方法就可以,省去了很多麻烦。如下:
[LoggingAspect]
public void Accrue(RentalAgreetment rentalAgreetment)
{
if (rentalAgreetment == null)
throw new ArgumentNullException("rentalAgreetment"); try
{
using (var scope = new TransactionScope())
{
var retries = ;
var succeeded = false;
while (!succeeded)
{
try
{
var rentalTimeSpan = rentalAgreetment.EndTime.Subtract(rentalAgreetment.StartTime);
var numberOfDays = (Int32) Math.Floor(rentalTimeSpan.TotalDays);
var pointsPerDay = ;
if (rentalAgreetment.Vehicle.Size > Size.Luxury)
pointsPerDay = ;
var point = numberOfDays*pointsPerDay;
_loyaltyDataServices.AddPoints(rentalAgreetment.Customer.Id, point);
//Console.WriteLine("Accrue complete :{0}", DateTime.Now);
scope.Complete();
succeeded = true;
}
catch
{
if (retries > )
retries--;
else
{
throw;
}
}
}
}
}
catch
{
throw;
}
}
我们修改则只需要修改上面的LoggingAspect这个类就好了,这个类似于C#里面的属性,应该说看到这篇文章的都应该比较熟悉的。
AOP既然够功能这么强大,它是怎么工作或者是怎么来实现这个的呢,这里有一个概念 织入(WEAVING)同时分为静态织入与动态织入这个以后再仔细分析这两个的区别以及用处。
(未完待续)
走进AOP In .NET的更多相关文章
- Spring源码学习(7)——AOP
我们知道,使用面对对象编程的时候有一些弊端,当需要为多个不具有继承关系的对象引入同一个公共行为时,例如日志.安全检测等,所以就有了一个对面对对象编程的补充,即面对切面编程(AOP),AOP所关注的方向 ...
- 转载:AOP那点事
原作者:黄勇 博客地址:https://my.oschina.net/huangyong/blog/161338 又是一个周末,刚给宝宝喂完牛奶,终于让她睡着了.所以现在我才能腾出手来,坐在电脑面前给 ...
- Spring 学习之AOP
1. 走进面前切面编程 编程范式: 面向过程编程,c语言: 面向对象编程:c++,java,c#; 函数式编程: 事件驱动编程: 面向切面编程: AOP是一种编程范式,不是编程语言:解决特定问题,不能 ...
- 我的AOP那点事儿--1
题记:一段时间以来一直想整理下关于AOP的知识,之前一直停留在会怎么使用AOP,关于AOP的深入点儿的知识就不知所以然了,正好项目上刚好用到需要用AOP实现的功能,所以找个时间统一整理下就很有必要了. ...
- 【SpringMVC学习02】走进SpringMVC的世界
上一篇博文主要介绍了springmvc的整个架构执行流程,对springmvc有了宏观上的把握,这一篇博文主要以案例作为驱动,带你走进springmvc的世界.案例中的需求很简单:对商品列表的查询.表 ...
- 【转载】面向切面编程(AOP)学习
看到这篇文章,学习一下:http://www.ciaoshen.com/2016/10/28/aop/ 想理清一下从“动态代理”,到 “注释”,到“面向切面编程”这么一个技术演进的脉络. 只想讲清楚两 ...
- Java AOP
AOP 今天我要和大家分享的是 AOP(Aspect-Oriented Programming)这个东西,名字与 OOP 仅差一个字母,其实它是对 OOP 编程方式的一种补充,并非是取而代之.翻译过来 ...
- 详细解读 Spring AOP 面向切面编程(一)
又是一个周末, 今天我要和大家分享的是 AOP(Aspect-Oriented Programming)这个东西,名字与 OOP 仅差一个字母,其实它是对 OOP 编程方式的一种补充,并非是取而代之. ...
- 走进JavaWeb技术世界3:JDBC的进化与连接池技术
走进JavaWeb技术世界3:JDBC的进化与连接池技术 转载公众号[码农翻身] 网络访问 随着 Oracle, Sybase, SQL Server ,DB2, Mysql 等人陆陆续续住进数据库 ...
随机推荐
- Flask之模板之控制语句
3.4 控制语句 常用的几种控制语句: 模板中的if控制语句 @app.route('/user') def user(): user = 'dongGe' return render_templat ...
- C#获取外网IP、本机MAC地址及Ping的实现
原文 获取外网IP, C#获取本机的MAC地址,C#通过编程方式实现Ping 获取外网IP地址 思路是通过WebRequest连接一些网上提供IP查询服务的网站,下载到含有你的IP的网页,然后用正则表 ...
- Zabbix 监控 Mysql 状态
简介: 如何使用 Zabbix 来监控 Mysql 状态 ? Zabbix 有自带监控 Mysql 的模板,但是却不能直接使用.. 需要我们根据模板提供的 Key 自己写脚本获取数据 1.查看都有哪些 ...
- requesth获取参数
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) t ...
- 打包jar文件并自动运行
1,首先在eclipse 或MyEclipse 中测试通过,没有问题,(每次修改要update Maven) 2,修改pom.xml ---把build中改为<excludes> < ...
- tomcat的配置文件server.conf中的元素的理解
tomcat的配置文件server.conf中的元素的理解 tomcat作为一个servlet服务器本身的配置文件是tomcat_home/conf/server.conf,这个配置文件中有很多元素, ...
- Elasticsearch全文检索,高亮关键字
问题 用如下这样的term方式,可以高亮 .setQuery(QueryBuilders.termQuery("PARAM_NAME", "a")) { &qu ...
- JAVA 定时器的三种方法
/** * 普通thread * 这是最常见的,创建一个thread,然后让它在while循环里一直运行着, * 通过sleep方法来达到定时任务的效果.这样可以快速简单的实现,代码如下: * @au ...
- sql设置字段默认值
alter table 表名 modify 字段名 default 默认值;
- 混合开发之DSBridge(同时支持Android和iOS)
什么是 Javascript bridge 随着h5的不断普及及优化,以及移动端对动态化的需求越来越大,开发者经常需要在app中嵌入一些网页,然后会在web和native之间进行交互,如传递数据,调用 ...