使用 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]
^