面向目标不同:简单来说 OOP 是面向名词领域,AOP 面向动词领域。 思想结构不同:OOP 是纵向结构,AOP 是横向结构。 注重方面不同:OOP 注重业务逻辑单元的划分,AOP 偏重业务处理过程中的某个步骤或阶段。
面向对象程序设计(Object Oriented Programming
)作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。通过建立模型而达到的抽象是人们对客体认识的深化。
面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式。它使用先前建立的范例,包括模块化,多态和封装几种技术。今天,许多流行的编程语言(如 Java,JavaScript,C#,C+ +,Python,PHP,Ruby 和 Objective-C)都支持面向对象编程(Object-oriented programming ,OOP)。
相对于「一个程序只是一些函数的集合,或简单的计算机指令列表。」的传统软件设计观念而言,面向对象编程可以看作是使用一系列对象相互协作的软件设计。 在 OOP 中,每个对象能够接收消息,处理数据和发送消息给其他对象。每个对象都可以被看作是一个拥有清晰角色或责任的独立小机器。
面向对象程序设计的目的是在编程中促进更好的灵活性和可维护性,在大型软件工程中广为流行。凭借其对模块化的重视,面向对象的代码开发更简单,更容易理解,相比非模块化编程方法, 它能更直接地分析, 编码和理解复杂的情况和过程。
在软件业,AOP
为 Aspect Oriented Programming
的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP
是 OOP
的延续,是软件开发中的一个热点,也是 Spring
框架中的一个重要内容,是函数式编程的一种衍生范型。利用 AOP
可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
参数校验和判空 系统之间在进行接口调用时,往往是有入参传递的,入参是接口业务逻辑实现的先决条件,有时入参的缺失或错误会导致业务逻辑的异常,大量的异常捕获无疑增加了接口实现的复杂度,也让代码显得雍肿冗长,因此提前对入参进行验证是有必要的,可以提前处理入参数据的异常,并封装好异常转化成结果对象返回给调用方,也让业务逻辑解耦变得独立。
API接口权限控制 避免到处都是申请权限和处理权限的代码
无痕埋点
安全控制 比如全局的登录状态流程控制。
日志记录
事件防抖 防止 View 被连续点击触发多次事件
性能统计 检测方法耗时其实已经有一些现成的工具,比如 trace view。痛点是这些工具使用起来都比较麻烦,效率低下,而且无法针对某一个块代码或者某个指定的 sdk 进行查看方法耗时。可以采用 AOP 思想对每个方法做一个切点,在执行之后打印方法耗时。
事务处理 声明方法,为特定方法加上事务,指定情况下(比如抛出异常)回滚事务
异常处理 替代防御性的 try-Catch。
缓存 缓存某方法的返回值,下次执行该方法时,直接从缓存里获取。
软件破解 使用 Hook 修改软件的验证类的判断逻辑。
热修复 AOP 可以让我们在执行一个方法的前插入另一个方法,运用这个思路,我们可以把有 bug 的方法替换成我们下发的新方法。
可以使用 JavaScript Decorators 来更优雅地实践AOP编程