核心问题
你定义的这个东西,到底是什么?
工程困境
很多系统的混乱,从一个宽泛的 User 开始。
type User = {
id: string
email?: string
role?: string
companyId?: string
isCustomer?: boolean
isInstructor?: boolean
metadata?: Record<string, unknown>
}
这不是一个实体,这是一个垃圾桶。账号、个人资料、组织身份、付费状态、讲师身份都被塞进一个名字里。
思想模型
命名就是本体论。你写下一个类名、表名、函数名,就是在定义这个数字世界里什么东西存在。
User 和 Account 是不是一回事?
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
打开代码库,找一个最宽的名词:User、Manager、Record、Data。问:
它到底代表什么?
它混进了哪些不同生命周期?
能否拆成更具体的事实、状态或关系?
小结
好名字不是让代码更好看,而是让错误设计更难发生。