关注点分离(Separation of concerns,SOC)是对只与“特定概念、目标”(关注点)相关联的软件组成部分进行“标识、封装和操纵”的能力,即标识、封装和操纵关注点的能力。是处理复杂性的一个原则。由于关注点混杂在一起会导致复杂性大大增加,所以能够把不同的关注点分离开来,分别处理就是处理复杂性的一个原则,一种方法。
案例
1、经典的三层架构,由展现层、业务逻辑层和持久层构成;其中体现了我们对用户界面、业务逻辑和数据持久的关注点分离
2、依赖注入体现了“做什么”和“怎么做”的关注点分离。学过C语言的程序员都知道,这种关注点的分离有着悠久的历史,它表现为.h文件和.c文件,一个规定函数原型,一个规定函数实现。这种关注点分离后来还在面向对象的设计中表现为“针对接口设计”,于是我们在依赖注入的架构方式中,看到了许多的接口,以及接口的不同实现。组件的使用者关注组件做什么,组件的实现者关注组件怎么做。其次,依赖注入体现了对实例生命周期(特别是实例创建)和组件装配的关注点分离。我们可以集中指定对象创建的方式,方便灵活地改变系统的装配方式。通过这样的关注点分离,依赖注入的架构让系统变得更灵活,让组件的实例化和组装方式集中在系统的一个局部来确定,而不是分散在系统各处。
3、
REST是一种Web应用架构风格,它的主要特点包括:
在REST架构风格中,体现了对资源命名、请求处理和资源物理表现形式的关注点分离。
4、AOP(面向方面编程)也是关注点分离思想的一种体现。记日志是说明AOP 思想的一个常用例子。当我们在业务代码中嵌入很多日志代码时,业务代码的可读性就下降了,因为业务逻辑和日志是两个不同的关注点。通过AOP技术来分离这两个关注点,就提高了代码的可读性和可维护性。