1

我有一个关于六边形架构和 DDD 的问题

是否允许从作为参数传递给适配器的持久性适配器调用域逻辑?

例子:

class DomainService(private val repositoryPort: RepositoryPort,
                    private val domainService2: DomainService2) {
  fun doSomething(id: String?) {
    repositoryPort.doSomething(id) {
      id: String? ->
      domainService2.doSomething2(id)
    }
    println("Doing something")
  }
}

class DomainService2 {
  fun doSomething2(id: String?) {
    println("Doing something$id")
  }
}

interface RepositoryPort {
  fun doSomething(id: String?, consumer: (id: String?) -> Unit)
}

class RepositoryAdapter : RepositoryPort {
  override fun doSomething(id: String?, consumer: (id: String?) -> Unit) {
    println("checking something, searching in database")
    consumer.invoke(id) // Is it allow here to call domain again ?
  }

}
 
4

1 回答 1

0

DDD 是一个设计概念,只需要以下内容:

  • 业务代码必须使用对象建模
  • 那个模型,只有那个,进入一个“域”组件

DDD 对哪些类可以相互引用没有任何限制。在书中,DDD 示例使用传统的分层架构,但书中还指出 DDD 可以与任何其他软件架构一起使用。如果你想使用六边形架构也可以。

六边形架构将应用程序分为 3 个同心层:适配器、端口、业务。六边形架构还声明只允许向内引用。这意味着适配器可以引用端口业务,端口可以引用业务,而业务不能引用其他层。在这种情况下,从适配器引用和调用业务层是完全合法的。打破这种模式的是将端口或适配器的引用传递给业务模型。

于 2021-09-07T11:24:47.910 回答