04 · BUSINESS BACKENDP012 MIN
DTO 与 Validation
把外部输入当成不可信数据,分层验证形状、语义与当前业务状态。
MENTAL MODELINPUT CONTRACTS
01JSON Parse
→02Schema Validation
→03Authorization
→04Business Validation
→05Execute
先把概念与边界说清楚
定义告诉你它是什么,边界告诉你它不负责什么;企业系统最常见的误解通常发生在两者混用时。
DTO
Data Transfer Object,定义接口允许接收或返回的稳定数据形状。
Structural Validation
验证必填、类型、格式、长度、枚举与嵌套结构。
Business Validation
验证 SKU 是否可售、报价是否有效、库存是否足够等依赖当前状态的规则。
price 从前端传来能否直接保存
请求 DTO 包含 unitPrice,用户在 DevTools 改为 1 美分。
- 01
DTO 只接收 SKU、配置和数量。
- 02
服务端从适用 Price List 解析价格。
- 03
若允许销售改价,使用独立权限、范围和原因字段。
输入形状与价格权威分离,合法 JSON 不等于合法业务。
马上动手
- 为 CreateOrderItem 写结构校验与业务校验。
- 列出 response DTO 应隐藏的内部字段。
常见坑
- 相信前端 TypeScript 类型
- DTO 直接 spread 到 ORM create
- 错误只说 invalid input 不给字段路径
05 · KNOWLEDGE CHECKValidation 为什么要分结构与业务两层?查看答案⌄
答案
结构校验可纯粹、快速地验证形状;业务校验需要身份、数据库与当前状态,两者失败语义和复用边界不同。