2017-03-16 108 views
0

我们正在开发使用Eclipse,春天,DDD和存储库模式 我们目前secenario由以下插件组成的应用Eclipse中,春,DDD和存储库模式

  1. 插件Domain.project:包含接口Repository.class。
  2. 插件Repository.project:包含接口Repository.class的不同实现,例如ExampleRepositoryImpl.class。所以这个插件的依赖关系上有Domain.project插件。

我们已经在Plug-in Domain.project中创建了Service.class,它是通过注入调用的,它是在Plug-in Repository.project上实现的Repository实现之一。但注射没有正确解决。

  1. 我们无法向Domain.project的Repository.project添加依赖项,因为这会导致冗余循环错误。
  2. 此外,由于我们遵循DDD方法,所以Domain.project可以看到其余部分,但相反。

太感谢你了, 亲切的问候,

Eclipse, Spring, DDD and the repository pattern

+0

首先,为什么单独的软件仓库?存储库接口与域类在同一个包中。其次,资源库实施项目需要依赖(即“参见”)域项目,而不是相反。为什么域项目想要查看RepositoryImpl类的实现细节? –

+0

非常感谢Markus。请注意下面的新条目 –

回答

0

正如你所说,库接口域上的项目。 我们已经为域项目中包含的每个接口实现创建了一个项目。 例如,我们为JBDCRepository的实现创建了一个项目,为PureQueryRepository创建了另一个项目,为JsonRepository创建了另一个项目,依此类推。 由于这个原因,存储库项目实现具有依赖项(“参见”)域项目,但域项目对存储库项目实现没有任何依赖关系。 所以,我们的问题发生时,我们想选择/通过春季注入任何这些存储库中,因为域项目没有看到任何资源库项目的实施,我们得到一个ClassNoFoundException

亲切的问候, BraisCidrás的。

0

该域名不应该关心它使用哪个实现 - 这就是为什么你首先将库接口与存储库实现分开的原因。

为了让您决定使用哪种实现,认为实行的选择如何动态是:

  • 在服务器启动时确定 - >使用例如Spring Profiles:使用名为“jdbc”的配置文件,另一个名为“json”的配置文件等,并在启动应用程序时激活所需的配置文件。这样,只有指定配置文件的存储库实现才会被实例化和注入。

  • 决定课堂级别 - >使用例如Spring Qualifiers 如果一个Spring bean需要存储库的“jdbc”实现,而另一个需要同一个存储库的“json”实现,则使用各自的限定符名称实例化每个实现,并通过指定其限定符来注入所需的存储库实现。