知识大全 PHP系列学习之AOP[1]

Posted

篇首语:吾生也有涯,而知也无涯。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 PHP系列学习之AOP[1]相关的知识,希望对你有一定的参考价值。

PHP系列学习之AOP[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  介绍

  你以前听说过AOP(Aspect Oriented Programming)吗?虽然在php方面 好像没有过多的使用 但是在企业级开发中 AOP被广泛使用 我将借此文 向大家介绍PHP方面的AOP

  这篇文章主要解释AOP的概念

  什么是AOP?

  在应用开发中 我们经常发现需要很多功能 这些功能需要经常被分散在代码中的多个点上 但是这些点事实上跟实际业务没有任何关联 比如 在执行一些特殊任务之前需要确保用户是在登陆状态中 我们把这些特殊人物就叫做 cross cutting concerns 让我们通过Wikipedia来了解一下 cross cutting concerns (横向关系)的定义

  在计算机科学中 cross cutting concerns 指的是 切面(或方向)编程 这些关系不能从其他系统(框架设计或者某些实现)中很好的分解出来 以至于出现代码重复 在系统中存在有意义的依赖关系 或者两者兼有之

  现在你对于 横向关系 应该有一个基础的认识 让我们看看他们在代码中是怎么样的?

  假设一种场景 你是一个博客站点的编辑 你需要登陆站点 然后进行创建帖子 验证帖子 编辑帖子等等 如果你没有登陆 那么你应该直接到登陆界面 为了确保这些行为是安全的 以上的任何操作都需要进行有效验证 代码如下

  <?php

  class BlogPost extends CI_Controller

  

  public function createPost()

  if (!Authentication::checkAuthentication())

  // redirect to login

  

  else

  // proceed

  Messages::notifyAdmin()

  

  

  public function approvePost()

  if (!Authentication::checkAuthentication())

  // redirect to login

  

  else

  // proceed

  

  

  public function editPost()

  if (!Authentication::checkAuthentication())

  // redirect to login

  

  else

  // proceed

  

  

  public function viewPost()

  // …

  

  

  看上面的代码 你会发现在每个方法之前都调用了checkAuthentication() 因为这些行为需要用户登陆之后才能进行 还有就是notifyAdmin()来辨别是否是管理员帐号 以便创建新贴 看见没有 有很多 重复的代码 而且BlogPost类 应该仅负责管理帖子 验证和辨别身份应当是分离的 我们违反了 单一职责原则

  单一职责原则讲述的是每个类应该只有单一的责任(任务) 而且应该把整个责任都封装在一个类中 所有服务应该按照职责严谨而均衡的进行分布

  迄今为止 我们能够明白AOP所表达的意思 横向切面关系被成组的放进一个类中 我们管这个类叫 切面 从我们核心代码中分离横向切面关系的过程就叫做Aspect Oriented Programming

  AOP专业术语

  有很多条件专门用于解释AOP的特性 理解这些条件将是你成功把AOP集成到你的项目中的钥匙

  Aspect;Advice;Joinpoint;Pointcut

  我们已经学习到切面(Aspect)是什么!现在让我们了解一下其他三个条件意味着什么?

  Advice(通知)

  Advice用于调用Aspect(切面) 正如其名所暗示 Advice用于定义某种情况下做什么和什么时间做这件事情 在我们之前的例子中 checkAuthentication(做什么)是advice(通知) 在指定方法中它应该在执行代码之前(什么时间)被调用

  Joinpoint(接入点)

  Joinpoint是我们创建Advice应用中的位置 再翻看之前的代码 你会发现我调用了几个与业务逻辑没有直接关联的功能 在createPost()中 如 cross cutting concerns应该在执行验证逻辑之前和发送信息给管理员之后发生 这些都可能是接入点

  在你的应用代码中 接入点可以放置在任何位置 但是Advice仅能在某些点中布置 这要根据你的AOP框架 过后我会讨论

  Pointcut(点切割)

  点切割定义了一种把通知匹配到某些接入点的方式 虽然在我们的例子中只有一对接入点 但是在你的应用中你可以放置上千个接入点 你也不需要把通知应用到所有的接入点上 你可以把一些你认为有必要的接入点绑定到通知上

  假设我们想要通知 createPost() approvePost() 和 editPost() 但是现在没有viewPost() 我们使用某种方法把这三种方法绑定到通知上 之后我们创建一个包含切面细节的XML文件 这些细节包含一些匹配接入点的正则表达式

  总结 当有横向切入关系存在于我们的应用的时候 我们可以创建一个切面 这个切面在一些选择使用点切割的接入点上应用通知功能

cha138/Article/program/PHP/201311/21640

相关参考

知识大全 PHP系列学习之日期函数[1]

PHP系列学习之日期函数[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  介绍  PHP是一

知识大全 PHP系列学习之日期函数[2]

PHP系列学习之日期函数[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  通过字符获取时间戳

知识大全 JavaScript学习之代码解释

JavaScript学习之代码解释  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishixinz

知识大全 Jakarta Struts学习之实战演示

JakartaStruts学习之实战演示  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Acti

知识大全 Spring MVC学习之注解介绍

SpringMVC学习之注解介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  spring的注

知识大全 Jakarta Struts学习之应用实践

JakartaStruts学习之应用实践  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文是三

知识大全 家长督促孩子学习之余如何沟通

家长督促孩子学习之余如何沟通尊敬的各位家长:大家好!今天,因为孩子,我们再次走到了一起,首先,对各位家长能在百忙之中抽出时间来参加这次家长会表示衷心的感谢!转眼间,我和您的孩子相处已有一个月了。在各位

知识大全 ASP.NET学习之结构和类

ASP.NET学习之结构和类  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一class是引用类

知识大全 ASP.NET学习之常用基础知识

ASP.NET学习之常用基础知识  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一公共变量和属性

知识大全 C#学习之——认识C#的内部类

C#学习之——认识C#的内部类  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  C#中的内部类能够