本节内容主要讲解AOP编程理念,包括概念讲解,使用AOP的优势,如何实现AOP,常见的实现AOP的方法。

1、AOP的概念

  AOP是Aspect Oriented Programming的缩写,意思是“面向切面编程”。何为“面向切面编程”,顾名思义,针对程序中某个“切面”进行设计扩展和开发;那么,何为“切面”呢?

  “切面”是逻辑上的意义,在实际开发过程中,并没有切面这个说法,只是从逻辑上看,可以把程序切分开,针对这个切开的这个面自然就是“切面”了。从实际开发来看,比如在ASP.NET MVC中,众所周知,每一个页面都是一个方法(Action)的执行结果,Action会返回html,发送到前端浏览器上,浏览器在进行解析,才能变成用户能看到页面。那么,如果需要在每个Action执行之前,对当前登录的用户进行权限验证,检查这个人是否有权限访问这个页面,这在实际开发过程中是很常见的场景和需求。按照一般的思维,需要在每个Action方法的前面部分执行权限检查逻辑,如果有权限就继续执行,没权限则返回用户无权限的页面。显而易见,这必然违背了软件开发的DRY原则。我们要做的只不过是在每个Action执行前进行权限验证逻辑。以上功能如果用AOP思想来进行实现,可以从逻辑上(先不管是否可以实现)把所有的Action方法的执行前切分为一个切面,我们要做的就是在这个切面上,添加权限验证的逻辑。

  注意:以上功能在ASP.NET MVC中可以通过Authorization Filter来实现,如果以上代入过程有不解的地方,可以把该场景换成其他的场景,比如在ASP.NET中进行权限验证。

  

2、使用AOP的优势

  可以发现,如果使用AOP理念进行开发,将很大程度上减少我们的代码量,这只是AOP带来的最基本的好处。不难发现,如果在每个Action中都进行权限验证的话,不同的coder的实现方式不尽相同,代码风格不尽相同,命名规范不尽相同......,当然这些是可以通过规范来进行改善的,但是如果能在统一的地方进行该操作,是不是会更好呢。其次AOP能很大程度上提高软件架构的稳定性(稳定性:添加额外的功能时,不需要对原有代码进行大量调整)。

AOP编程-理论篇的更多相关文章

  1. Python并发编程理论篇

    Python并发编程理论篇 前言 其实关于Python的并发编程是比较难写的一章,因为涉及到的知识很复杂并且理论偏多,所以在这里我尽量的用一些非常简明的语言来尽可能的将它描述清楚,在学习之前首先要记住 ...

  2. 彻底征服 Spring AOP 之 理论篇

    基本知识 其实, 接触了这么久的 AOP, 我感觉, AOP 给人难以理解的一个关键点是它的概念比较多, 而且坑爹的是, 这些概念经过了中文翻译后, 变得面目全非, 相同的一个术语, 在不同的翻译下, ...

  3. 如何编写高质量的 JS 函数(3) --函数式编程[理论篇]

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/EWSqZuujHIRyx8Eb2SSidQ作者:杨昆 [编写高质量函数系列]中, <如何 ...

  4. [转]彻底征服 Spring AOP 之 理论篇

    基本知识 其实, 接触了这么久的 AOP, 我感觉, AOP 给人难以理解的一个关键点是它的概念比较多, 而且坑爹的是, 这些概念经过了中文翻译后, 变得面目全非, 相同的一个术语, 在不同的翻译下, ...

  5. 如何编写高质量的 JS 函数(4) --函数式编程[实战篇]

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/ZoXYbjuezOWgNyJKmSQmTw作者:杨昆 [编写高质量函数系列],往期精彩内容: ...

  6. 【PHPsocket编程专题(理论篇)】初步理解TCP/IP、Http、Socket.md

    前言 我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API).那TCP/IP又是什么呢?TCP/IP是ISO/OS ...

  7. Spring第五篇【cglib、手动实现AOP编程】

    前言 到目前为止,已经简单学习了Spring的Core模块.也会怎么与Struts2框架进行整合了-.于是我们就开启了Spring的AOP模块了-在讲解AOP模块之前,首先我们来讲解一下cglib代理 ...

  8. 【原】iOS动态性(三) Method Swizzling以及AOP编程:在运行时进行代码注入

    概述 今天我们主要讨论iOS runtime中的一种黑色技术,称为Method Swizzling.字面上理解Method Swizzling可能比较晦涩难懂,毕竟不是中文,不过你可以理解为“移花接木 ...

  9. 聊Javascript中的AOP编程

    Duck punch 我们先不谈AOP编程,先从duck punch编程谈起. 如果你去wikipedia中查找duck punch,你查阅到的应该是monkey patch这个词条.根据解释,Mon ...

随机推荐

  1. 【DOS】文件统计命令

    1. 统计当前文件夹下文件的个数 ls -l|grep "^-"|wc -l 2. 统计当前文件夹下目录的个数 ls -l|grep "^d"|wc -l 3. ...

  2. phpstudy添加redis扩展

    操作系统   windows: 直接贴步骤记录下 一.      划重点,运行phpinfo(), 观察第四行 x86  好了记住这个 x86 三.    http://pecl.php.net/pa ...

  3. 第九单元 利用vi编辑器创建和编辑正文文件

    vi编辑器简介  什么是vi vi编辑器的操作模式 vi编辑器的3种基本模式 在vi编辑器中光标的移动 移动光标位置的键与光标移动间的关系 进入插入模式 从命令行模式进入插入模式的命令 在命令行模式下 ...

  4. Mycat配置文件详解及全局序列号

    来详细的看看 mycat的配置文件,更多信息请查看:mycat权威指南. schema.xml: Schema.xml 作为 MyCat 中重要的配置文件之一,管理着 MyCat 的逻辑库.表.分片规 ...

  5. Git使用三:git的使用流程

    先创建仓库 创建一个文件夹,作为仓库使用 初始化仓库,在仓库目录的命令行下输入:git init 第一步:创建一个文件,并写入内容,这里写入内容的时候,要把编码设置为utf-8 第二步:输入命令将文件 ...

  6. SVN项目迁移到Git上(并带有完整的提交记录)

    公司需求:早期的一些项目使用的是SVN,现在想要更换为Git,需要代码迁移并且能在Git上看到之前在SVN中的项目的提交记录,公司没有使用gitlab,代码都push在公司的服务器上,用的是Torto ...

  7. Springboot+MyBatis+JPA集成

      1.前言 Springboot最近可谓是非常的火,本人也在项目中尝到了甜头.之前一直使用Springboot+JPA,用了一段时间发现JPA不是太灵活,也有可能是我不精通JPA,总之为了多学学Sp ...

  8. API接口加密方式说明

    标签: 接口 2016年10月11日 19:41:20 13299人阅读 评论(0) 收藏 举报  分类: API(5)  版权声明:本文为博主原创文章,未经博主允许不得转载. http://blog ...

  9. MySQL慢查询 - 开启慢查询

    一.简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. 二.参数说明 slow_query_log 慢查询开启状态 slow_ ...

  10. NPOI操作Excel(三)--解析Excel

    通过前面两篇的基础学习,我们对NPOI有了一定了了解,下面就开始进入实战,解析下面格式的Excel(下面只是列举了几个例子),并保存入库 首先我们先分析一下,要解析这样的Excel,需要把指标[橘色背 ...