Java POJO建模:Person类多地址属性选独立字段还是列表存储?
选型结论
两种方案没有绝对的好坏,完全适配不同的业务场景,你倾向的方案1在绝大多数固定地址类型的业务下,是性价比最高的选择。
方案1的核心优势&适用场景
- 代码操作成本极低:直接通过
getPhysicalAddress()/setMailingAddress()就能操作对应地址,不需要遍历列表过滤类型,也不需要处理无匹配地址、多匹配地址的异常分支,可读性和可维护性都远高于方案2。 - 周边适配成本低:不管是做参数校验(比如给实体地址加非空校验)、ORM数据库映射、前后端接口序列化,都可以直接针对单个属性处理,不需要写自定义转换逻辑。
- 适用场景:业务明确Person的地址类型是固定的(比如只有实体、邮寄、账单这几种),后续不会频繁新增类型,也不需要支持用户自定义地址类型的场景。哪怕后续要新增地址类型,只需要在Person类加对应属性即可,改造成本非常低。
方案2的核心优势&适用场景
- 唯一的优势就是支持动态扩展:如果你的业务需要支持用户自定义新增地址类型(比如后台可以配置新增「自提点地址」「发票地址」不需要改代码发版),或者一个人可以有多个同类型地址(比如3个不同的邮寄地址),这种场景下才需要选方案2。
- 对应的劣势也非常明显:每次取指定类型地址都要遍历列表做判断,很容易出现空指针、类型匹配错误等问题,校验、持久化、序列化的适配成本都高很多,属于为了灵活性牺牲了易用性。
最终建议
只要你当前没有动态地址类型、多同类型地址的需求,直接选方案1即可,完全没必要为了虚的“扩展性”做过度设计。哪怕后续真的出现了动态地址的需求,这个级别的重构成本也很低,完全可以等需求明确了再改。
内容的提问来源于stack exchange,提问作者confused human
相关产品推荐
相关产品推荐

