我理解在单个模块中工作时的依赖倒置,但是当我有跨模块依赖时我也想应用它。在下图中,我有一个现有的应用程序,我需要为参考数据服务实现一些新要求。我想我会创建一个新的 jar(将来可能是一个独立的服务)。第一个图显示了我过去处理此类事情的正常方式。referencedataservices jar 有一个接口,应用程序将使用该接口调用它。
第二个图显示了我尝试使用 DIP,应用程序现在拥有它的抽象,因此它不会因为参考数据服务发生变化而发生变化。这似乎是一个错误的设计,因为它创建了一个循环依赖。MyApp 依赖于referencedataservices jar,referencedataservices jar 依赖于MyApp。
所以第三个图通过创建一个额外的抽象层回到了更正常的依赖关系。我对吗?或者这真的不是 DIP 的目的吗?有兴趣了解其他方法或建议。