🔫为什么你在结构化数据方面表现糟糕,以及如何最终提升 💪

发布: (2025年12月5日 GMT+8 05:42)
7 min read
原文: Dev.to

Source: Dev.to

1. 你在思考 UI,而不是业务领域

大多数开发者从 Figma 页面或快速的白板草图开始——很少从真实的业务逻辑出发。

他们会问:

“我需要什么 JSON 来返回这个响应?”

而不是:

“底层的业务领域到底是什么样的?”

于是 API 成了 UI 的映射,而不是业务的映射。

你的表、模型和路由会开始出现:

  • subtitle
  • isCollapsed
  • displayOrder
  • object.with.20.levels.of.depth

这不是数据建模,而是把你的组件树序列化了。

2. 你把不相关的概念“合并”在一起,因为这样更容易

你一定见过这种写法:

{
  "user": { /* ... */ },
  "orders": [ /* ... */ ],
  "permissions": [ /* ... */ ],
  "stats": { /* ... */ }
}

恭喜,你已经创建了一个 blob API——JSON 奶昔。它能在一个页面上工作,却在其他地方崩溃。

3. 你没有把稳定结构和不稳定结构分离

UI 每周都会变,业务规则每年才会变。

如果每次有人在 Figma 中移动卡片,或客户提出一个“微小改动”就导致你的 API 失效……那你根本没有构建 API,而是构建了一个 UI 传输层

一个好的数据模型必须能够经受:

  • 重新设计
  • 移动端应用
  • 合作伙伴集成
  • 数据分析
  • AI
  • 新功能
  • 新市场

如果它经不住这些考验,那它根本就不是一个真正的数据模型。

4. 你因为害怕发起多个请求而过度聚合

有些开发者相信:

“我们需要一个端点来返回整个页面的所有数据。”

不,你不需要。

进行多个异步调用的好处是:

  • 更简洁
  • 更可预测
  • 更容易缓存
  • 更容易失效
  • 更加灵活

聚合是一种工具,而不是默认选项。

5. 你不理解实体 vs. 投影

实体 = 业务的真实真相
投影 = 为特定用例重新塑形、便于使用的数据

如果把它们混在一起,你会得到:

  • UI 字段泄漏到持久层
  • 业务规则被写进组件内部
  • 每次设计更新都导致 API 失效
  • 没有人再能理解的模型

优秀的开发者会把这两个世界分开。伟大的开发者 会记录投影的边界

6. 你从不提出关键问题

最好的数据架构师会问:

  • 真相的来源是什么?
  • 实际存在哪些实体?
  • 哪些不变量绝不能被破坏?
  • 移动端应用会使用这些数据吗?
  • 如果 UI 完全改变会怎样?

如果你从不问这些问题,你并不是在建模——而是在画草图。

🔥 那么……如何提升?

✔️ 1. 在 API 之前先建模业务领域

如果你不能用白板上的盒子解释业务 → 不要写这个端点

✔️ 2. 保持实体的纯粹性

不要出现 UI 字段、布局信息、或受 Figma 启发的命名。
如果你的数据库表看起来像 React 组件,立刻停下来重构。
如果你选择文档数据库是因为它映射了 UI,请自问:

“如果根本没有 UI 会怎样?”

✔️ 3. 更倾向于多个细粒度端点

前端框架本身就是为组合而生的。利用它们。让 UI 来组合数据,而不是让 UI 决定数据结构。

✔️ 4. 谨慎使用投影——并且要给它们起清晰的名字

  • /orders → 实体
  • /orders/overview → 投影
  • /dashboard → 投影
  • /users/:id/profile-view → 投影

好的命名可以避免 80 % 的混乱。

✔️ 5. 为多端前端设计

自问:

  • 如果我要做移动端应用,这个结构还能合理吗?
  • 如果合作伙伴要消费这个 API 呢?
  • 如果我要把它喂进分析管道呢?
  • 如果明天换成 Vue 或 Svelte 呢?

如果答案是 ,就重新开始。

✔️ 6. 用关系和约束来思考

真正的数据模型不是“内部装了东西的对象”。它是:

  • 实体
  • 引用
  • 不变量
  • 约束
  • 时间线
  • 状态机

这正是开发者升级为架构师的关键。

✔️ 7. 简单即是更好

多个小而有意义的实体比一个巨大的“上帝对象”更易维护。

✔️ 8. 避免深层嵌套——倾向于扁平结构

你的 API 应该返回 扁平、规范化 的数据。让 UI 负责分组、过滤、嵌套、聚合。扁平数据 = 可预测数据。

✔️ 9. 使用正确的命名——并保持一致

清晰的命名能拯救团队。UserGroupsResponse 一眼就能看懂。如果你的命名让人必须猜测 → 那就是错的。

✔️ 10. 预见变化

你的模型会成长、演进并变得更复杂。设计时要考虑灵活性。未来的你会感谢现在的决定。

🎯 最后寄语

你之所以在结构化数据上表现不佳,并不是因为你不行,而是因为从未有人教你 超越屏幕 的思考方式。

一旦你学会区分:

  • 业务领域 vs. 投影
  • 实体 vs. 布局
  • 真相 vs. 便利

……一切都会变得更容易。屏幕每周都会换,好的数据结构可以支撑十年之久。

Back to Blog

相关文章

阅读更多 »

使用 Clprolf 分离类职责

概述:设计干净、结构良好的类是面向对象编程中的核心挑战。Clprolf 引入 declensions —— 一种简单的方式来表达……