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. FTP服务器(SOCKET)返回异常 500 Command not understood

    出现着这样的问题,一般是NLST中的参数包含特殊字符,如"\n",所以在发送SOCKET命令时,一定要检查命令参数的合法性.

  2. 我的Linux之路——实现虚拟机VMware上linux与windows互相复制与粘贴

    出自:http://blog.csdn.net/u012243115/article/details/40454063 解决方法:只需要在CentOS安装一个vmware-tools的工具. 1.打开 ...

  3. LVM 逻辑卷管理

    简介: LVM ( Logical Volume Manager ) 逻辑卷管理 一.创建 LV 1.首先在你的虚拟机上添加一块新的硬盘用来做实验. 2.安装 lvm : yum -y install ...

  4. Django restframework Token拥有不过期的认证

    REST框架中的Token认证不像Session认证一样,它是没有办法设置过期时间的,但是有时我们需要对Token做过期验证,比如说用户在A设备登陆之后获取一个Token,如果用户在没有清空浏览器缓存 ...

  5. Python实现阿里云短信推送

    本篇文章是使用Python的Web框架Django提供发送短信接口供前端调用,Python版本2.7 阿里云入驻.申请短信服务.创建应用和模板等步骤请参考:阿里云短信服务入门 1.下载sdk 阿里云短 ...

  6. Android Studio 无法正确引入包内存在的类

    Android Studio 无法识别同一个 package 里的类,显示为红色,但是 compile 没有问题. 重启,rebuild,clean都没有用. 多半是因为 Android Studio ...

  7. 解决svn Key usage violation in certificate has been detected

    ubuntu系统 #!/bin/shecho "This script will reconfigure subversion to work with certs correctly.&q ...

  8. Spring Data JPA + layui的前台分页插件layPage实现页面的分页

    一.后台代码: 1.1 controller层代码 @RequestMapping("/xxxxxx") public String showInformationCode(Str ...

  9. 653. Two Sum IV - Input is a BST 二叉树版本

    [抄题]: Given a Binary Search Tree and a target number, return true if there exist two elements in the ...

  10. T-sql GroupBy语句常见问题处理

    1.问题描述 现在有一张course表(含课程编号和名称)和一张sc表(含学生学号,选修课程的编号以及考试成绩),如下:现在想要查询所有课程编号.对应的课程名称以及选修该课程的所有学生的平均成绩.一开 ...