这将是一个比较棘手的问题,但是我们可以试着解答一下。
我们正在使用 Delphi Spring Framework(http://code.google.com/p/delphi-spring-framework/)。
假设我有一个名为 UnitA 的单元,其中声明了 InterfaceA,并由 ClassA 实现。同样,我有一个名为 UnitB 的单元,其中声明了 InterfaceB,并由 ClassB 实现。它们都在各自的初始化部分中向 Spring 容器注册了其接口和类。
InterfaceA 依赖于 InterfaceB,但是因为我们使用了 Spring,UnitA 在其 uses 子句中没有 UnitB。换句话说,我们已经完成了工作——我们已经将 UnitA 和 UnitB 解耦,但我们仍然能够让 InterfaceA 依赖于 InterfaceB。
然而,在上述情况下,我们需要确保项目中同时包含 UnitA 和 UnitB,以便解决依赖关系。
现在,想象一下我们开始一个新项目。该项目使用 UnitA,但开发人员并没有意识到如果要使用 UnitA,则还必须将 UnitB 包含在项目中。不会有编译器错误,因为依赖关系在运行时而不是编译时解决。
因此,问题就在于:如何确保在应用程序部署之前知道对 UnitB 的依赖关系?
在复杂的应用程序中,我们可以预见到一种情况,即尽管经过了彻底的测试,但某个代码路径可能长时间没有被执行,因此在部署之前无法发现缺少的依赖项。
我们实现了一个系统,在每个接口解析调用的同时伴随着一个 Requires 调用,该调用在启动时检查并引发异常,以确保我们能看到错误。但我们想知道是否有一种“最佳实践”或标准方法来检测或处理这个问题。
补充:Java 和其他语言中是否存在这个问题?
我们正在使用 Delphi Spring Framework(http://code.google.com/p/delphi-spring-framework/)。
假设我有一个名为 UnitA 的单元,其中声明了 InterfaceA,并由 ClassA 实现。同样,我有一个名为 UnitB 的单元,其中声明了 InterfaceB,并由 ClassB 实现。它们都在各自的初始化部分中向 Spring 容器注册了其接口和类。
InterfaceA 依赖于 InterfaceB,但是因为我们使用了 Spring,UnitA 在其 uses 子句中没有 UnitB。换句话说,我们已经完成了工作——我们已经将 UnitA 和 UnitB 解耦,但我们仍然能够让 InterfaceA 依赖于 InterfaceB。
然而,在上述情况下,我们需要确保项目中同时包含 UnitA 和 UnitB,以便解决依赖关系。
现在,想象一下我们开始一个新项目。该项目使用 UnitA,但开发人员并没有意识到如果要使用 UnitA,则还必须将 UnitB 包含在项目中。不会有编译器错误,因为依赖关系在运行时而不是编译时解决。
因此,问题就在于:如何确保在应用程序部署之前知道对 UnitB 的依赖关系?
在复杂的应用程序中,我们可以预见到一种情况,即尽管经过了彻底的测试,但某个代码路径可能长时间没有被执行,因此在部署之前无法发现缺少的依赖项。
我们实现了一个系统,在每个接口解析调用的同时伴随着一个 Requires 调用,该调用在启动时检查并引发异常,以确保我们能看到错误。但我们想知道是否有一种“最佳实践”或标准方法来检测或处理这个问题。
补充:Java 和其他语言中是否存在这个问题?