关注点分离是将计算机程序分成不同部分,以便让每个部分处理一个单独的关注点的设计原则。
关注点分离的简单口语化描述是:一个类,一件事,一个方法,一件事。
这是关于代码和系统的清晰性和焦点的。它是帮助我们改进所创建系统的模块化、内聚力和抽象性的关键促成技术之一,帮助我们将耦合性降低到有效的最小程度。
关注点分离可以在所有的颗粒度上起作用,不管是在整个系统的规模上,还是在系统中单个函数的级别上,它都是一个有用的原则。
内聚力和模块化是代码的属性,是不相关的东西离得远,相关的东西离得近。关注点分离是模块化和内聚力的具体表现。
关注点分离可以帮助降低代码和系统的耦合度、提高内聚力和模块化。
关注点分离可以保持代码和系统架构整洁、集中、可组合、灵活、高效、可伸缩,对于变更是开放的。
关注点分离提醒我们把注意力保持在小范围内。你可以查看每个部分并理解每个部分的功能,无须过多思考。
实现关注点分离的一个有用的工具是依赖注入。依赖注入是将一段代码的依赖项作为参数提供给它,与其实现解耦合。依赖注入将耦合最小化到适当的、有用的程度,是在关注点之间形成分界线的有效方法。
关注点分离帮助分离本质复杂性和偶然复杂性。本质复杂性是问题固有的复杂性,偶然复杂性是我们解决问题带来的副作用。将偶然复杂性最小化符合我们的利益。
领域驱动设计帮助从问题领域的角度入手关注点分离。让我们在发现新的关注点时保持警惕,避免把关注点不适当地合并在一起。
增量式改进代码设计的同时密切注意关注点分离,可以通过提升可测试性得到加强。如果要保证代码易于测试,那么必须关注点分离。测试驱动开发是实现可测试性的强大工具,也能帮助实现关注点分离。
在关注点的接缝处,可以使用端口和适配器。
API是向公开该API的服务或库的使用者公开的所有信息。不同代码之间的任何通信都是API,都是为了支持某种类型的编程。
关注点分离帮助代码容易理解、容易测试、容易更改,也更灵活。关注点分离实现起来比模块化和内聚力更客观、更清晰。