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

整洁架构中实体是否需包含游标?如何规避领域层请求响应模型

整洁架构下游标处理方案

实体不应持有游标属性

游标是分页查询的技术实现细节,和领域实体的核心业务属性完全无关。领域实体的职责是封装业务规则、表达核心业务概念(比如Game实体应该只包含游戏ID、名称、状态这些和业务直接相关的属性),把游标塞进实体里会污染领域模型,违背整洁架构中领域层独立于技术细节的原则。

避免领域层引入请求响应模型的游标传递方案

不用在领域层创建请求/响应实体,通过以下三层分离的方式处理:

1. 领域层定义分页契约

  • 定义分页查询参数对象:比如GamePaginationQuery,包含nextCursor、previousCursor、pageSize等分页控制字段。这个对象是领域层内部用来描述分页查询需求的契约,不是对外的API请求模型。
  • 定义通用分页结果容器:比如PaginatedResult<T>,结构示例如下:
    class PaginatedResult<T> {
        List<T> items;
        String nextCursor;
        String previousCursor;
    }
    
    这个容器用来承载分页查询的结果,属于领域层的通用组件,和外部API响应格式解耦。

2. 数据层实现分页查询

Repository接口(属于领域层定义)新增方法,接收GamePaginationQuery参数,返回PaginatedResult<Game>。数据层的实现(比如数据库查询)根据游标参数执行分页逻辑,生成对应的游标值(比如基于最后一条记录的ID、创建时间等),封装进PaginatedResult返回。

3. 应用层做格式转换

应用层作为领域层和适配器层的中间层,负责:

  • 接收适配器层(比如API网关)传来的请求参数(比如从Proto请求里提取cursor),转换为领域层的GamePaginationQuery。
  • 调用领域服务或Repository获取PaginatedResult<Game>。
  • 将PaginatedResult里的Game实体转换为Proto的Game消息,同时把nextCursor、previousCursor直接赋值给ListGamesResponse对应的字段。

这样一来,领域层完全不依赖外部的Proto请求/响应模型,只处理核心的业务逻辑和分页契约,符合整洁架构的分层原则。

内容的提问来源于stack exchange,提问作者anonymous-dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:01:13