【问题标题】:Eclipse, Spring, DDD and the repository patternEclipse、Spring、DDD 和存储库模式
【发布时间】:2017-08-07 17:52:14
【问题描述】:

我们正在使用 eclipse、spring、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

【问题讨论】:

  • 首先,为什么要为存储库单独打包?存储库接口与同一个包中的域类一起存在。其次,存储库实现项目需要依赖(即“看到”)域项目,而不是相反。为什么域项目想要查看 RepositoryImpl 类的实现细节?
  • 非常感谢马库斯。请注意下面的新条目

标签: spring eclipse domain-driven-design repository-pattern


【解决方案1】:

正如您所说,存储库接口位于域项目上。 我们为域项目中包含的接口的每个实现创建一个项目。 例如,我们为 JBDCRepository 创建了一个项目,为 PureQueryRepository 创建了另一个项目,为 JsonRepository 创建了另一个项目,等等。 出于这个原因,存储库项目实现对域项目具有依赖关系(“see”),但域项目对存储库项目实现没有任何依赖关系。 因此,当我们想通过 Spring 选择/注入这些存储库中的任何一个时,就会出现问题,因为域项目没有看到任何存储库项目实现,我们会收到 ClassNoFoundException

亲切的问候, Brais Cidras。

【讨论】:

    【解决方案2】:

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

    为了让您决定使用哪个实现,请考虑实现的选择有多动态:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多