Java - 如何设计搜索方法?

Fre*_*Pym 5 java search api-design

我正在设计一个包装新闻搜索引擎的装饰器类,因此我们可以将这个类与一个库一起发送给其他团队使用.

这个类的公开接口是Java风格的接口,它需要很多参数,然后这个装饰器将这些参数组装成搜索引擎的搜索文本.

我的方法如下:

public List<News> search(List<String> keywords, List<String> categories, List<String> authors, List<Location> locactions, List<LocalDate> dates, List<SortRule> sortRules, int offset, int limit);
Run Code Online (Sandbox Code Playgroud)

是的,我知道......这种方法看起来非常漫长,非常错误,并且很难用于客户端.

那么,我如何为这样的搜索功能设计更好的API呢?

use*_*685 7

您可以尝试编写一个包装类来应用规则过滤器,然后在当前类中获取此类的新对象.这样它会更加简单和清洁.

例如,

RuleFilters r = new RuleFilters();
r.addFilters(Type.Keywords, keywords);
r.addFilters(Type.Categories, categories);
r.addFilters(Type.Authors, authors);
Run Code Online (Sandbox Code Playgroud)

Type是一个枚举,其中包含不同规则过滤器{Categories, Authors, Keywords}等的详细信息.

最后在您的主类:

public List<News> search(RuleFilters r) {
    /* Do Something with the rule filters */ 
};
Run Code Online (Sandbox Code Playgroud)

接口:

List<News> search(RuleFilters r);
Run Code Online (Sandbox Code Playgroud)

注意: public接口中不需要关键字.


Chi*_*rag 6

有效Java中所述,您可以考虑使用构建器模式。那将是一个很好的解决方案。

SearchParam search = new SearchParam.Builder(keywords).
  categories(categories).authors(authors).location(loc1,loc2).build();
Run Code Online (Sandbox Code Playgroud)