You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Clean架构Node应用中如何定义包含明细的Invitation模型

Clean架构下Invitation模型定义方案

核心原则先拎清楚:领域模型是业务逻辑的核心,不要被数据库的表结构反向绑定。

具体判断逻辑非常直接:

  • 如果你现在的邀请明细表只有id、invitation_id、user_id三个字段,没有任何和单条邀请关系绑定的独立业务属性,你现在写的Invitation接口完全够用,不需要额外创建InvitationDetail模型。
    Clean架构里持久化层的表结构是实现细节,不需要和领域模型一一对应。你在实现Repository层的逻辑时,自己做映射就可以:存储Invitation数据时把users数组拆成多条关联记录插到明细表,查询时把明细表关联查出来的User结果组装回Invitation的users字段就行,完全不影响上层业务逻辑。
  • 只有当邀请明细本身承载了独立业务语义的时候,才需要单独定义InvitationDetail模型。比如后续明细表新增了邀请状态(待确认/已接受/已拒绝)、接受时间、邀请渠道、专属备注这类和「单个用户和单条邀请的关联关系」绑定的字段,这时候明细本身是有独立业务价值的实体,才需要抽出来单独定义,这时候可以把Invitation里的users字段替换为details: InvitationDetail[]。

你当前阶段直接用原有定义即可,参考领域层代码:

export interface User {
  id: string
  // 其余User自身业务字段
}

export interface Invitation {
  id: string
  name: string
  date: string
  users: User[]
}

如果后续业务迭代给邀请关系加了独立属性,再调整成对应结构即可,不用提前做过度设计:

export interface InvitationDetail {
  id: string
  user: User
  status: 'pending' | 'accepted' | 'rejected'
  acceptedAt?: Date
}

export interface Invitation {
  id: string
  name: string
  date: string
  details: InvitationDetail[]
}

内容的提问来源于stack exchange,提问作者unreal__93

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 02:36:23