背景:
我在大学上一门名为“软件约束”的课程。在前几节课中,我们学习了如何构建良好的API。
一个非常糟糕的API函数的好例子是C#中的socket public static void Select(IList checkRead, IList checkWrite, IList checkError, int microseconds);
。该函数接收3个套接字列表,并破坏它们,使用户必须在将它们馈送到Select()
之前克隆所有套接字。它还有一个超时(以微秒为单位),它是一个int,设置服务器等待套接字的最长时间。这个值的限制是+/- 35分钟(因为它是int类型)。
问题:
- 你如何定义一个API是“糟糕”的?
- 你如何定义一个API是“好”的?
需要考虑的要点:
- 函数名称很难记住。
- 函数参数难以理解。
- 文档不好。
- 所有东西都是如此相互关联,如果你需要更改1行代码,实际上你需要在其他地方更改数百行。
- 函数破坏它们的参数。
- 由于“隐藏”的复杂性,可扩展性差。
- 用户/开发人员需要构建包装器来使用API。