编程思想

面向目标不同:简单来说 OOP 是面向名词领域,AOP 面向动词领域。 思想结构不同:OOP 是纵向结构,AOP 是横向结构。 注重方面不同:OOP 注重业务逻辑单元的划分,AOP 偏重业务处理过程中的某个步骤或阶段。

OPP 面向对象编程

面向对象程序设计(Object Oriented Programming)作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。通过建立模型而达到的抽象是人们对客体认识的深化。

1 面向对象

面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式。它使用先前建立的范例,包括模块化,多态和封装几种技术。今天,许多流行的编程语言(如 Java,JavaScript,C#,C+ +,Python,PHP,Ruby 和 Objective-C)都支持面向对象编程(Object-oriented programming ,OOP)。

相对于「一个程序只是一些函数的集合,或简单的计算机指令列表。」的传统软件设计观念而言,面向对象编程可以看作是使用一系列对象相互协作的软件设计。 在 OOP 中,每个对象能够接收消息,处理数据和发送消息给其他对象。每个对象都可以被看作是一个拥有清晰角色或责任的独立小机器。

面向对象程序设计的目的是在编程中促进更好的灵活性和可维护性,在大型软件工程中广为流行。凭借其对模块化的重视,面向对象的代码开发更简单,更容易理解,相比非模块化编程方法, 它能更直接地分析, 编码和理解复杂的情况和过程。

1.1 面向对象基本特征

  • 封装:也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
  • 继承:通过继承创建的新类称为“子类”或“派生类”。继承的过程,就是从一般到特殊的过程。
  • 多态:对象的多功能,多方法,一个方法多种表现形式。

1.2 面向对象术语

  • Namespace 命名空间 允许开发人员在一个独特,应用相关的名字的名称下捆绑所有功能的容器。
  • Class 类 定义对象的特征。它是对象的属性和方法的模板定义。
  • Object 对象 类的一个实例。
  • Property 属性 对象的特征,比如颜色。
  • Method 方法 对象的能力,比如行走。
  • Constructor 构造函数 对象初始化的瞬间,被调用的方法。通常它的名字与包含它的类一致。
  • Inheritance 继承 一个类可以继承另一个类的特征。
  • Encapsulation 封装 一种把数据和相关的方法绑定在一起使用的方法。
  • Abstraction 抽象 结合复杂的继承,方法,属性的对象能够模拟现实的模型。
  • Polymorphism 多态 多意为「许多」,态意为「形态」。不同类可以定义相同的方法或属性。

AOP 面向切面编程

在软件业,AOPAspect Oriented Programming 的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOPOOP 的延续,是软件开发中的一个热点,也是 Spring 框架中的一个重要内容,是函数式编程的一种衍生范型。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

应用场景

  1. 参数校验和判空 系统之间在进行接口调用时,往往是有入参传递的,入参是接口业务逻辑实现的先决条件,有时入参的缺失或错误会导致业务逻辑的异常,大量的异常捕获无疑增加了接口实现的复杂度,也让代码显得雍肿冗长,因此提前对入参进行验证是有必要的,可以提前处理入参数据的异常,并封装好异常转化成结果对象返回给调用方,也让业务逻辑解耦变得独立。

  2. API接口权限控制 避免到处都是申请权限和处理权限的代码

  3. 无痕埋点

  4. 安全控制 比如全局的登录状态流程控制。

  5. 日志记录

  6. 事件防抖 防止 View 被连续点击触发多次事件

  7. 性能统计 检测方法耗时其实已经有一些现成的工具,比如 trace view。痛点是这些工具使用起来都比较麻烦,效率低下,而且无法针对某一个块代码或者某个指定的 sdk 进行查看方法耗时。可以采用 AOP 思想对每个方法做一个切点,在执行之后打印方法耗时。

  8. 事务处理 声明方法,为特定方法加上事务,指定情况下(比如抛出异常)回滚事务

  9. 异常处理 替代防御性的 try-Catch。

  10. 缓存 缓存某方法的返回值,下次执行该方法时,直接从缓存里获取。

  11. 软件破解 使用 Hook 修改软件的验证类的判断逻辑。

  12. 热修复 AOP 可以让我们在执行一个方法的前插入另一个方法,运用这个思路,我们可以把有 bug 的方法替换成我们下发的新方法。

实现

可以使用 JavaScript Decorators 来更优雅地实践AOP编程