百度百科的解释:AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。

一个比较绕的概念,简单来说就是把不影响业务流程的功能独立封装出来,不用在需要使用该功能的方法中显示调用该方法。

代码为例:

public void Edit(Book book)
{
//验证用户是否有权限的代码
//方法的主体逻辑
//记录操作日志的代码
}

在上面的方法中,只有主体逻辑才是这个方法的核心,权限和日志都不影响该逻辑的具体实现,如果把具体方法都写在这里则会显得臃肿,同时耦合度很高,如果出现多个地方拥有相同代码一旦变更则变得很麻烦,我们可以将权限和日志拆分成两个独立方法,封装到不同类里面去,从而使得方法内部耦合性降低,方法和类的功能单一。

public class Role
{
public static bool IsOk(User user)
{
//验证权限的具体代码
}
} ;
public class Log
{
public static void LogText(User user,Book book)
{
//记录日志的具体代码
}
} ; /*上文提到的方法*/ public void Edit(Book book)
{
if(Role.IsOk(Session["User"]))
{
// do something...
}else{
// do something...
} //方法的主体逻辑 Log.LogText(Session["User"],book);
}

以上是常规方法中用到的解耦方法,而有了AOP之后怎么做呢,拿过ASP.NET MVC的滤器举例

public class RoleFilterAttribute : ActionFilterAttribute
{
public override void OnActionExcuting(ActionExecutingContext filterContext)
{
//验证权限代码
}
};
public class LogFilterAttribute : ActionFilterAttribute
{
public override void OnActionExcuted(ActionExecutingContext filterContext)
{
//记录日志代码
}
};
/*原来的方法*/
[LogFilter]
[RoleFilter]
public void Edit(Book book){
//主体逻辑
}

有了切面之后,跟主体逻辑无关的变更只需要在过滤器中更改就可以了,原来的方法去除这些无关的功能后代码显得更清晰。

至于过滤器怎么实现在Eidt执行前调用权限验证或者在执行结束后记录日志,则已经超出面向切面概念的理解。

AOP(面向切面)的粗俗理解的更多相关文章

  1. 2018.8.15 AOP面向切面编程简单理解

    在Filter过滤器中 拦截器 表面上看 -拦截器帮我们封装了很多功能 拦截器优秀的设计,可拔插设计 aop思想 在struts2中 归纳总结

  2. 浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~

    简介 我们都知道,Spring 框架作为后端主流框架之一,最有特点的三部分就是IOC控制反转.依赖注入.以及AOP切面.当然AOP作为一个Spring 的重要组成模块,当然IOC是不依赖于Spring ...

  3. Javascript aop(面向切面编程)之around(环绕)

    Aop又叫面向切面编程,其中“通知”是切面的具体实现,分为before(前置通知).after(后置通知).around(环绕通知),用过spring的同学肯定对它非常熟悉,而在js中,AOP是一个被 ...

  4. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存

    代码已上传Github+Gitee,文末有地址 上回<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之九 || 依赖注入IoC学习 + ...

  5. 论AOP面向切面编程思想

    原创: eleven 原文:https://mp.weixin.qq.com/s/8klfhCkagOxlF1R0qfZsgg [前言] AOP(Aspect-Oriented Programming ...

  6. Spring:AOP面向切面编程

    AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果. AOP是软件开发思想阶段性的产物,我们比较熟悉面向过程O ...

  7. javascript AOP(面向切面编程)

    var func = function () { console.log("2") } Function.prototype.before = function (beforefn ...

  8. 特性attribute,声明和使用attribute,应用attribute,AOP面向切面,多种方式实现AOP

    1 特性attribute,和注释有什么区别2 声明和使用attribute3 应用attribute4 AOP面向切面5 多种方式实现AOP ---------------------------- ...

  9. java aop面向切面编程

    最近一直在学java的spring boot,一直没有弄明白aop面向切面编程是什么意思.看到一篇文章写得很清楚,终于弄明白了,原来跟python的装饰器一样的效果.http://www.cnblog ...

随机推荐

  1. Appium PageObject

    原文地址http://blog.csdn.net/TalorSwfit20111208/article/details/77434950 由于无法联系上您,在此分享您的文章,希望谅解! Appium ...

  2. Selenium-IDE,Selenium-RC ,Selenium grid以及 Selenium-Core

    Selenium-IDE,Selenium-RC ,Selenium grid 以及 Selenium-Core Selenium 是一种 Web 应用的自动测试工具,通过模拟用户对 Web 页面的各 ...

  3. Objective-C中的alloc和init问题

    从开始学的NSString *name=[[NSString alloc] init] 起,仅仅这句话是分配内存空间,一直在用,从来没考虑过它的内部是怎么实现的.今天无意中看到了这一句代码: NSSt ...

  4. WebUploader 上传插件结合bootstrap的模态框使用时选择上传文件按钮无效问题的解决方法

    由于种种原因(工作忙,要锻炼健身,要看书,要学习其他兴趣爱好,谈恋爱等),博客已经好久没有更新,为这个内心一直感觉很愧疚,今天开始决定继续更新博客,每周至少一篇,最多不限篇幅. 今天说一下,下午在工作 ...

  5. 网络爬虫Java实现抓取网页内容

    package 抓取网页; import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream; ...

  6. Teleport Ultra 垃圾代码 tppabs的清理<转>

    在使用整站下载软件Teleport Pro或Teleport Ultra下载的离线文件里会包含大量垃圾代码,下载后就需要清除整站下载文件中的冗余代码:tppabs等.这些代码本是Teleport自动添 ...

  7. linux上mysql访问:Access denied for user 'agtipay'@'iZm5ebiyb4f90ga9xiycgsZ' (using password: YES)

    公司的聚合支付测试环境出了一个问题(agtipay用户访问数据的时候出现如题错误),快搞死我两天时间(原谅技术不才),如题.首先明确一下问题: 1.访问拒绝,说明数据库连接这里有问题,数据库连接访问拒 ...

  8. Ubuntu16.04 Xmind安装

    Ubuntu16.04 Xmind安装: 官网下载:直接下载不用注册: 到下载目录选择下载文件右键,提取到此处(为登录用户权限):在终端采用root权限解压为root权限(unzip xmind-8- ...

  9. 关于Android RenderScript 的详细说明和一些实用文档

    http://www.cnblogs.com/TerryBlog/archive/2012/03/02/2377251.html RenderScript 是一种低级的高性能编程语言,用于3D渲染和处 ...

  10. 【WPF】修改ComboBox样式

    修改WPF默认的ComboBox控件样式 如下图所示: 修改代码如下: <UserControl.Resources> <Style TargetType="ToggleB ...