横切关注点指的是一些具有横越多个模组的行为,使用传统的软体开发方法不能够达到有效的模组化的一类特殊关注点。
基本介绍
- 中文名:横切关注点
- 性质:特殊关注点
- 内容:横切关係
- 领域:计算机
简介
在‘面向切面’软体开发中,横切关係是程式中和其他模组有联繫的‘切面’。这些关係在程式模组化的设计和实现中无法被自然得分解到模组中,导致或代码过于分散,或代码冲突,或者两者都有。
举个例子来说,编写一个处理医生记录的app,这些记录的索引是核心模组,同时关于存储记录或用户信息的数据的历史日誌,或者登录的验证系统,由于和app中大部分模组都有关係所以成为了‘横切关係’。
背景
横切关係是那些和程式中大部分模组都有联繫的部分,它们形成了切面开发的基础单元。这样的横切关係部分不能自然得适配面向对象编程理念和面向过程变成理念。
程式内那些冲突或者内部依赖过度一般都和横切关係有直接联繫,由于过程性和功能性程式语言的结构完全是步骤化调用,也就没有语法可以同时进行功能实现和横切关係处理,这样一来,解决横切关係的代码就在程式中分散或者重複执行,最终导致了程式模组化的丧失。
AOP(面向切面编程)的目的是将这些横切关係封装进切面来保持程式的模组化,也就可以保持自然得模组独立性和处理横切关係代码的可复用性。通过这些对横切关係的设计处理,作为对于面向对象编程的一个补充,软体工程的模组化和维护简单化的优势仍然可以保持。
模组
软体模组(Module)是一套一致而互相有紧密关连的软体组织。它分别包含了程式和数据结构两部分。
现代软体开发往往利用模组作合成的单位。
模组的接口表达了由该模组提供的功能和调用它时所需的元素。
模组是可能分开地被编写的单位。这使他们可再用和允许广泛人员同时协作、编写及研究不同的模组。
面向切面的程式设计
面向切面的程式设计(aspect-oriented programming,AOP,又译作面向方面的程式设计、观点导向编程、剖面导向程式设计)是计算机科学中的一个术语,指一种程式设计范型。该范型以一种称为侧面(aspect,又译作方面)的语言构造为基础,侧面是一种新的模组化机制,用来描述分散在对象、类或函式中的横切关注点(crosscutting concern)。
切面的概念源于对面向对象的程式设计的改进,但并不只限于此,它还可以用来改进传统的函式。与切面相关的编程概念还包括元对象协定、主题(subject)、混入(mixin)和委託。
最广为人知的面向侧面的程式设计语言是由施乐帕洛阿尔托研究中心开发的AspectJ,该语言可以和Java程式语言结合在一起使用。
在.NET Framework的环境,则有通过MSIL动态注入来实现AOP的PostSharp库,但是到3.0版为为止,官方档案中只注明适用于C#与VB.NET,不适用于C++/CLI。