【发布时间】:2019-05-16 13:33:43
【问题描述】:
我们有一种情况,我们正在进行搜索,用户可以提供一个项目列表作为搜索的过滤器。
例如,假设我们正在搜索包含特定食物的食谱。我们可能有一份可能的食物清单,例如:
- 牛肉
- 鸡
- 鱼
- 胡萝卜
- 豌豆
- 洋葱
- 大米
- 豆子
但我们也希望用户能够搜索“任何肉类”或“任何蔬菜”,并让它返回与所有肉类可能性或所有蔬菜可能性相匹配的任何内容。
我们可以让客户端进行解析,当用户选择“肉类”时,发送所有肉类选择。但是当用户选择这样的更高类别时,我们还需要执行其他逻辑。例如,如果他们选择“任何肉类”,我们可以搜索一个额外的数据库,其中包含标记为“肉类”的食谱,而不是单个肉类。
(我正在根据我们实际的业务需求来编造这个例子,这些需求要枯燥得多,但本质上是这个想法。)
我能想到几个可能的解决方案,它们是同一件事的阴影:
- 在搜索条件中有两个不同的列表,一个用于枚举 单个项目和一个用于一组枚举,然后将两者结合起来 过滤搜索时。
- 在搜索条件中有一个列表,其中包含一个枚举 单个项目和组项目。
但我觉得我缺少一个在代表群体/个人关系方面可能更优雅的解决方案。有解决这种情况的模式吗?
(PS:这是在Java中,但我认为这并不重要。)
【问题讨论】:
-
Map<Type, Set<Dish>>怎么样,其中Type是meat和Set<Dish>是fish, carrots...,得到Type是O(1)和Set::contains又是@98765432
标签: java search design-patterns enums