多值属性建模为类或类属性的判定时机及权威实践指引
业界确实有普遍认可的实践准则,帮你决定什么时候把多值属性拆成独立关联实体,什么时候保留为类的多值属性,核心看这几个关键维度:
属性是否有独立的业务属性或行为
拿你说的「技能」举例:如果技能不只是个简单名称,还包含等级、认证机构、获取时间这类额外信息,那必须单独建Skill实体类,和Person做关联。要是技能就只是个标签(比如"Python"、"团队协作"),没有其他附加信息,用Person的多值属性完全够用。是否需要对属性集合做独立操作
如果业务里需要单独处理某个技能——比如统计公司里最热门的技能、给技能分类、或者单独更新某个人的某一项技能(而不是覆盖整个技能列表),那Skill作为独立实体更合适。要是只是展示用户的技能列表,不需要单独操作单个技能,多值属性就足够轻便。数据复用性需求
如果除了Person,还有其他实体(比如JobPosition岗位)也需要关联同一种技能,那把Skill做成独立实体能避免重复存储,保证数据一致性。要是只有Person用到技能,且只是简单枚举,多值属性更省事。未来扩展性考量
要是以后可能给技能加更多属性(比如技能有效期),或者需要跟踪Person和Skill之间的关联细节(比如掌握程度),提前建关联实体能减少后续重构的麻烦。如果确定技能永远只是简单的字符串列表,那多值属性更简洁。
总结下你提到的场景:如果业务里技能只是个标签列表,用Person类的多值属性skills: List<String>就够;但如果技能有额外属性、需要独立操作,或者其他实体也要复用技能数据,那就建Person和Skill两个类,甚至可以加个PersonSkill关联类来存储掌握程度这类中间信息。
内容的提问来源于stack exchange,提问作者dok

