在干净的架构中,结构是这样的:
CORE:
CoreClass.java
SomeDAOInterface.java
IO
如果我应该在不同的.jar文件,不同的项目中拆分Core和IO,我应该如何处理" SomeDAOInterface" IO部分的依赖性?它只包含在Core部分中,所以如果没有编译器错误我就无法真正实现它(没有找到类SomeDAOInterface)。
答案 0 :(得分:0)
如果您谈论Bob叔叔的Clean Architecture,那么我想知道CORE项目是什么?
如果你引用“实体圈子”然后定义了界面,那么就好了,这实际上是你核心业务规则的一部分。 然后,您将从ur IO项目(在框架或接口适配器层中)创建依赖于CORE项目的依赖项,该项目根据依赖性规则是正确的。
有关Clean Architecture中项目结构的更详细讨论,请参阅我的帖子:https://plainionist.github.io/Implementing-Clean-Architecture-Scream/
答案 1 :(得分:0)
你所描述的远非一个不寻常的设计,周围有很多例子。例如,Java EE声明了许多接口,这些接口将由各种容器实现。或者Jdbc也声明将由数据库引擎实现的接口。
根据绑定是在构建时还是在运行时发生,有两种可能的设计。
在构建时发生绑定(例如,对于jdbc通用),您必须在构建时具有可用的实现,例如,在项目中声明MySQL数据库驱动程序。在您的示例中,这意味着IO项目将取决于Core项目。
在运行时进行绑定时(例如Java EE),使用仅包含接口类(示例中为SomeDAOInterface
)的虚拟项目,而不是编译实现并声明构建器不要在最终jar中链接它,但是它将在运行时提供。在运行时,您确实在类路径中提供了一个完整的实现,包含接口类(SomeDAOInterface
)和实现(在您的示例中为SomeDAOInterfaceImpl
)。您只需阅读构建系统文档即可了解如何声明。
或者,您可以链接核心jar中的虚拟项目,并声明它将在实现中提供。