第8章 装饰器和mixin——横切方面
一个软件的设计通常会包括一些跨越了不同的类、函数和方法的方面。有关技术方面的例子,包括日志、设计和安全,这些方面必须有一致地实现。在面向对象编程中,重用功能的通用方法是继承一个类。但是,继承并不总是最合适的方案。在软件设计中,有一些方面和类层次结构是正交的。这些通常被称为“横切关注点”(cross-cutting concerns)。它们会跨越多个类,让设计变得更加复杂。
装饰器提供了一种不用和继承结构绑定的定义功能的方法。我们可以用装饰器设计应用程序中的某个方面,然后将装饰器应用于类、方法或者函数。
另外,我们可以谨慎地使用多重继承创建横切方面(Cross-outting Aspects)。会考虑用一个基类加上mixin类的方式来引入新功能。通常,我们会使用mixin类创建横切方面。
值得注意的是,横切关注点很少限定于当前的应用程序,它们通常是通用的设计。常见的日志、审计和安全的例子可以被认为是项目基础架构的一部分,与应用程序的细节是独立的。
Python内置了许多装饰器,我们可以扩展这些标准的装饰器。在一些不同的应用场景中,我们会介绍简单的函数装饰器、带参数的函数装饰器、类装饰器和方法装饰器。
