仔细阅读那篇文章。Holub 强调 getter 和 setter 是一种邪恶的“默认反模式”,这是我们在设计系统时陷入的坏习惯;因为我们可以。
思考过程应该顺理成章;这个对象有什么作用?它的职责是什么?它的行为是什么?它知道什么?对这些问题进行长时间而认真的思考会自然而然地引导您设计尽可能公开最高级别接口的类。
汽车就是一个很好的例子。它公开了一个定义明确、标准化的高级接口。我不关心setSpeed(60)
...是MPH还是km/h?我只是加速,巡航,减速。我不必考虑其中的细节setSteeringWheelAngle(getSteeringWheelAngle()+Math.rad(-1.5))
,我只是,细节在引擎盖下turn(-1.5)
得到了照顾。
它归结为“您可以并且应该弄清楚每个类将用于什么,它做什么,它代表什么,并公开满足这些要求的可能的最高级别接口。getter 和 setter 通常是一种逃避,当程序员只是懒得做分析以确定每个类是什么和不是什么,所以我们走上了“它可以做任何事情”的道路。getter 和 setter 是邪恶的!
有时,一个类的实际要求是无法提前知道的。这很酷,只是暂时退出并使用 getter/setter 反模式,但是当您通过经验知道该类的用途时,您可能会想要回来并清理肮脏的低级接口。基于“一开始写傻瓜时你希望知道的东西”进行重构是本课程的标准。您不必了解所有事情才能开始,只是您知道的越多,在此过程中可能需要的返工就越少。
这就是他所提倡的心态。Getter 和 Setter 是一个容易掉入的陷阱。
是的,bean 基本上需要 getter 和 setter,但对我来说,bean 是一个特例。Beans 代表名词、事物、有形的可识别(如果不是物理的)对象。实际上并不是很多对象都有自动行为;大多数时候,事物是由包括人类在内的外部力量操纵的,以使它们具有生产力。
daisy.setColor(Color.PINK)
很有意义。你还能做什么?也许是瓦肯人的心灵融合,让花朵想要变成粉红色?嗯?
吸气剂和二传手有他们的?邪恶?地方。只是,就像所有真正好的 OO 东西一样,我们倾向于过度使用它们,因为它们是安全和熟悉的,更不用说简单了,因此如果菜鸟没有看到或听到它们可能会更好,至少在他们之前” d 掌握了心灵融合的东西。