面向对象的搜索历史和过滤器设计

时间:2013-12-05 13:26:50

标签: java objective-c oop design-patterns

在我的Android和iOS应用程序中(无论是Java还是Objective-C项目)我都有一个搜索表单,当用户单击按钮查找内容时,会创建类FilterState的对象并使用该过滤器为服务器API生成URL,返回带有与此过滤器匹配的对象的JSON

我被要求最近创建用户搜索的历史记录。我创建了一个新类SearchHistoryItem,它具有与FilterState类几乎相同的字段,但也可以保存在数据库中并进行检索。我创建了一个单独的类来保存过滤器历史记录,因为我认为历史项目在现实世界中与过滤器项目不同。

但是现在,我开始对这种OO设计产生怀疑。我想问一下,天气我不应该做任何更改并继续支持几个相同字段的两个类,或者我应该通过将与保存在不同Filter状态的数据库相关的方法转移到后面来重构和删除SearchHistoryItem类。 FilterState类?

1 个答案:

答案 0 :(得分:3)

您的主要关注点似乎是否有办法以OO设计方式共享字段。你是对的,任何类型的代码重复通常都有问题需要维护。

考虑这个问题:将来这两个对象在他们的领域会有分歧吗?如果答案是“可能是的”,那么短期内复制字段可能没问题。如果答案“可能不是”,你应该考虑删除重复。

我看到的两个主要选项是:

  • 继承(一个类继承自另一个)
  • 组合(两个类包含第三个,包含共享字段)

如果你想要is-a关系,那么继承通常是可以的。 SearchHistoryItem真的是FilterState吗?它似乎不是。作文可能会更好地为你服务。