- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我读了很多关于 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/
请问,如何让我的代码在计算机或用户两次获胜后终止?我被要求编写一个程序来玩流行的剪刀石头布游戏。 (剪刀可以剪布,石头可以敲剪刀,布可以包石头。)程序随机生成数字0、1、2,分别代表剪刀、石头、布。该
在web目录运行命令:mvn jetty:run,报错信息: [WARNING] The POM for com.mycompany:core:jar:1.0-SNAPSHOT is missing,
计划的总体目的:确定太阳系 9 颗行星中每颗行星的表面重力 (g)。 (我知道,我知道......冥王星不是行星,但它在这个程序中)。 问题:该程序创建图表并计算表面重力。我需要帮助使格式正确 - 它
我正在加入两个 RDD rddA 和 rddB。 rddA 有 100 个分区,rddB 有 500 个分区。 我正在尝试了解join 操作的机制。默认情况下,无论连接顺序如何,我最终都会得到相同的分
我去 export PERL6LIB="/GitHub/perl6-Units/lib" 进而 echo $PERL6LIB /GitHub/perl6-Units/lib 但是当我运行 perl6
在 OpenBLAS 中,如果您调用 openblas_set_num_threads要求线程数高于您拥有的 CPU 线程数, 那么它将设置使用的实际线程数是您的 CPU 线程数。 这可以在 sour
我正在尝试使用此代码获取 pid。但是当我运行编译的代码时。我收到一条错误消息“警告:格式指定类型“unsigned long”,但参数类型为“pid_t”(又名“int”)[-Wformat]”。
我有一个 UI 线程和另一个线程,我想使用 PostMessage() 从另一个 trhead 向 UI 线程发送一条用户定义的消息。 如果UI线程显示一个消息框,然后我发送用户自定义消息,消息框的消
是的,我知道如何使用GC.SuppressFinalize() - 解释了here .我读过很多次使用 GC.SuppressFinalize() 从终结队列中删除对象,我认为这是好的,因为它使 GC
我读了很多关于 TDA 以及 getter 和 setter 方法的优缺点的文章,尽管我不一定同意我读到的所有内容,但假设您应该总是告诉而不是询问,并且您应尽可能避免访问器方法,这是否意味着所有方法都
例如,我正在开发一个程序来获取商店中订购的商品总数。我为可用项目创建了一个名为 menu 的字典,但如果订单列表中订购的项目不在键中。与我的字典“菜单”相同,该项目应替换为可乐。 我的目的是将商品转换
我需要知道如何获取同一域中 iframe 中特定标记的总数。我目前正在使用这个没有 iframe 的工作示例:
找不到这两个选择器之间的区别。两者似乎都做同样的事情,即根据包含给定字符串的特定属性值选择标签。 对于[属性~=值]:http://www.w3schools.com/cssref/sel_attri
alignof(N) == sizeof(N) 其中 N 是否为整数类型? 我要求同时使用 C 和 C++,希望这不是问题。 最佳答案 它是特定于机器的。在 32 位机器上,alignof(int64
我想问一个关于 iOS 文件绝对路径的问题。 我的应用程序中 bundle 了很多图标文件,请在此处说明:icons.bundle。 我有一个图片浏览器来显示用户选择这些图标来代表他们的任务,所以我需
我是一名优秀的程序员,十分优秀!