0

我正在为现有的 REST API 编写 Java API 库。

REST API 有一些 postOperations(getPosts、getUserPosts、getGlobalPosts 等)所以我有一个 postOperations 类来公开它。现在我需要在所有操作中添加添加一组参数(generalParameters)的选项。

您认为更好的解决方案是什么?

  1. 为当前函数添加一个参数,这意味着有时用户将不得不传递 null(实际上是 80% 的时间)。
  2. 为每个获取 2 个参数的操作添加一个重载函数(这意味着向该类添加 6-7 个重载方法)

我知道这两种方式都有效。在大多数应用程序中这不是主要问题,但是在编写其他人会使用的库时,它对我来说似乎更重要。

你怎么看?什么是更好的公开 API?

4

2 回答 2

0

我会做这样的事情:

public void handle(some parameters) {
    //handle params
}
public void handle() {
    handle(null, null, -1, w/e);
}

根据您的编辑:

此处的代码使用选项 2;如果您添加另一个不接受任何内容但为它们传递 null 的重载方法,它们将永远不必传递 null 值

于 2012-08-24T16:19:10.067 回答
0

在这两个选择之间,我更喜欢#1,除非向后兼容性是一个问题。我认为让图书馆用户了解参数并迫使他们就是否提交参数做出明智的决定是件好事。

另一种方法是使用上下文对象进行更细粒度的控制。与其将 generalParameters 视为数据结构,不如将它们视为上下文的属性:

class PostOperations {
  public void getPosts() {
    return getPostContext().getPosts();
  }

  public void getPostContext() {
    return new PostContext();
  }
}

class PostContext {
  public void setGeneralProperty1() {...}
  public void setGeneralProperty2() {...}
  public void getPosts() {...}
}

您可以决定如何对各种 get*Post 方法进行建模。根据它们在您的系统中的含义,您可以让 PostContext 拥有所有这些方法,或者您可以在 PostContext 上设置一个影响其 getPosts() 行为的状态(例如PostContext.setUserOnly(true)),或者您可以使用类层次结构对其进行建模(例如class UserPostContext extends PostContext

于 2012-08-24T17:08:04.227 回答