gpt4 book ai didi

java - "Tell Don' t 请问,"shouldn' t所有方法都无效吗?

转载 作者:行者123 更新时间:2023-12-03 01:59:12 27 4
gpt4 key购买 nike

我读了很多关于 TDA 以及 getter 和 setter 方法的优缺点的文章,尽管我不一定同意我读到的所有内容,但假设您应该总是告诉而不是询问,并且您应尽可能避免访问器方法,这是否意味着所有方法都应返回 void 以符合这些准则/理想?

我知道实际上并非所有方法都应该返回 void,但我只是想完全理解看待 OOP 的整个方式。我似乎在其他地方找不到解释。

最佳答案

“告诉,不要问”本身就是一个愚蠢的过于笼统的规则,而不是一个理想的规则。

理想的情况是,一个对象有一项工作,它完成全部工作,并且它的类是您放置代码的地方做这项工作。

但是,许多开发者心中存在这个问题,使他们妥协了这个理想......

假设您正在与许多其他人共享的大型代码库中工作,并且您有一个特殊的要求:在您的特定用例中,您需要对象 X 以不同的方式完成其工作。在某些方面,最安全的方法是将特殊情况的代码分开。这通常意味着您必须检测您的特殊情况,查询 X 的状态,以便您可以决定您希望它在特殊情况下做什么,然后告诉 X 去做。

不幸的是,当您这样做时,通常会发生的情况是您让特殊情况代码完成了 X 的部分工作。它正在查看与 X 无关的内部信息,并使用这些信息来做出与它无关的决策。现在没有一个地方可以找到执行 X 工作的代码,尽管的一点点改变是安全的,但每个人都很难弄清楚 X 的工作是如何完成的。

所以,不要这样做。 “告诉,不要问”中的“不要问”部分意味着停止询问这些你无权看到的内部信息,并做出真正属于 X 工作的决定。

另一种选择是告诉。向 X 添加一个方法或其他内容,让您可以说“我现在需要您以不同的方式工作”。不过,请非常努力来满足您特殊的小要求。然后,当您的特殊情况出现时,您只需告诉 X 它需要了解什么,并将涉及 X 内部状态的决策留给 X。

关于java - "Tell Don' t 请问,"shouldn' t所有方法都无效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33558213/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com