You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:42:09