有没有人以这种方式设计api或库代码?

问题描述:

我正在读一些关于如何设计一个图书馆或API的事情,并偶然发现Joshua Bloch在Google Tech Talks上的精彩演讲。现在,尽管我离专业的API开发人员不远,但我认为编程一大堆类/函数是类似的,尽管缩小了版本的相同内容 - 清晰分离的动作,简单和愉快的使用,鼓励干净的代码等有没有人以这种方式设计api或库代码?

我会通过一些广泛使用的开源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种方法,每种方法不超过5-6行代码。这显然只是一组粗略的数字来显示要设计的类的大小 - 无处不接近完整的API而不仅仅是一个业余爱好项目 - 一个专业的包,虽然做得很小,但做得很好

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

我认为一个真正的好处是它强迫你写下你的用例第一

的另一件事是,名词和动词保持简单,使您的最终产品躲闪MultiPhraseAbstractParadigmDesignPatternImplementor综合征:-D

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

这是一个非常方便和可读的习惯用法,但请记住,通常会有一些时候您实际上想要在单个函数调用中初始化多个变量。例如,当根据数据组合设置内部状态时,或者设置和覆盖默认值的代价很高时。因此,与所有“模式”一样,谨慎地使用和慎重使用。

是的,这是jQuery的设计,它总是结束的方式自动返回,这样你可以链接这样的方法。

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

虽然我真的很喜欢巨大的白板素描。

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() 
     } 
    } 
};