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
相关产品推荐
相关产品推荐

