7

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

这三个显然都具有同样的功能。但是什么是好的做法?是否有倾向于遵循的标准或指导方针?

4

3 回答 3

2

options参数的优点是它允许在不牺牲清晰度的情况下进行无限的选择。当有人指定data:isSync:很明显正在填写哪些设置时。记住将函数中的第 13 个参数设置false为会造成混淆。

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

多种方法与参数化如何?仅当您有少量可能性(GET 与 POST、UseDefaults 与 DontUseDefaults 或其他)时,才可以选择多种方法。考虑一下,我可能只在以下情况下设置单独的方法:

  1. 区别非常重要(同步请求的行为与异步请求根本不同,我希望开发人员有意识地选择要应用的请求。(相比之下,GET 与 POST 只是您请求的另一个属性——它不是全部,如果你做错了,就会做出破坏交易的决定。)

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

于 2012-07-12T17:47:16.377 回答
1

显然,对于多种方法,您需要调用某种抽象的超方法,否则您会重复自己,这被认为是不好的,但是有时使用别名或速记之类的方法会很好(参见 ie jQuery$.getJSON()用于修改后的$.ajax()-Call)

如果您有很多特殊情况或可选参数,则具有更多参数的一种方法并不是很灵活,因为您将使用第三个示例中提到的选项对象。

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

于 2012-07-12T17:45:11.720 回答
1

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

于 2012-07-12T17:48:00.167 回答