MacWire特性扩展了Factory和Repository

时间:2018-11-26 07:49:04

标签: scala domain-driven-design lagom

使用 DDD 方法构建Lagom应用程序。我们使用 Create Insert 命令分离出FactoryService.scala特征,而RepositoryService.scala特征包括 Read Update 删除命令。现在,问题出现了,因为在实现事件源时,我们在EventProcessor.scala类中只能有一个.setPrepare()方法。因此,理想情况下,.setPrepare()方法应包含所有用于更新,删除和插入的命令,但正如我们在工厂和存储库中所分开的那样。这意味着我们有一个.setPrepare()用于FactoryService,一个.setPrepare()用于RepositoryService。现在,两个.setPrepare()不能仅一起使用最后一个触发器。

我们的解决方法是使用 DatabaseService 作为特征,该特征由RepositoryService和FactoryService扩展,如下所示:

trait DatabaseService {
      def createPreparedStatements: Future[Done]
}

trait RepositoryService extends DatabaseService {
      override def createPreparedStatements: Future[Done]
}

trait FactoryService extends DatabaseService {
      override def createPreparedStatements: Future[Done]
}

现在,

中的 createPreparedStatements 有两种不同的实现
  • RepositoryServiceImpl和

  • FactoryServiceImpl

DatabaseService RepositoryService FactoryService 由其他类(例如 Helper.scala )注入。

现在,在运行 sbt runAll 时出现错误:

  

找到多个类型的值   [com.impl.db.DatabaseService]:[列表(存储库,工厂,   数据库)]

     

惰性val助手:Helper = wire [Helper]

                     ^

0 个答案:

没有答案