kotlin - 六边形架构和 DDD

标签 kotlin domain-driven-design hexagonal-architecture

我有一个关于六边形架构和 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 ?
  }

}
 

最佳答案

DDD 是一种设计理念,只需要满足以下条件:

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

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

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

关于kotlin - 六边形架构和 DDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68002899/

相关文章:

android - ArCore 增强图像将水平放置在墙上

java - 如何在kotlin中获取匿名类中的父类

architecture - 六边形架构 : How to implement driver ports

c# - 如何在 ASP MVC 中实现工作单元、存储库和业务逻辑?

software-design - 在洋葱、六边形或简洁架构中,域模型是否可以包含与数据库中的域模型不同的属性?

domain-driven-design - 用例(应用程序服务)的接口(interface)?

kotlin - 如何从 Kotlin 中的 Int 创建枚举?

gradle - 使用Kotlin 1.2+版本,但仍会收到有关 `use`的编译器错误

c# - 您应该为每个限界上下文设置一个数据库来管理所有数据库还是单独的数据库?

domain-driven-design - 在 DDD/CQRS 中,ReadModel 是否应该充当 ViewModel,如果不是,那么映射的责任在哪里?