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

类设计抉择:Connection类应关联VerificationCode还是直接嵌入其字段?

面向对象设计:保留VerificationCode类还是合并字段到Connection类?

先明确两种实现方案的代码结构:

选项1:保留VerificationCode类

class VerificationCode {
  code: string;
  expiresAt: number;
}

class Connection {
  a: string;
  verificationCode: VerificationCode;
}

选项2:合并字段到Connection类

class Connection {
  a: string;
  code: string;
  expiresAt: number;
}

选项1(保留独立类)的优缺点

优点

  • 语义清晰:code和expiresAt被封装在同一个类里,明确体现二者属于「验证码」这一业务概念,代码可读性更强,其他开发者一眼就能理解这两个字段的关联。
  • 复用性高:如果后续系统里其他模块(比如用户登录、邮箱验证)需要用到验证码结构,可以直接复用VerificationCode类,不用重复定义字段,减少代码冗余。
  • 扩展性好:后续要给验证码加新属性(比如发送渠道sendChannel)或方法(比如判断是否过期的isExpired()),直接在VerificationCode类里修改即可,不会污染Connection类的职责,符合单一职责原则。
  • 维护便捷:所有和验证码相关的逻辑都集中在一个类里,修改时不用在多个地方查找相关代码,降低维护成本。

缺点

  • 轻微冗余:对于极简单的业务场景(比如Connection是唯一用到验证码的地方),单独定义类会增加类的数量,显得有点过度设计。
  • 嵌套访问:获取验证码属性时需要多一层调用(比如connection.verificationCode.code),比直接访问字段稍显繁琐。

选项2(合并字段)的优缺点

优点

  • 结构简洁:类的数量更少,没有额外的嵌套层级,代码看起来更清爽,适合非常简单的业务场景。
  • 访问直接:可以直接通过connection.code、connection.expiresAt访问属性,减少调用层级。

缺点

  • 语义模糊:单独的code和expiresAt字段无法直观体现它们的业务关联,当Connection类字段增多时,很容易混淆这些字段的用途,降低代码可读性。
  • 无法复用:如果其他模块需要验证码结构,只能重复定义相同的字段,造成代码冗余。
  • 扩展性差:后续要给验证码加属性或方法时,只能在Connection类里添加,会让Connection类承担过多不属于它的职责,违背单一职责原则,久而久之会变成臃肿的“大杂烩类”。
  • 维护困难:验证码相关逻辑分散在Connection类中,后续修改时需要在Connection里查找相关代码;如果多个类都重复定义了这些字段,修改成本会成倍增加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:24:40