谈到面向切面的编程,我们很容易关联到面向对象编程(OOP)。个人对这两种编程方式的解释为:两种编程思想只是站在编程的角度问题。

OOP注重的是对象,怎么对对象行为和方法的抽象。如何封装一个具有完整属性以及行为的对象。简单来讲,其实OOP是对一个名词的封装。

AOP注重的是行为,怎么对业务逻辑的行为进行划分。如何在逻辑复杂的系统中逻辑划分(领域划分,模块划分,读取划分等)。简单来讲,其实AOP是对一系列逻辑操作的分类。

代码示例:

  定义用户User:

public class User
{
public int Id{get;set;}
public int Age{get;set;}
public string Name{get;set;}
}

  对用户的操作我们可以抽象出一个获取用户信息的切面IGetUser

public interface IGetUser
{
User GetUserById(int Id);
IEnumerable<User> GetUsers();
}

  实现切面IGetUser的类DefaultGetUser

public class DefaultGetUser:IGetUser
{
public User GetUserById(int id)
{
return new User{Id=,Age=,Name="TestName"};
}
public IEnumerable<User> GetUsers()
{
List<User> users=new List<User>();
for(var i=;i<;i++)
{
result.Add(new User{Id=i,Age=i*,Name=String.Format("TestName{0}",i)});
}
return result;
}
}

  设置代理对象,代理方式可以是单个切面,也可以是一系列有某种关联的切面

public class GetUserProxy:IGetUser
{
private IGetUser _getUserService;
private ILog _log;
public GetUserProxy(IGetUserService getUserService,ILog log)
{
_getUserService=getUserService;
_log=log;
}
public User GetUserById(int id)
{
return _getUserService.GetUserById(id);
}
public User GetUsers()
{
var result= _getUserService.GetUsers();
//代理类逻辑填充
System.Threading.Tasks.Task.Factory.StartNew(()=>_log.Log("p批量读取用户信息"));
return result;
}
}

最后就是上层对代理类的调用了,因为代理类中注入了关联的切面接口。我们可以考虑使用IOC框架来实例化代理,当然也可以自己通过反射方式注入代理类构造参数来实例化代理类。

不同的IOC框架实现方式不一样,如果只是简单的测试可以考虑StructMap,Autofac等。

Spring.Net 对AOP 的诠释更为全面推荐了解Spring.Net;

编程思想—面向切面编程(AOP)的更多相关文章

  1. 轻松理解AOP思想(面向切面编程)

    本文旨在帮助还没有理解AOP的童鞋看透弄懂AOP,也欢迎高手批评指正. 先说一个Spring是什么吧,大家都是它是一个框架,但框架这个词对新手有点抽象,以致于越解释越模糊,不过它确实是个框架的,但那是 ...

  2. [转]轻松理解AOP思想(面向切面编程)

    原文链接 Spring是什么 先说一个Spring是什么吧,大家都是它是一个框架,但框架这个词对新手有点抽象,以致于越解释越模糊,不过它确实是个框架的,但那是从功能的角度来定义的,从本质意义上来讲,S ...

  3. 杂项-编程:AOP(面向切面编程)

    ylbtech-杂项-编程:AOP(面向切面编程) 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一 ...

  4. 【转】 AOP(面向切面编程)、Filter(过虑器)、Interceptor(拦截器)

    AOP(面向切面编程) 面向切面编程(AOP是Aspect Oriented Program的首字母缩写) ,我们知道,面向对象的特点是继承.多态和封装.而封装就要求将功能分散到不同的对象中去,这在软 ...

  5. 03-spring框架—— AOP 面向切面编程

    3.1 动态代理 动态代理是指,程序在整个运行过程中根本就不存在目标类的代理类,目标对象的代理对象只是由代理生成工具(不是真实定义的类)在程序运行时由 JVM 根据反射等机制动态生成的.代理对象与目标 ...

  6. 面向切面编程--AOP(转)

    add by zhj:面向切面编程就是在不修改函数A的前提下,在函数A前后插入业务逻辑B, C, D...这其实算是功能分解,将大模块S=A+B+C+D+……分解为独立的小功能A,B,C,D……,模块 ...

  7. 什么是面向切面编程AOP--知识点汇总

           最近在学这方面的内容,读到的这段话我感觉说的很清楚了:这种在运行时,动态地将代码切入到类的指定方法.指定位置上的编程思想就是面向切面的编程. 面向切面编程(AOP是Aspect Orie ...

  8. java面试题之 -----面向切面编程

    这种在运行时,动态地将代码切入到类的指定方法.指定位置上的编程思想就是面向切面的编程. 面向切面编程(AOP是Aspect Oriented Program的首字母缩写) ,我们知道,面向对象的特点是 ...

  9. 如何通俗的理解spring的控制反转、依赖注入、面向切面编程等等

    之前一直不理解spring的一些基础特性是什么意思,虽然网上的解释也很多,但是由于我比较笨,就是看不懂,知道最近才稍微了解,下面就以通俗讲解的方式记录下来. 前言 假设我是一个没有开店经验的小老板,准 ...

随机推荐

  1. 使用CLRMD时通过Symbol Server找Dac的位置来初始化ClrRuntime

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:使用CLRMD时通过Symbol Server找Dac的位置来初始化ClrRuntime.

  2. 【C++自我精讲】基础系列二 const

    [C++自我精讲]基础系列二 const 0 前言 分三部分:const用法.const和#define比较.const作用. 1 const用法 const常量:const可以用来定义常量,不可改变 ...

  3. 服务器后端开发系列——《实战FastDFS分布式文件系统》[转]

    1.FastDFS的配置.部署与API使用解读(1)Get Started with FastDFS 内容:讲解FastDFS的背景.基本原理,并讲述基本的配置.部署和测试的内容. 2.FastDFS ...

  4. [D3] 11. Basic D3 chart interactivity on(), select(this), classed(class, trueorfalse)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. fork和exec函数

    #include<unistd.h> pid_t fork(void); 返回:在子进程中为0,在父进程中为子进程IO,若出错则为- fork最困难之处在于调用它一次,它却返回两次.它在调 ...

  6. .net缓存应用与分析

    在 ASP.NET 提供的许多特性中,相比 ASP.NET 的所有其他特性,缓存对应用程序的性能具有最大的潜在影响,利用缓存和其他机制,ASP.NET 开发人员可以接受使用开销很大的控件(例如,Dat ...

  7. xshell连接本地Linux虚拟机!

    终端输入ifconfig获取本地虚拟机的IP地址; 安装openssh-server sudo apt-get install openssh-server 查看server是否启动: ps -ef ...

  8. Linux下安装GAMS建模优化工具

    1.下载GAMS wget http://d37drm4t2jghv5.cloudfront.net/distributions/24.5.6/linux/linux_x64_64_sfx.exe 2 ...

  9. FolderBrowserDialog使用

    private void button_browse_Click(object sender, EventArgs e) { FolderBrowserDialog fbd = new FolderB ...

  10. MDA系统分析实战--图书馆管理系统

    MDA系统分析实战--图书馆管理系统 本文通过MDA系统分析方法,对图书馆管理系统进行分析,简要叙述系统分析的一般过程.首先,简要介绍什么是MDA:MDA(Model-Driven Architect ...