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. git submodule一些操作

    checkout指定tag cd /path/to/yoursubmodule git checkout yourTag cd .. git add yoursubmodule git commit ...

  2. CentOS7修改ssh端口

    http://www.cnblogs.com/rwxwsblog/p/5756894.html 修改/etc/ssh/sshd_config vi /etc/ssh/sshd_config #Port ...

  3. Django models拆分

    大多数Django教程都是将models放在models.py文件(模块)中, 然而随着models类的增加, 将类放在一个文件中太混乱了, 于是将models做成一个package: 这样就可以将m ...

  4. 控件的WndProc WindowProc

    SubClassWndProc This example shows how to use the WndProc method and the WindowProc property to subc ...

  5. Shiro的校验Session是否过期处理的过程

    首先开启定时扫描活跃的session进行校验 <!-- shiro会话管理 --> <!-- 即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中:会话可以是普通 Jav ...

  6. dart 命名规范

    1.类型 首字母大写 譬如 abstract class Shape 2.变量 驼峰式命名,首字母小写 class Article { String headUrl; String user; Str ...

  7. Python 小练习三 发邮件

    import smtplib,os from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipar ...

  8. Mysql 5.6 源码编译安装

    简介: 多余的话不说,就是源码安装 Mysql 5.6 ,机器内存 512 MB ,系统 CentOS 6.6 ,安装方式 minimal ! 1.安装底层支持包 shell > yum -y ...

  9. linux: 空指令(:)

    :指令 描述: 空命令,除了参数替换和重定向外不执行任何操作,总是保证退出码为0. eg1:创建文件(不需要调用其它程序,速度更快) :>/path/to/file 测试: 创建10000个不存 ...

  10. jquery入门 动态调整div大小,使其宽度始终为浏览器宽度

    有时候我们需要设置宽度为整个浏览器宽度的div,当然我们可以使用相对布局的方式做到这一点,不过我们也可以用jquery来实现. <!doctype html> <html> & ...