知识卡片
双向关联与主控从属设计
内容
双向关联是一对相互链接的性质:Car有owner属性指向Person,Person有cars属性指向一组Car,跟随任意方向都应能回到起点集合。这种双向同步在代码里天然棘手,必须保证两个性质不脱节。实践中常让单值一侧(owner)作主控端,多值一侧(cars)作从属端;主控端设置器负责同步对方集合,从属端需向主控端暴露一个本不该公开的方法(常用friend命名标记),这是维护双向一致性的代价。
参考来源
- 位置:《UML精粹:标准对象建模语言简明指南(第3版)》第3章《类图:基础》(源文件:_epub-src/EPUB/2.xhtml)
- 结论依据:原文说明双向关联"它们之间的双向链接意味着如果你跟随两个性质,你应该会回到包含起点的集合",并给出实现建议"让关联的一侧——单值侧控制该关系……从属端(Person)需要向主控端泄露其数据的封装",解释了主控/从属分工与friend命名惯例的由来。
- 原始内容:Car类有性质owner:Person[0..1],Person类有性质cars:Car[*]……最重要的事情是,如果可能,让关联的一侧——单值侧控制该关系。为此,从属端(Person)需要向主控端泄露其数据的封装……这里使用"friend"作为其命名惯例。