Visual LabINTERACTIVE LEARNING
04 · BUSINESS BACKENDP012 MIN

DTO 与 Validation

把外部输入当成不可信数据,分层验证形状、语义与当前业务状态。

MENTAL MODELINPUT CONTRACTS
01JSON Parse
02Schema Validation
03Authorization
04Business Validation
05Execute
TypeScript 只约束编译期代码;HTTP 到达的是字节,必须在运行时重新证明它满足契约。
01 · CONCEPTS & BOUNDARIES

先把概念与边界说清楚

定义告诉你它是什么,边界告诉你它不负责什么;企业系统最常见的误解通常发生在两者混用时。

01

DTO

Data Transfer Object,定义接口允许接收或返回的稳定数据形状。

02

Structural Validation

验证必填、类型、格式、长度、枚举与嵌套结构。

03

Business Validation

验证 SKU 是否可售、报价是否有效、库存是否足够等依赖当前状态的规则。

02 · BLIND BOTS CASE

price 从前端传来能否直接保存

问题现场

请求 DTO 包含 unitPrice,用户在 DevTools 改为 1 美分。

  1. 01

    DTO 只接收 SKU、配置和数量。

  2. 02

    服务端从适用 Price List 解析价格。

  3. 03

    若允许销售改价,使用独立权限、范围和原因字段。

得到什么

输入形状与价格权威分离,合法 JSON 不等于合法业务。

03 · PRACTICE

马上动手

  1. 为 CreateOrderItem 写结构校验与业务校验。
  2. 列出 response DTO 应隐藏的内部字段。
04 · PITFALLS

常见坑

  • 相信前端 TypeScript 类型
  • DTO 直接 spread 到 ORM create
  • 错误只说 invalid input 不给字段路径
05 · KNOWLEDGE CHECKValidation 为什么要分结构与业务两层?查看答案⌄
答案

结构校验可纯粹、快速地验证形状;业务校验需要身份、数据库与当前状态,两者失败语义和复用边界不同。