2

我正在阅读一些关于如何很好地设计库或 API 的内容,并偶然发现了 Joshua Bloch 在 Google Tech Talks 上的精彩演讲。现在,虽然我离专业的 API 开发人员还差得很远,但我认为编写一堆类/函数是相似的,尽管同一件事的缩小版 - 动作的明确分离,易用性和令人愉悦的使用,鼓励干净的代码, ETC。

我正在浏览一些广泛使用的开源 Java 代码并得到了这个想法(没有什么新东西,只是把它清楚地提出来......)

让我们举一个伪代码示例(或者可能是 BASIC 的一些方言):

1. new label
2. set name 'hello world'
3. set color 'blue'
4. show 'topmost'
5. on click hide

现在受到 Java 代码的启发,我希望能够做这样的事情

1. Label l = new Label()
2.          .setName('Hello World')
3.          .setColor('blue')
4.          .show(zindex.top);
5. l.onClick = l.hide() ;

我的问题是:
还有其他人从这样的伪代码开始设计 API 吗?

小东西是个好主意吗?说最多 10 个类,每个类可能有 10 个方法,每个方法里面的代码不超过 5-6 行。这显然只是一组粗略的数字来显示要设计的类的大小 - 远不及完整的 API,而不仅仅是一个爱好项目 -一个专业的包,做一些小事但做得很好

有没有人发现这种方法有任何严重的缺点?

我认为一个真正的好处是它迫使你首先写下你的用例

另一件事是名词和动词保持简单,使您的最终产品能够避开MultiPhraseAbstractParadigmDesignPatternImplementor综合症:-D

4

4 回答 4

3

这是一种相当常见的设计模式,称为fluent interface。它在函数式语言中很常见,并且在其他地方越来越受欢迎。我第一次看到它是在 Scheme 中。

这是一个非常方便且易读的习惯用法,但请记住,有时您实际上确实希望在单个函数调用中初始化多个变量。例如,当必须根据数据组合设置内部状态时,或者当设置和覆盖默认值代价高昂时。因此,与所有“模式”一样,请谨慎且深谋远虑地使用。

于 2010-01-22T19:52:51.320 回答
1

Jquery 正是这样做的。来自http://net.tutsplus.com/tutorials/javascript-ajax/jquery-1-4-released-the-15-new-features-you-must-know/

jQuery('<div/>', {  
    id: 'foo',  
    css: {  
        fontWeight: 700,  
        color: 'green'  
    },  
    click: function(){  
        alert('Foo has been clicked!');  
    }  
}); 

或对于 1.4 之前的版本:

jQuery('<div/>')  
   .attr('id', 'foo')  
   .css({  
       fontWeight: 700,  
       color: 'green'  
   })  
   .click(function(){  
       alert('Foo has been clicked!');  
   });  

我也在 C# 中用代码生成 WPF 做过类似的事情:

new StackPanel {
   Children = {
      new TextBlock { Text = "Hi there", Width = 50 },
      new TextBox { Width = 100 },
      new Border { 
          Content = new ListBox()
      }
   }
};
于 2010-01-22T20:46:10.380 回答
0

是的,这就是 jQuery 的设计方式,它总是最终返回自己,以便您可以像这样链接方法。

于 2010-01-22T19:42:22.330 回答
0

我倾向于从空的类和方法开始。这确实是自上而下与自下而上设计的问题。

不过,我真的更喜欢巨大的白板草图。

于 2010-01-22T19:45:14.173 回答