oop - 如何大海捞针?

标签 oop class-design program-structure

当以面向对象的方式实现大海捞针搜索时,基本上有三种选择:

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/

相关文章:

c# - 使用抽象方法时请解释这种模式

c# - 在 Main() 中保持模块化?

javascript - 变量说明

PHP OOP 查询未执行

java - 能够声明一个对象但不能实例化它有什么意义

oop - 类的子类和类的实例之间的区别?

ios - 创建一个 objective-c 全局类

c++ - 如何使用 UML 类图实现从父类派生的类对象类型

c# - 如何正确设计一个包含双语信息的类

python - For-Else 循环在另一个 For 循环中