关于API设计的tricky的地方与pitfalls

今天看项目中的一段代码,看完之后我对原来的程序员真是抓狂了,代码实在是ugly到了极点。本身那个类继承自ArrayList,姑且不说这种做法多么的ugly,因为实际上通过组合也能达到同样的目的,并且我一直很反感去修改类库的一些代码。继承本身没有错,继承类库的类也没错,错就错实现的代码实在太复杂,本来很简单的一件事情,却搞的超级复杂。

举个例子:
ArrayList中有add(E e) 与add(int index, E element) ,正常的行为是list中加入element对应的元素(是该元素本身),但是现在的程序员重写之后变成第一个只加入element本身,而第二个是加入element里的所有元素(element本身又是一个ArrayList)。姑且不说会不会引起bug,光是这种定义API形式,我觉得实在就够ugly。


当前软件的一个bug有一部分是在于api的bug,即某函数调用了另外一个函数,你以为它确实调用了这个函数,并且即使你调用了你希望调用的函数,并且你期望该函数做了期望做的事情,实际上该函数做的事与你期望的并不相同。

api中的这种也表多。

我觉得好的api设计应该是尽量去避免这种情况。当然自从java引入了泛型之后事情就变得复杂了。但泛型引起的api这种陷阱只是一方面。



你可能感兴趣的:(api)