百度百科的解释: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执行前调用权限验证或者在执行结束后记录日志,则已经超出面向切面概念的理解。

最新文章

  1. 从Knockout到Angular的架构演变
  2. Zigzag convert
  3. 在Win8.1系统下如何安装运行SQL Server 2005 (以及安装SQL Server 2005 Express打补丁)
  4. GCD的基本使用
  5. Python输入和输出
  6. go 应用程序性能测试
  7. Android之ListView异步加载图片且仅显示可见子项中的图片
  8. rsync服务精讲 -- 视频
  9. Code Kata:大整数比较大小&大整数四则运算---加减法 javascript实现
  10. linux btrfs文件系统管理与应用
  11. 负载均衡(Load Balancing)学习笔记(一)
  12. 解决计算机改名无法连接TFS的问题
  13. oracle 父子关系
  14. 专访阿里资深研发工程师窦贤明:PG与商业数据库差距并不明显
  15. thinkjs——两表联查
  16. Android复习
  17. Intellij Idea快捷鍵
  18. Javascript 删除tr 元素
  19. python的socket的学习
  20. 「小程序JAVA实战」微信小程序工程结构了解(五)

热门文章

  1. 百度NLP二面
  2. memento模式
  3. Way to tmux
  4. php等守护进程监控脚本(转载 http://www.9958.pw/post/php_script_scan)
  5. CCF 权限查询(模拟)
  6. Druid学习之路 (一)Druid初识
  7. Django学习笔记之Models与ORM操作
  8. Linux学习笔记之Linux修改或增加ssh端口
  9. WCF使用安全证书验证消息加密
  10. vmware基于主机模式实现上网(win10)