当前位置: 首页 > news >正文

关于架构设计的依赖关系

先说一下我项目的结构

[ controller -> endpoint ] -> [ service -> repo ]

Apis层 Core层

今天犯了个架构上的问题,我的“核心业务(Core)”层(比如处理数据库的 Repository)反过来依赖了我的的“展示(API)”层(比如 DTOs)。

就是在repo接受参数以及return的时候,用了api的params和response。

这就像是发动机(Core)依赖了汽车的“油漆颜色”(API)的定义。这是本末倒置的。

详细解释:依赖关系搞反了

在一个标准的“分层架构”中,依赖关系应该是单向的,并且总是指向核心

[ API 层 ] (例如: Controllers, DTOs) 它依赖 Core 层----->[ Core 层 ] (例如: Services, Repositories, Entities) 它依赖 Shared 层----->[ Shared 层 ] (例如: 工具类, 常量)

  • API 层 (展示层):负责接收 HTTP 请求、发送响应。DTOs (Data Transfer Objects) 通常在这里定义,用来规定API 接口的数据格式
  • Core 层 (核心业务层):负责所有的业务逻辑。Repository (仓库) 是这一层里专门负责与数据库交互的部分。

我遇到的问题是: 我的 Core 层(RepositoryimportAPI 层(DTOs)。这就建立了一个反向的依赖Core ---> API),打破了架构规则。


为什么这是个问题?(紧密耦合)

  1. 易碎性Core 应该是我系统中最稳定、最核心的部分。API 则是最常变动的部分(比如我为了前端方便,想改一个 DTO 字段的名字)。

    现在的后果:你一旦修改了 API 层的 DTO(比如改个字段名),你的 Core 层(Repository)代码就可能编译失败,你被迫也要去修改核心代码。
  2. 可重用性差Core 层的业务逻辑应该可以被重用。

    举个例子:如果你想增加一个**命令行工具(CLI)**来执行某些业务,它也应该调用 Core 层。但现在 Core 依赖了 API 层的 DTO,这个 DTO 是为 Web API 设计的,CLI 根本用不了。

如何修复(错误信息给的建议)

错误信息给了你两个解决方案:

方案 1:将 DTOs 移到 Core 层
  • These DTOs should be moved to the Core layer
  • 做法:把这些 DTOs 文件从 API 目录移动到Core 目录。
  • 含义:这表示你承认“这些 DTOs 并非只给 API 用,而是我核心业务就认可的数据结构”。这样 API 层和 Repository(都在 Core 层)就都可以合法地导入和使用它们。
方案 2:Repository 应使用 Core 层的类型
  • ...or the repository should use Core-layer types
  • 做法:这是一种更“纯净”的架构。
  1. API 层保留自己的 DTOs(例如 CreateUserRequestDto)。
  2. Core 层定义自己的内部模型实体(例如 UserEntityUserModel)。
  3. Repository (在 Core 层) 只接收和返回 UserEntity
  4. API 层(Controller)在调用 Core 之前,有责任DTO转换 (map)Core 层的 UserEntity

总结: 这个错误的本质是架构的“隔离性”被破坏了。你的核心代码(Repository)不应该知道 API 层(DTOs)的任何实现细节。

http://www.dtcms.com/a/546417.html

相关文章:

  • 网站优化费用报价明细唐山百度做网站多少钱
  • 旅游门户网站模板下载茂民网站建设
  • ​(吉林版)安全员C证模拟考试练习题与答案
  • 城乡住房建设网站介绍常见的网络营销方式
  • RAG与数据预测的结合应用(1) - 语义相似度的提升
  • 有模板了怎么建设网站哪家公司建设网站好
  • 36氪国外做网站青岛网站设计建议i青岛博采网络
  • 网站开发作业汕头专业网站建设流程
  • (华为欧拉系统)openEuler-22.03、openEuler-24.03安装-MySQL-8.0和MySQL-8.4
  • 就业创业网站建设长春做网站选长春万网
  • @Required注解有什么用?
  • ARM《7》_编译生成linux内核中的内核模块
  • STM32H743-ARM例程33-TOUCH
  • 大型网站开发团队网站更换模板
  • 网站建设规划ppt模板大名专业做网站
  • 重庆seo网站策划网站建设项目管理基本要求
  • GEO 优化赋能品牌推广,AI 时代的新玩法
  • Sui Stack 助力 AI 从“强大”走向“可信”
  • 营销型网站需要注意天河做网站企业
  • 建网站用哪个好网站建设经费预算策划书
  • 响应时间差 3 倍?华为云 Flexus 部署 DeepSeek+Dify 企业级 AI 性能深度测评
  • 手机网站建设价格明细表wordpress打字特效
  • 网站配色绿色全包圆装修公司
  • AI编程工具的体验与分享,在AI时代,如何选择更适合自己的编译器来帮助自己进行开发
  • 做网站公司如何选微信开发者平台在哪里打开
  • rust:变量与可变性
  • 昆明学校网站设计公司广西网站开发
  • videojs增加视频源选择框小工具
  • 锚文本外链查询网站vue做网站好吗
  • 做网站后台要做些什么国内it外包龙头企业