何时使用哪种方式——多个方法、多个参数或选项参数

8
这个问题来自JavaScript的角度,但它当然也适用于其他语言。
我最近遇到这个问题越来越多,想知道有没有最佳实践,或至少是良好的设计标准,来决定如何构建您的方法。
我看到的明显选项如下,以及每个选项的一个微不足道的示例。
  • Multiple methods:

    this.makeGetRequest = function(controller){...}
    this.makeSynchronousGetRequest = function(controller){...}
    this.makePostRequest = function(controller, data){...}
    
  • One method, with more parameters:

    //data would be an optional parameter
    //  this.makeRequest("friends", "GET", true);
    //  this.makeRequest("friends", "POST", false, newFriend);
    this.makeRequest = function(controller, type, isSynchronous, data){...}
    
  • One method, with an options parameter:

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

这个HTTP请求的例子只是激发了这个问题,但对于任何具有不同自定义/变量的公共功能都适用。

这三个显然都同样有效。 但是什么是良好的实践?是否有遵循的标准或指南?

3个回答

3
options参数的优点在于它允许无限个选项而不会影响清晰度。当有人指定data:isSync:时,很明显正在填充哪些设置。记得将函数的第13个参数设置为false会导致混乱。

所以,在最后两个选项中,我只在以下情况下使用多个参数:(1)总共少于四个参数,(2)序列是逻辑和易于记忆的(URL,然后类型,然后数据),(3)只有一个(最后一个)是可选的。无论如何,这是一个经验法则。

多个方法与参数化如何选择?仅当可能性较少(GET vs. POST,UseDefaults vs. DontUseDefaults等)时,才使用多个方法。考虑一下,我可能仅在以下情况下设置单独的方法:

  1. 区别非常重要(同步请求的行为与异步请求有根本的不同,并且我希望开发人员有意识地选择要应用的行为。 (相比之下,GET vs. POST只是您请求的另一个属性——如果您做错了,它不是一个终极、决定性的决策。)

  2. 没有其他选项需要设置。如果我首先要记住是否调用foo.get()或foo.post()然后再记住填写options对象,我只是强迫您在两个不同的地方做决策。我宁愿所有的设置都在一个地方。


1

显然,如果您使用多种方法,则需要具有某种抽象的超级方法进行调用,否则您将重复自己,这被认为是不好的,但有时候具有此类方法作为别名或简写非常不错(例如查看 jQuery $.getJSON() 修改后的 $.ajax()-Call)。

如果您有很多特例或可选参数,则具有更多参数的一个方法并不是真正灵活的,因此您会像在第三个示例中提到的那样使用选项对象。

这实际上取决于使用情况和所需的灵活性/可重用性。就我个人而言,我总是会选择使用带有选项参数的一个方法的方法。


1
怎么样使用具有JSON选项的“超级方法”以获得最大的灵活性,然后再使用更严格定义参数的包装器方法来轻松访问最常用的功能呢?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接