何时使用which-多个方法、多个参数或一个选项参数

When to use which - multiple methods, multiple parameters, or an options parameter

本文关键字:参数 选项 一个 which- 方法 何时使      更新时间:2023-09-26

这个问题来自javascript的观点,但它当然可以应用于其他语言。

我最近越来越多地遇到这种情况,我想知道是否有一个最佳实践,或者至少是一个好的设计标准,来指导如何构建你的方法。

我看到的显而易见的选项如下,以及每个的一个微不足道的例子

  • 多种方法:

    this.makeGetRequest = function(controller){...}
    this.makeSynchronousGetRequest = function(controller){...}
    this.makePostRequest = function(controller, data){...}
    
  • 一种方法,具有更多参数:

    //data would be an optional parameter
    //  this.makeRequest("friends", "GET", true);
    //  this.makeRequest("friends", "POST", false, newFriend);
    this.makeRequest = function(controller, type, isSynchronous, data){...}
    
  • 一种方法,带有选项参数:

    this.makeRequest = function(controller, type, options);
    this.makeRequest("friends", "POST", {data:newFriend, isSync:false});
    

HTTP请求示例只是为了解决这个问题,但它适用于任何具有不同定制/变量量的面向公共的函数

显然,这三个功能都一样。但什么是好的做法呢?是否有一个标准或指导方针可以遵循?

options参数的优点在于,它允许在不牺牲清晰度的情况下进行无限选择。当有人指定data:isSync:时,很明显要填写什么设置。记住将函数中的第13个参数设置为false会导致混乱。

因此,在最后两个选项之间,我只在以下情况下使用多个参数:(1)总共少于四个参数,(2)序列合乎逻辑且易于记忆(URL,然后是类型,然后是数据),以及(3)不超过一个(最后一个)是可选的。无论如何,这是经验法则。

与参数化相比,多种方法如何?当您有少量的可能性时(GET与POST、UseDefaults与DontUseDefaults或其他),多个方法只是一个选项。仔细想想,我可能只在以下情况下设置单独的方法:

  1. 区别是非常重要的(同步请求的行为与异步请求有根本不同,我希望开发人员有意识地选择应用哪一个

  2. 您无论如何都不想设置其他选项。如果我首先必须记住是调用foo.get()还是foo.post(),然后记住无论如何都要填写一个options对象,我只是强迫你在两个不同的地方做出决定。我宁愿把所有的设置都放在一个地方。

不如用一个带有json选项的"超级方法"来实现最大的灵活性,然后用一些定义更严格的参数的包装方法来轻松访问最常用的功能。

显然,对于多个方法,你需要有他们会调用的某种抽象超方法,否则你会重复自己,这被认为是不好的,但有时有别名或shorthands这样的方法是很好的(例如,参见jQuery $.getJSON()了解修改后的$.ajax()-call)

如果你有很多特殊的大小写或可选参数,那么带有更多参数的一个方法就不是很灵活了,因为你会使用第三个例子中提到的选项对象。

它实际上归结为用例和所需的灵活性/可重用性。就我个人而言,我总是使用One方法,并使用选项参数方法。