我正在六边形架构中创建服务,该服务消耗主题中的数据。在同一项目中,我想使用 kafka 流将几个主题合并为一个主题,然后使用适配器中的 kafka 流创建的该主题中的数据。我有一个问题,我应该将卡夫卡流代码放在我的六边形架构中的哪里?在我的域中,适配器似乎不是一个好地方。这只是稍后将在其中使用的主题数据转换。
六边形架构的目的是分离业务代码和框架代码。除此之外,框架代码可以访问业务代码,但业务代码不应该访问“直接”框架代码。
在下面的结构中,我模拟了六边形架构中的银行账户流程。客户端发送开户请求,请求到域进行银行开户流程,如果业务需要将账户详细信息保存到数据库,它使用端口(端口是接口或其他抽象结构)来访问基础设施。
-account
- infrastructure
- rest
- AccountRestController.java
- dto
- BankAccountOpeningRequest.java
- BankAccountOpeningResponse.java
- adapter
- AccountJpaDataAdapter.java
- jpa
- repository
- AccountJpaRepository.java
- entity
- AccountEntity.java
- domain
- port
- AccountDataPort.java
- handler
- AccountUseCaseHandler.java
- usecase
- BankAccountOpening.java
- model
- BankAccount.java
当然,开发者可以改变包结构、类结构或者其他东西,但有一点是绝对不能改变的业务代码和框架代码的分离。
对于你的问题,这取决于你的业务,但是Kafka代码不能放入域(业务)。你可以在框架端创建一个kafka消费者类,例如ABCKafkaConsumer.java,然后这个消费者类可以在你的kafka适配器中使用。