有没有人以这种方式设计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()
}
}
};