我正在阅读有关如何设计图书馆或API的一些事情,并偶然发现了Joshua Bloch在Google Tech Talks上的精彩演讲。现在虽然我离专业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个方法说最多10个类,每个方法里面不超过5-6行代码。这显然只是一组粗略的数字来显示要设计的类的大小 - 无论是接近完整的API而不仅仅是一个爱好项目 - 一个专业的软件包,可以做一些小而且做得很好的
有没有人发现这种方法有任何严重的缺点?
我认为一个真正的好处是强迫您先写下您的用例。
另一件事是名词和动词保持简单,使你的最终产品能够躲避 MultiPhraseAbstractParadigmDesignPatternImplementor 综合症:-D
答案 0 :(得分:3)
这是一种相当常见的设计模式,称为fluent interface。它在函数式语言中很常见,并且在其他地方越来越受欢迎。我第一次在Scheme中看到它。
这是一个非常方便和可读的习惯用法,但请记住,在一次函数调用中,实际上通常会想要初始化多个变量。例如,当必须根据数据组合设置内部状态时,或者设置和覆盖默认值的代价很高时。因此,正如所有“模式”一样,谨慎使用并且经过深思熟虑。
答案 1 :(得分: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()
}
}
};
答案 2 :(得分:0)
是的,这就是jQuery的设计方式,它总是最终返回自己,这样你就可以链接这样的方法。
答案 3 :(得分:0)
我倾向于从空类和方法开始。这真的是自上而下与自下而上设计的问题。
我真的更喜欢巨大的白板素描。