何时使用 - 多个方法,多个参数或选项参数

时间:2012-07-12 17:36:38

标签: javascript function methods coding-style

这个问题来自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请求示例只是激发了问题,但这适用于任何面向公众的功能,具有不同数量的自定义/变量。

这三个显然都是功能性的。但是什么是好的做法?是否存在往往会遵循的标准或指南?

3 个答案:

答案 0 :(得分:2)

options参数的优点是它允许无限制的选项而不会牺牲清晰度。当有人指定data:isSync:时,显而易见的是正在填写的设置。记住将函数中的第13个参数设置为false会导致混淆。

因此,在最后两个选项之间我只使用多个参数,其中(1)总共少于四个参数,(2)序列是逻辑的并且易于记忆(URL,然后键入,然后是数据) ,和(3)不超过一个(最后一个)是可选的。无论如何,这是一个经验法则。

多种方法与参数化有何关系?当您有少量可能性(GET与POST,UseDefaults与DontUseDefaults等)时,多种方法只是一个选项。考虑到这一点,我可能只在以下情况下设置单独的方法:

  1. 区别非常重要(同步请求的行为与异步请求的根本不同,我希望开发人员有意识地选择应用哪个。(相比之下,GET与POST只是您请求的另一个属性 - 如果你做错了,这不是一个彻头彻尾的决定性决定。)

  2. 无论如何,您还没有其他选择。如果我首先要记住是否要调用foo.get()或foo.post() ,请记得填写options对象 无论如何 ,我只是强迫你在两个不同的地方做出决定。我宁愿将所有设置放在一个地方。

答案 1 :(得分:1)

显然,使用多种方法你需要有一些他们会调用的抽象超级方法,否则你会重复自己,这被认为是坏的,但有时它很好有别名或短语等方法(参见ie jQuery $.getJSON()进行修改$.ajax() - 调用)

如果您有大量的spechial-case或可选参数,那么

一个包含更多参数的方法并不是非常灵活,因为您可以使用您在第3个示例中提到的选项对象

这实际上取决于用例和所需的灵活性/可重用性。 我个人总是使用 One方法,使用选项参数方法。

答案 2 :(得分:1)

如何使用json选项获得最大灵活性的“超级方法”,然后使用更严格定义的参数的一些包装器方法,以便轻松访问最常用的功能。