Spring Boot项目六边形架构驱动端口方法返回值设计咨询
结论:应返回
BusinessDecision类型 从六边形架构的设计原则和关注点分离角度出发,ForRetreivingBusinessDecision.java中的getDecision方法应该返回领域对象BusinessDecision,原因如下:
契合六边形架构核心思想:驱动端口是领域层对外暴露的契约,必须基于领域模型定义。返回
BusinessDecision能保证领域层完全独立于外部适配层的细节(比如JSON序列化、HTTP响应格式等),让领域逻辑只专注于业务决策本身,不受外部交互方式的影响。规避返回
void的弊端:如果返回void,你需要通过输出参数、回调函数等方式传递结果,这会让接口契约变得模糊,代码复杂度上升,也不符合Java常规方法设计习惯,调用方需要额外处理结果传递逻辑,违背了端口的简洁性与明确性。避免返回
String的耦合问题:返回JSON字符串会把序列化逻辑硬编码到端口层,导致领域层依赖于外部响应格式。后续如果需要修改响应格式(比如换成XML、Protobuf),就不得不修改端口和领域层代码,彻底破坏领域层独立性,违背关注点分离原则。序列化/反序列化属于适配器层职责,应由REST适配器这类外部适配组件完成领域对象到外部格式的转换。
实际落地示例
你的REST适配器可以这样实现:
@RestController public class DecisionController implements ForRetreivingBusinessDecision { private final DecisionDomainService domainService; public DecisionController(DecisionDomainService domainService) { this.domainService = domainService; } @GetMapping("/decision") public ResponseEntity<BusinessDecision> getDecision(@RequestParam String param) { BusinessDecision decision = domainService.getDecision(param); return ResponseEntity.ok(decision); } }
Spring会自动通过Jackson把BusinessDecision序列化为JSON响应,领域层完全不需要关心这些外部细节。
内容的提问来源于stack exchange,提问作者aiwillconquerus
相关产品推荐
相关产品推荐

