java库api设计:多方法的额外参数

unhi4e5o  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(264)

我正在为现有的restapi编写javaapi库。
restapi有一些post操作(getposts、getuserposts、getglobalposts等等),所以我有一个post操作类来公开这些操作。现在我需要在所有操作中添加一个选项来添加一组参数(generalparameters)。
你认为什么是更好的解决办法?
向当前函数添加一个参数,这意味着有时用户必须传递null(实际上是80%的时间)。
为每个获得2个参数的操作添加一个重载函数(这意味着向类添加6-7个重载方法)
我知道这两种方法都管用。在大多数应用程序中,这并不是一个主要问题,但在编写其他人使用的库时,它对我来说似乎更重要一些。
你的意见是什么?什么是更好的api?

yqyhoc1h

yqyhoc1h1#

在这两种选择中,我更喜欢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 )

hiz5n14c

hiz5n14c2#

我会这样做:

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

根据您的编辑:
这里的代码使用选项2;如果您添加另一个重载方法,该方法不接受任何内容,但为它们传递null,则它们永远不必传递null值

相关问题