百度百科的解释: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. 查看Oracle相关日志 ADRCI

    ADRCI 进去以后 show  home  

  2. rf调参小结

    转自http://www.cnblogs.com/pinard/p/6160412.html 1. scikit-learn随机森林类库概述 在scikit-learn中,RF的分类类是RandomF ...

  3. testng日志 ITestListener

    上一节我们写一个日志类 extends   TestListenerAdapter ----------TestListenerAdapter 是 ITestListener 实现的一个类 这一节,我 ...

  4. 编辑器——vscode

    1.编辑器个人工作配置 // 将设置放入此文件中以覆盖默认设置 { "editor.tabSize": 2, "workbench.iconTheme": &q ...

  5. undefined reference to `__sync_bool_compare_and_swap_4

    然后开始glibc的编译工作. 你必须设定march这个参数才行,要不然会出现“undefined reference to `__sync_bool_compare_and_swap_4′.”这个错 ...

  6. PHP Web木马扫描器

    <?php  header('content-type:text/html;charset=gbk');  set_time_limit(0);//防止超时  /** * * php目录扫描监控 ...

  7. nginx + resin配合使用问题

    在A机器上用resin部署了一台接口服务器,用了一段时间后需要扩容. 从A上拷贝所有配置和数据至B服务器,修改了resin的IP配置. <server id="" addre ...

  8. 一键安装lnmp(1)

    #!/bin/bash#author:zhaocl#Software directory:$pathpath=`pwd`cd $path. $path/cacti.sh. $path/nginx.sh ...

  9. mybatis家族

    mybatis 优秀的持久层框架,它支持定制化SQL.存储过程以及高级映射. 备注:通过mapper实现数据库与实体类相互映射 MyBatis 避免了几乎所有的JDBC 代码和手动设置参数以及获取结果 ...

  10. SQL调优简介及调优方式

    引导语:我曾有一种感觉,不管何种调优方式,索引是最根本的方法,是一切优化手法的内功,所以一下我们 将讨论一些和索引相关的调优方式.索引是提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快得多 ...