Aspect Oriented编程杂谈

至今Aspect Oriented Programming已经被开发人员所熟知,其简写AOP,译为面向方面编程(也有称面向切面编程)。其产生于90年代Xerox PARC实验室编程范式。被称为oop的延续,oop主要针对业务处理过程的领域问题抽象封装,形成领域对象,更 好的描述自然领域问题。而aop主要处理业务处理过程中处理逻辑步骤分离,减少业务逻辑的耦合性,是的我们的开发人员在开 发过程中只需关心领域的核心实际逻辑。在结构化编程(SP)中提出了SOC(分离关注点),并一直被称为是面对复杂软件最行之 有效的方法之一,并被努力应用于不同的软件实践,比如表现层模式MVC,MVP,PM,面向服务编程SOA,面呈抽象编程等;同样 AOP是SOC的应用,针对领域业务逻辑步骤流程的分离,是的我们能够只关心我们真真的领域核心业务。个人认为AOP是OOP的弥补 ,并非革新。

AOP的实现在鄙人随笔IOC/AOP随笔目录中提起过,主要分为静态植入和动态注入两种方式,主要区别在于 不同的代码时期,编译期和运行时。其实还有第3中实现方式一些常见框架带来的AOP,比如asp.net mvc中的ActionFilter, Handler,通常以模板方法固定流程处理,放出主要逻辑待实现。

AOP 主要包含两个重要部分构成:1匹配规则,在常见 AOP框架实现中,有按照方法,类,程序集,包的名称或者固定特征来精确匹配或模糊匹配,最常用简便的标注java的Annocaton ,.net的Attribute。2hack逻辑。对于AOP是针对方法边界的hack,一个方法对于我们来说有3个可见的边界,进入、结束,异常 。AOP就是在位于这3个边界中插入hack逻辑,实现公用普遍业务的分离。

AOP的应用场景:在缓存,日志,异常处理,复 杂权限、事务,性能计数等有共同普遍流程顺序是逻辑为其主要大显身手的场景。

下面将介绍在我所熟知的集中语言中 的AOP实现:

1:Python

在Python中实现AOP将是最简单的,以为在Python中装潢函数即是天然的AOP,

def aopLogic(f):

def warp():

print("befor....")

f();

print("after...")

return warp

@aopLogic

def myMethod():

print("my method pass!")

def myMethod1():

print ("my method pass!")

myMethod()

print("---------------------")

aopLogic(myMethod1) ()

print("---------------------")

input("finish..")

输出:

python装潢函数以@开头,后边紧跟任意函数。上面是一个无参aop demo,我们可以看出加装潢的myMethod = aopLogic (myMethod(无装潢))。如果针对有参的装潢函数则为,aopLogic(args..)(myMethod(无装潢)).

时间: 2024-11-01 09:24:12

Aspect Oriented编程杂谈的相关文章

Aspect Oriented Programming杂谈

      至今Aspect Oriented Programming已经被开发人员所熟知,其简写AOP,译为面向方面编程(也有称面向切面编程).其产生于90年代Xerox PARC实验室编程范式.被称为oop的延续,oop主要针对业务处理过程的领域问题抽象封装,形成领域对象,更好的描述自然领域问题.而aop主要处理业务处理过程中处理逻辑步骤分离,减少业务逻辑的耦合性,是的我们的开发人员在开发过程中只需关心领域的核心实际逻辑.在结构化编程(SP)中提出了SOC(分离关注点),并一直被称为是面对复

C++编程杂谈之四:漫谈UML

UML对很多人来说应该不是一个陌生的概念,这一两年来,UML被大家越来越多的讨论着.本来UML跟我这个主题似乎并不能扯上多大的关系(它是语言无关的,甚至可以说其本身就是一种语言--用于交流的).我在此谈到它有两个目的: 1.UML是针对面向对象软件开发的,而C++正是这样的一种语言 2.UML在设计中被越来越多的使用着,而下一篇杂谈准备讨论设计模式,如果不了解UML,那么无法进行下去 UML,全称:Unified Modeling Language,其目的是为了对软件密集型的制品进行可视化.详述

C++编程杂谈之二:面向对象

软件开发是一个极其复杂的过程,一段小的代码我们可以快速.准确的完成,但是当你面对的是一个庞大的软件系统的时候,你是否有不知所措的感觉呢? 在我们使用C的年代里面,编程思想是结构化的,你的C语言老师可能会不断的教导你怎样使用结构化的方法来完成一段程序,同时,你可能也知道在软件开发中的一个重要定律(Wirth定律): 程序 = 算法 + 数据结构 在结构化设计中人们通常是这样来看待这个定律的: 程序 =(算法) + (数据结构) 例如:(我仍然使用C++标准库来写下面的代码,方便和以后的代码对比)

C++编程杂谈之一:编译器

网上有很多各种编译器的优劣比较的东西,我写这些东西并不是想支持或否定某些东西,因为我始终认为在编程的领域中,我只是一个初学者,并没有资格来评判什么(况且我也不想去评判),我只是想讲述一下个人学习道路上的感受. 学编程的一个必备的条件是你要有一个实践的平台--一个相应的编译器,没有这个条件,一切都是空谈.选择编译器之前,首先选择的是语言(这个我想不必更多的解释了),这里我假设你选择了C或C++. 现在最流行的编译器恐怕应该是微软的VC了,在继续之前,我想再提一下一个重点:VC是一个编译器,只是一个

Java中的面向对象(object oriented)编程简介

程序包含两部分组成: 数据 和操作数据的函数; 面向过程的设计方法是自顶向下的功能分解, 把一个需求分解成多个子功能, 开发子功能并进行单元测试, 在组装成一个完整的应用程序; 问题: 1. 程序主要关注功能, 其次数据, 数据从一个函数流动至另一个函数; 2. 数据结构需要贯穿多个函数; 3. 修改数据结构, 会在程序中造成连锁反应; 4. 数据完整性错误, 可能发生在多个函数, 出现bug, 不容易查找; 面向对象的设计方法是 设计对象, 主要改进: 1. 主要关注数据结构, 其次才是功能;

C++编程杂谈之三:面向对象(续)

上一篇我们涉及了面向对象的一个基本概念--封装,封装是一个相对比较简单的概念,也很容易接受,但是很多的场合下面,仅仅是封装并不能很好的解决很多问题,考虑下面的例子: 假设我们需要设计一个对战游戏的战斗细节,在最初的版本中我们将支持一种动作--fight.假设我们有三种角色:fighter.knight和warrior,每种角色的health.hit point不同,基于封装的基本想法,我们很自然的想到对每个对象使用类的封装,首先明显的元素有2个:health.hit point,另外还有name

第 14 章 AOP(Aspect Oriented Programming)

  <?php interface Account{ public function hello($str); } class Demo implements Account{ public function __construct(){} public function hello($str = ""){ echo 'Hello: '.$str; } public function __destruct(){} } class Aop {     private $instan

AOP编程入门--Java篇

编程 Aspect Oriented Programming(AOP),面向切面编程,是一个比较热门的话题.AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果.比如我们最常见的就是日志记录了,举个例子,我们现在提供一个服务查询学生信息的,但是我们希望记录有谁进行了这个查询.如果按照传统的OOP的实现的话,那我们实现了一个查询学生信息的服务接口(StudentInfoService)和其实现类(Student

JavaScript AOP编程实例

       本文实例讲述了JavaScript AOP编程.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70