在干净的架构中,结构是这样的:
核心:
CoreClass.java
SomeDAOInterface.java
IO
SomeDAOInterfaceImpl.java(实现SomeDAOInterface)
如果我应该将Core和IO拆分为不同的.jar文件,不同的项目,那么我应该如何处理IO部分中的“ SomeDAOInterface”依赖性?它仅包含在Core部分中,因此如果没有编译器错误(找不到类SomeDAOInterface),我将无法真正实现它。
最佳答案
您所描述的远非寻常的设计,周围有许多示例。例如,Java EE声明了许多由各种容器实现的接口。或者,Jdbc还声明将由数据库引擎实现的接口。
根据绑定是在构建时还是在运行时进行,有2种可能的设计。
当绑定在构建时发生时(例如,在jdbc中很常见),则必须在构建时有一个可用的实现,例如,在项目中声明一个MySQL数据库驱动程序。在您的示例中,这意味着IO项目将取决于Core项目。
当绑定在运行时发生时(例如Java EE),您使用的虚拟项目仅包含接口类(在示例中为SomeDAOInterface
),而不包含用于编译的实现,并向构建器声明不要在最终版本中链接它jar,但它将在运行时提供。并且在运行时,您确实在类路径中提供了完整的实现,其中包含接口类(SomeDAOInterface
)和实现类(在您的示例中为SomeDAOInterfaceImpl
)。您只需要阅读构建系统文档即可知道如何声明。
或者,您可以在核心jar中链接虚拟项目,并声明将在实现一中提供。
关于java - 干净的体系结构:不同的.jar文件中的IO和Core分开,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49108382/