“不要问”,不是所有方法都无效吗?

阿兹克

我已经阅读了很多有关TDA以及getter和setter方法的利弊的文章,尽管我不一定同意我所阅读的所有内容,但前提是您应该始终告诉而不是询问,并且应该避免使用accessor方法,这是否意味着所有方法都应返回void以遵守这些准则/理想?

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

马特·蒂默曼斯

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

理想的是,一个对象有一个工作,它的整个工作,它的类是你把代码,做这项工作的地方。

但是,许多开发人员认为存在这个问题,这使他们无法实现这一理想。

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

不幸的是,执行此操作通常会导致使特殊情况代码成为X工作的一部分。它正在查看与X无关的内部信息,并使用它来做出与业务无关的决策。现在,没有地方可以找到执行X任务的代码,即使您的小改动是安全的,每个人都很难弄清楚X任务的完成方式。

所以,不要这样做。“告诉,不要问”的“不要问”部分意味着不要再询问您没有业务看到并做出确实是X的工作的内部信息。

替代方案是告诉。向X添加一个方法或其他内容,让您说“我现在需要您做一些不同的工作”。但是,尽最大努力不要完全满足您的特殊小要求。然后,当出现特殊情况时,您只需告诉X需要了解什么,然后将涉及X内部状态的决策留给X。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

所有方法都返回'.autoNumeric不是函数-无法取消格式化数字

来自分类Dev

Groovy的所有方法是否都短路?

来自分类Dev

不是所有控制路径都返回值吗?

来自分类Java

我可以获得类的所有方法吗?

来自分类Dev

我可以调用对象的所有方法吗?

来自分类Dev

我可以获取python对象的所有方法吗?

来自分类Dev

如何确保模块中的所有方法都具有相同的签名?

来自分类Dev

如果在 foreach 方法中的所有方法调用都返回 true

来自分类Dev

反应:类中的所有方法都运行 2 次

来自分类Dev

我的所有方法都需要通用包装,而无需复制代码(C#)

来自分类Dev

获取所有方法

来自分类Java

接口,如果不是所有实现都使用所有方法呢?

来自分类Dev

所有单例方法都公开吗?

来自分类Dev

如何列出一个类的所有方法(不是扩展方法和包含方法)

来自分类Dev

当类具有某些虚拟方法时,它的所有方法都使用vtable吗?

来自分类Dev

如果接口和抽象类都具有相同的方法,那么哪种方法最好将所有方法都覆盖到我的Java类中?

来自分类Dev

我们可以为所有方法编写扩展方法吗?

来自分类Dev

Java替换所有方法附加替换字符串而不是替换

来自分类Dev

在所有方法上覆盖块而不是覆盖关键字

来自分类Dev

如何模拟一个模块而不是其中的所有方法?

来自分类Dev

这个方法有方法吗?

来自分类Dev

Pytest只能实例化一个类对象以测试其所有方法吗?

来自分类Java

我应该将所有方法标记为虚拟吗?

来自分类Dev

我必须在调用API链中的所有方法中使用async / await吗?

来自分类Dev

您可以提取类中所有方法的签名吗?

来自分类Dev

将原型B的所有方法和属性分配给原型A吗?

来自分类Dev

在准备好的语句中选择所有行时,真的需要问号吗?

来自分类Java

跟踪所有方法和类

来自分类Dev

调用原型的所有方法?

Related 相关文章

  1. 1

    所有方法都返回'.autoNumeric不是函数-无法取消格式化数字

  2. 2

    Groovy的所有方法是否都短路?

  3. 3

    不是所有控制路径都返回值吗?

  4. 4

    我可以获得类的所有方法吗?

  5. 5

    我可以调用对象的所有方法吗?

  6. 6

    我可以获取python对象的所有方法吗?

  7. 7

    如何确保模块中的所有方法都具有相同的签名?

  8. 8

    如果在 foreach 方法中的所有方法调用都返回 true

  9. 9

    反应:类中的所有方法都运行 2 次

  10. 10

    我的所有方法都需要通用包装,而无需复制代码(C#)

  11. 11

    获取所有方法

  12. 12

    接口,如果不是所有实现都使用所有方法呢?

  13. 13

    所有单例方法都公开吗?

  14. 14

    如何列出一个类的所有方法(不是扩展方法和包含方法)

  15. 15

    当类具有某些虚拟方法时,它的所有方法都使用vtable吗?

  16. 16

    如果接口和抽象类都具有相同的方法,那么哪种方法最好将所有方法都覆盖到我的Java类中?

  17. 17

    我们可以为所有方法编写扩展方法吗?

  18. 18

    Java替换所有方法附加替换字符串而不是替换

  19. 19

    在所有方法上覆盖块而不是覆盖关键字

  20. 20

    如何模拟一个模块而不是其中的所有方法?

  21. 21

    这个方法有方法吗?

  22. 22

    Pytest只能实例化一个类对象以测试其所有方法吗?

  23. 23

    我应该将所有方法标记为虚拟吗?

  24. 24

    我必须在调用API链中的所有方法中使用async / await吗?

  25. 25

    您可以提取类中所有方法的签名吗?

  26. 26

    将原型B的所有方法和属性分配给原型A吗?

  27. 27

    在准备好的语句中选择所有行时,真的需要问号吗?

  28. 28

    跟踪所有方法和类

  29. 29

    调用原型的所有方法?

热门标签

归档