分离系统的构建和使用

软件系统应该将启动过程(应用程序对象的构建和依赖项“连接”在一起)与启动后接管的运行时逻辑分开

与main分离

将构建与使用分离的一种方法是将所有构建方面的内容移至 main 或由 main 调用的模块,并将系统的其余部分设计为假定所有对象都已正确创建、构建和连接。

抽象工厂模式是这种方法的一个选择。

依赖注入

一个强大的分离构建与使用的机制是依赖注入(DI),它是对依赖管理的控制反转(IoC)的应用。控制反转将辅助责任从对象转移到专门为此目的的对象,从而支持单一职责原则。在依赖管理的背景下,对象不应负责自行实例化依赖项。相反,它应该将这一责任转移给另一个“权威性”机制,从而反转控制。由于设置是全局关注点,这种权威机制通常将是“main”例程或特殊用途的容器

依赖注入有两种主要的形式:

  1. 构造函数注入:依赖项通过对象的构造函数传入。
  2. setter 注入:依赖项通过对象的 setter 方法传入。

依赖注入使得对象不需要自己创建或查找它们的依赖项,而是由容器或调用者提供这些依赖项。这有几个好处:

  • 降低耦合度:对象不与它们的依赖项紧密耦合,因此更容易替换或修改依赖项。
  • 提高灵活性和可测试性:可以轻松地替换依赖项的实现以进行测试或根据需要使用不同的实现。
  • 遵循单一职责原则:对象专注于它们的主要职责,而不是依赖项的创建或管理。

使用依赖注入框架或容器可以使依赖注入更加容易和一致,例如 Spring Framework 或 Google Guice。

通过这种方式,系统的启动部分负责创建对象和注入依赖项,而系统的其余部分则简单地使用这些对象,不需要知道它们是如何创建或组装的。这有助于保持系统的清晰分离,并使得管理和理解代码变得更加容易。