当以面向对象的方式实现大海捞针搜索时,基本上有三种选择:
1. needle.find(haystack)
2. haystack.find(needle)
3. searcher.find(needle, haystack)
你更喜欢哪一个,为什么?
我知道有些人更喜欢第二种选择,因为它避免了引入第三个对象。然而,我不禁觉得第三种方法在概念上更“正确”,至少如果你的目标是建模“现实世界”。
您认为在哪些情况下引入辅助对象(例如本例中的搜索器)是合理的,何时应避免引入它们?
最佳答案
在这三个选项中,我更喜欢选项#3。
Single Responsibility Principle让我不想在我的 DTO 或模型上添加搜索功能。他们的职责是成为数据,而不是找到自己,针也不应该知道大海捞针,大海捞针也不应该知道针。
无论如何,我认为大多数面向对象实践者需要很长时间才能理解为什么#3 是最好的选择。在我真正理解它之前,我可能已经研究了 OO 十年。
@wilhelmtell,C++ 是极少数具有模板特化的语言之一,可以使此类系统真正运行。对于大多数语言来说,通用的“查找”方法将是一个可怕的想法。
关于oop - 如何大海捞针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23755/