🔫为什么你在结构化数据方面表现糟糕,以及如何最终提升 💪
Source: Dev.to
1. 你在思考 UI,而不是业务领域
大多数开发者从 Figma 页面或快速的白板草图开始——很少从真实的业务逻辑出发。
他们会问:
“我需要什么 JSON 来返回这个响应?”
而不是:
“底层的业务领域到底是什么样的?”
于是 API 成了 UI 的映射,而不是业务的映射。
你的表、模型和路由会开始出现:
subtitleisCollapseddisplayOrderobject.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. 便利
……一切都会变得更容易。屏幕每周都会换,好的数据结构可以支撑十年之久。