核心问题

你定义的这个东西,到底是什么?

工程困境

很多系统的混乱,从一个宽泛的 User 开始。

type User = {
  id: string
  email?: string
  role?: string
  companyId?: string
  isCustomer?: boolean
  isInstructor?: boolean
  metadata?: Record<string, unknown>
}

这不是一个实体,这是一个垃圾桶。账号、个人资料、组织身份、付费状态、讲师身份都被塞进一个名字里。

思想模型

命名就是本体论。你写下一个类名、表名、函数名,就是在定义这个数字世界里什么东西存在。

UserAccount 是不是一回事?
Student 是一种人,还是一段学习关系?
Customer 是事实、状态,还是推导结论?

这些问题不清楚,代码就会替你含糊。

好模型

type Account = { id: string; status: "active" | "suspended" }
type Credential = { accountId: string; kind: "email" | "phone"; identifier: string }
type OrganizationMembership = { accountId: string; organizationId: string; role: "owner" | "member" }
type Enrollment = { accountId: string; courseId: string; status: "active" | "completed" }

类型变多了,但世界变清楚了。

Atlas Action

打开代码库,找一个最宽的名词:UserManagerRecordData。问:

它到底代表什么?
它混进了哪些不同生命周期?
能否拆成更具体的事实、状态或关系?

小结

好名字不是让代码更好看,而是让错误设计更难发生。