zoukankan      html  css  js  c++  java
  • AOP(面向切面编程概念,本文为翻译)

    AOP是什么

    AOP为Aspect Oriented Programming的缩写。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

    详情请自行百度或者Google: AOP In  .Net 的应用

    AOP的应用场景

    AOP的最大优势是,你只需要担心方面在一个地方,编程一次和应用所需的所有地方。AOP有很多用途,例如:

    • 日志(Logging):在应用程序中实现日志记录
    • Authentication(身份校验):使用身份验证之前的操作(如允许一些操作只有通过身份验证的用户)。
    • 数据校验(Validation or Notificatio):实施验证或通知属性setter(调用propertychange事件当属性已经改变了类,实现INotifyPropertyChanged接口)。
    • 行为改变(Changing the behavior):改变一些方法的行为。

    如您所见,AOP有许多用途,但是你必须小心使用它。它将保留一些代码在你的视线范围之内,但它鈥檚仍然存在,在每次调用运行方面存在的地方。它可以有缺陷和严重影响应用程序的性能。一个微妙的错误可能花费你很多方面的调试时间。如果你的方面是鈥檛使用在许多地方,有时候鈥檚最好直接将它添加到代码。

    AOP实现使用一些常见的技巧:

    • 添加预处理程序源代码中使用,如在c++中。
    • 使用后处理器添加指令编译后的二进制代码。
    • 使用一种特殊的编译器编译时添加代码。
    • 使用一个代码在运行时拦截器,拦截执行并添加所需的代码。

    在.Net框架,其中最常用的技术是后处理和代码拦截。前者所使用的技术是PostSharp(postsharp.net),后者使用依赖注入(DI)容器,如Castle DynamicProxy(bit . ly / JzE631)和Unity (unity.codeplex.com)。这些工具(指依赖注入容器)通常使用 装饰者设计模式 代理 执行代码拦截

    应用AOP的优点和缺点

    AOP的最大优势是,你只需要担心方面在一个地方,编程一次和应用所需的所有地方。AOP有很多用途,例如:

    • 在应用程序中实现日志记录。
    • 使用身份验证之前的操作(如允许一些操作只有通过身份验证的用户)。
    • 实施验证或通知属性setter(调用propertychange事件当属性已经改变了类,实现INotifyPropertyChanged接口)。
    • 改变一些方法的行为。

    如您所见,AOP很有用,但是你必须小心使用它。尽管AOP代码实现在不用的类里,,在每次调用运行时AOP都存在于相应的地方。它可能有缺陷,也有可能严重影响应用程序的性能。一个细小的切面Bug可能花费你太多的调试时间。如果你的AOP是至少使用在某一处的时候,最好直接将它添加到代码。

    AOP实现使用一些常见的技巧:

    • 添加预处理程序源代码中使用,如在c++中。
    • 使用后处理器添加指令编译后的二进制代码。
    • 使用一种特殊的编译器编译时添加代码。
    • 使用一个代码在运行时拦截器,拦截执行并添加所需的代码。

    在。净框架,其中最常用的技术是后处理和代码拦截。前者是PostSharp所使用的技术(postsharp.net),后者使用依赖注入(DI)容器,如城堡了DynamicProxy(bit . ly / JzE631)和统一(unity.codeplex.com)。这些工具通常使用一个叫装饰的设计模式或代理执行代码拦截。

    知识延伸=》装饰设计模式

    装饰设计模式解决了一个常见的问题:你有一个类和想要添加一些功能。你有几个选择:

    • 你可以直接向类添加新的功能。然而,这个类不止一个职责,同时也不符合“单一职责”原则。
    • 你可以创建一个新类,让这个功能去调用它旧类的对应方法。但是,这会带来一个新问题:如果你还想使用没有新功能的类,将会怎样?
    • 你可以创建一个新类,让新类继承旧类,添加新的功能,但这可能导致许多新类。例如,也就是说你有一个存储库类创建、读取、更新和删除(CRUD)数据库操作和您想要添加审计。然后,您想要添加数据验证来确保数据被正确更新。再之后,您可能还希望验证访问,以确保只有授权用户可以访问的类。这些都是大问题:你可以有一些类,实现三个方面,或者实现其中两方面,甚至只有其中一方面。最后你将会有多少类?
    • 你可以用外包装来来修饰这些类,创建一个具有切面功能的新类,然后调用旧类。这样,如果你需要一个方面,你包裹它一次。两个方面,你包装两次,等等等。比如说你订购一个玩具(正如我们是极客,Xbox或智能手机)。首先它需要一个具有足够大空间和保护功能的最外层的包装。然后,对于第2层包装,您可以订购一个磁带润,条纹、卡片和礼物纸的盒子。第3层包装,一个由具有防易碎功能的聚苯乙烯泡沫塑料球包裹它。现在他有三层外包装,每一个外包装有不同的功能,且每一外包装都彼此独立。你可以买一个没有礼品包装盒,甚至没有任何包装玩具(特别不折扣!)。你可以按照你的想法任意组合去包装你玩具,但是他们并不改变玩具所具有的功能

    AOP参考

    本文翻译自 :https://msdn.microsoft.com/en-us/magazine/dn574804.aspx(面向切面编程)

  • 相关阅读:
    Count and Say leetcode
    Find Minimum in Rotated Sorted Array II leetcode
    Find Minimum in Rotated Sorted Array leetcode
    Search in Rotated Sorted Array II leetcode
    search in rotated sorted array leetcode
    Substring with Concatenation of All Words
    Subsets 子集系列问题 leetcode
    Sudoku Solver Backtracking
    Valid Sudoku leetcode
    《如何求解问题》-现代启发式方法
  • 原文地址:https://www.cnblogs.com/DripRoad/p/5596137.html
Copyright © 2011-2022 走看看