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

DDD架构的应用中,图像处理相关逻辑应当放在哪一层?

落地拆分方案

你现有代码混了三类不同职责的逻辑,拆解开分别对应DDD的不同层级即可,不需要硬套实体/值对象的概念:

1. 先拆分逻辑边界

你现在的代码里有三类完全独立的逻辑:

  • 核心业务规则:按指定宽度等比缩放、清除EXIF信息、固定JPEG质量75导出,这些是你业务中约定好的图片处理规范,和存储、上层调用方无关,属于通用业务逻辑
  • 持久化逻辑:将图片数据写入数据库、按ID和尺寸查询图片流,这部分和你用的SQL Server、EF Core强绑定,属于技术实现细节
  • 流程编排逻辑:加载原始图片→生成4种规格→组装数据→入库的完整执行流程,属于上层用例的执行逻辑

2. 对应分层放置

  • 图片处理核心规则放通用领域服务
    不需要做独立的Image实体,直接在领域层定义无状态的IImageProcessingDomainService通用领域服务,SaveImage这类纯图片处理逻辑都放到这个服务的实现里,不掺杂任何持久化、流程控制代码。所有需要调用图片处理能力的领域都可以复用这个服务,规则统一,修改时只需要调整一处。
  • 持久化逻辑放基础设施层
    在领域层定义IImageRepository仓储接口,基础设施层做对应的ImageRepository实现,你现有代码里的GetImageData、新增图片入库的逻辑都封装到这个仓储实现里,所有和数据库相关的操作都收拢到这一层,上层不需要感知存储介质的细节。
  • 流程编排逻辑放应用服务
    原来的Processor方法里的流程控制逻辑,放到应用层的ImageAppService里,只做协调工作:接收输入参数→调用领域服务生成4种规格的图片字节数组→调用仓储持久化数据,不实现任何业务规则。

额外优化建议

你现在GetImageData方法里直接拼接size参数到SQL有注入风险,建议先校验size参数是否是允许的几个枚举值,再拼接SQL,或者改成参数化的查询逻辑。如果后续有迁到对象存储的可能,还可以再抽一层存储抽象,进一步解耦业务逻辑和存储实现。


内容的提问来源于stack exchange,提问作者Varto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:24:05