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的更多相关文章

  1. Spring源码学习(7)——AOP

    我们知道,使用面对对象编程的时候有一些弊端,当需要为多个不具有继承关系的对象引入同一个公共行为时,例如日志.安全检测等,所以就有了一个对面对对象编程的补充,即面对切面编程(AOP),AOP所关注的方向 ...

  2. 转载:AOP那点事

    原作者:黄勇 博客地址:https://my.oschina.net/huangyong/blog/161338 又是一个周末,刚给宝宝喂完牛奶,终于让她睡着了.所以现在我才能腾出手来,坐在电脑面前给 ...

  3. Spring 学习之AOP

    1. 走进面前切面编程 编程范式: 面向过程编程,c语言: 面向对象编程:c++,java,c#; 函数式编程: 事件驱动编程: 面向切面编程: AOP是一种编程范式,不是编程语言:解决特定问题,不能 ...

  4. 我的AOP那点事儿--1

    题记:一段时间以来一直想整理下关于AOP的知识,之前一直停留在会怎么使用AOP,关于AOP的深入点儿的知识就不知所以然了,正好项目上刚好用到需要用AOP实现的功能,所以找个时间统一整理下就很有必要了. ...

  5. 【SpringMVC学习02】走进SpringMVC的世界

    上一篇博文主要介绍了springmvc的整个架构执行流程,对springmvc有了宏观上的把握,这一篇博文主要以案例作为驱动,带你走进springmvc的世界.案例中的需求很简单:对商品列表的查询.表 ...

  6. 【转载】面向切面编程(AOP)学习

    看到这篇文章,学习一下:http://www.ciaoshen.com/2016/10/28/aop/ 想理清一下从“动态代理”,到 “注释”,到“面向切面编程”这么一个技术演进的脉络. 只想讲清楚两 ...

  7. Java AOP

    AOP 今天我要和大家分享的是 AOP(Aspect-Oriented Programming)这个东西,名字与 OOP 仅差一个字母,其实它是对 OOP 编程方式的一种补充,并非是取而代之.翻译过来 ...

  8. 详细解读 Spring AOP 面向切面编程(一)

    又是一个周末, 今天我要和大家分享的是 AOP(Aspect-Oriented Programming)这个东西,名字与 OOP 仅差一个字母,其实它是对 OOP 编程方式的一种补充,并非是取而代之. ...

  9. 走进JavaWeb技术世界3:JDBC的进化与连接池技术

    走进JavaWeb技术世界3:JDBC的进化与连接池技术 转载公众号[码农翻身] 网络访问 随着 Oracle, Sybase, SQL Server ,DB2,  Mysql 等人陆陆续续住进数据库 ...

随机推荐

  1. leetcode two pointer

    16. 3Sum Closest 这道题让我们求最接近给定值的三数之和,是在之前那道3Sum 三数之和的基础上又增加了些许难度,那么这道题让我们返回这个最接近于给定值的值,即我们要保证当前三数和跟给定 ...

  2. linux系统构架 - LB集群之LVS介绍

    LB 集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有 nginx.lvs.keepalived ,商业的硬件负载设备 F5.Netscale. LB ...

  3. Mybatis 针对ORACLE和MYSQL的批量插入与多参数批量删除

    今天利用Mybatis的<for each>标签做oracle的批量插入数据时,发现和MySQL数据库有区别.在此记录下,以防之后再踩坑. 一.批量插入: 1.controller: /* ...

  4. 搭建Git Server - Centos+Gitosis

    参考并部分转载自:http://www.pfeng.org/archives/757 1. 安装依赖 yum -y install curl-devel expat-devel gettext-dev ...

  5. spring的传播行为和隔离级别

    7个传播行为,4个隔离级别(转自 http://www.blogjava.net/freeman1984/archive/2010/04/28/319595.html) Spring事务的传播行为和隔 ...

  6. 遍历List集合时,删除数据的问题

    一.问题描述 有时候,我们会遇到在遍历List集合的过程中删除数据的情况. 看着自己写的代码,感觉完全没有问题,但就是达不到预期的效果,这是为什么呢?下面我们来分析下 String str1 = ne ...

  7. 32. Longest Valid Parentheses (Stack; DP)

    Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...

  8. ArcGIS js api三种查询功能

    转自https://blog.csdn.net/lovecarpenter/article/details/52669777

  9. K.O. ----- 配置文件没有提示

    ---------------siwuxie095 K.O. ----- 配置文件没有提示 1.解决方法一:联网 只要 PC 联网,配置文件中就有提示 2.解决方法二:手动导入约束文件 约束文件:hi ...

  10. 377. Combination Sum IV 返回符合目标和的组数

    [抄题]: Given an integer array with all positive numbers and no duplicates, find the number of possibl ...