关注点分离

维基百科,自由的百科全书
跳到导航 跳到搜索

关注点分离(Separation of concerns,SOC)是对只与“特定概念、目标”(关注点)相关联的软件组成部分进行“标识、封装和操纵”的能力,即标识、封装和操纵关注点的能力。是处理复杂性的一个原则。由于关注点混杂在一起会导致复杂性大大增加,所以能够把不同的关注点分离开来,分别处理就是处理复杂性的一个原则,一种方法。

关注点分离在计算机科学中,是将计算机程序分隔为不同部份的设计原则,是面向对象的程序设计的核心概念。每一部份会有各自的关注焦点。关注焦点是影响计算机程式代码的一组资讯。关注焦点可以像是将代码优化过的硬件细节一般,或者像实例化类别的名称一样具体。展现关注点分离设计的程序被称为模组化程序。模组化程度,也就是区分关注焦点,通过将资讯封装在具有明确界面的程序代码段落中。封装是一种资讯隐藏手段。资讯系统中的分层设计是关注点分离的另一个实施例(例如,表示层,业务逻辑层,数据访问层,维持齐一层)。分离关注点使得解决特定领域问题的代码从业务逻辑中独立出来,业务逻辑的代码中不再含有针对特定领域问题代码的调用(将针对特定领域问题代码抽象化成较少的程式码,例如将代码封装成function或是class),业务逻辑同特定领域问题的关系通过侧面来封装、维护,这样原本分散在整个应用程序中的变动就可以很好的管理起来。

关注点分离的价值在于简化计算机程序的开发和维护。当关注点分开时,各部份可以重复使用,以及独立开发和更新。具有特殊价值的是能够稍后改进或修改一段代码,而无需知道其他部分的细节必须对这些部分进行相应的更改。

实作[编辑]

物件导向设计,或编程语言提供的模组化提供开发人员选用的SOC机制。例如,C#,C++,Delphi和 Java等物件导向的编程语言可以将关注点分解为物件,像 MVC 或 MVP这样的架构设计模式,将内容从呈现和数据处理(模型)与内容分开。服务导向的设计可将关注点分解为服务。诸如 C 和 Pascal 之类的程序式编程语言可将关注点分成程序或功能。面向方面的编程语言可以将关注点分解为方面和对象。

在许多其他领域,例如城市规划、建筑,分离关注点也是一个重要的设计原则。目标是更有效地理解,设计和管理许多功能相互依存的复杂系统,以便功能可以重用,独立于其他功能进行优化,并且避免其他功能的潜在故障。常见的例子包括将一个空间分隔成多个房间,这样一个房间的活动不会影响其他房间的人;或是配电将炉子保持在一个电路,而灯光则保持在另一个电路上,这样炉子的超载就不会影响灯光。房间分隔的例子显示了封装,其中一个房间内的资讯(无论有多混乱)不会用于其他房间,除非通过界面(门是接口)。电路的例子表明,一个模组内部的活动是一个电力消费者附加的电路,不会影响不同模块中的活动,因此每个模组不会额外去关注另一个模块发生的情况。

起源[编辑]

例子[编辑]

互联网协议堆叠[编辑]

HTML,CSS,JavaScript[编辑]

主题导向的编程[编辑]

方面导向的编程[编辑]

软件构成自动化[编辑]

人工智能中的分析水准[编辑]

规范化系统[编辑]