-2

例如,我有一个名为 Car 的类,其中包含相应的 AdminPart 和PassengerPart 类型的两个字段。

对于使用我的代码的客户端代码,我希望客户端代码能够做到car.getLicense()而不是car.getAdminPart().getLicense(). 这当然是getLicense()在 Car 中实现的,而 Car 又调用了相关的 getter。二传手也一样。

对此有最佳做法吗?我忽略了什么?

4

1 回答 1

1

这个问题听起来与得墨忒耳定律有关(我在您的问题中添加了标签)。这并不是一个真正的最佳实践——许多人声称这不是一个真正的“法律”,而是一种尝试在与信息隐藏相同的方向上减少耦合的启发式(“建议”)。我最喜欢的解释是报童、钱包和得墨忒耳法则

封装表明,客户不Car应该知道汽车设计的细节。否则,如果您更改这些细节,客户端代码可能会中断(并且您通常希望为客户端提供稳定的 API)。如果你允许客户这样做,car.getAdminPart().getLicense()你就是在泄露对象的细节,违反了信息隐藏和封装的原则。

这是一个解释这两种方式的 UML 图:

UML 类图

于 2016-01-30T22:47:10.247 回答