领域接口未感知DTO时,应用层如何构建NotePreview?
解决方案:在DDD分层约束下构建NotePreview模型
核心约束回顾
- 领域层仓储接口仅返回纯
Note实体,完全不感知预览数据 - 应用层
NotePreview模型需要Note实体+previewTodos数据,但只有基础设施层能获取该组合数据 - 严格遵循依赖规则:领域层不依赖应用层/基础设施层
具体实现步骤
基础设施层扩展仓储实现,新增预览数据查询方法
领域层的note_repository抽象接口保持不变(仅处理核心Note业务),在infrastructure/repositories/implementations下的仓储实现类中,新增一个独立的方法(比如getNotePreviewsWithTodos()),直接从数据库查询包含3-5条previewTodos的组合数据,返回note_preview_dto集合。这个方法不属于核心领域仓储接口的范畴,是专门为视图预览需求设计的数据访问逻辑。应用层新增数据转换服务
在application/下新增一个NotePreviewAssembler类,职责是完成数据适配:- 从
note_preview_dto中提取Note字段,映射为领域层的Note实体 - 提取DTO中的
previewTodos字段,映射为领域层的Todo实体列表 - 将
Note实体和Todo列表组合成应用层的NotePreview模型
- 从
应用层业务逻辑调用流程
- 应用层的业务服务(如
HomeScreenService)直接调用基础设施层仓储实现的getNotePreviewsWithTodos()方法,获取note_preview_dto集合 - 调用
NotePreviewAssembler将DTO转换为NotePreview模型 - 将
NotePreview传递给presentation层的home_screen使用
- 应用层的业务服务(如
方案合规性说明
- 领域层完全隔离:核心仓储接口和实体不受预览需求影响,依然专注于业务规则,无任何外部依赖
- 应用层仅负责数据适配:通过转换服务处理DTO到视图模型的映射,不直接耦合数据库查询逻辑
- 基础设施层职责清晰:负责聚合查询预览数据,符合数据访问层的职责定位
内容的提问来源于stack exchange,提问作者mavini.s
相关产品推荐
相关产品推荐

