你见过的一个相对知名的图书馆最丑陋的API,以及为什么以及如何改进?

mP.*_*mP. 7 coding-style code-readability

我一直在研究Lucene 2.9特别是重做令牌流API之间的差异,它只是发生在我身上它特别难看,相比旧的只是返回一个新的或重新填充给定的值,如果你重用说Token.

我没有做任何分析,但似乎使用MAP来存储属性并不是那么有效,并且更容易创建一个包含值等的新值类型.TokenStream和Attribute的东西看起来像对象池,这几乎是不必要的这些天来,对于简单的值类型,如文本标记.

Vla*_*ged 10

科瑞()

当Ken Thompson和Dennis Ritchie在各自的接受演讲之后获得1983年图灵奖时,观众中的某个人问Ken,如果他再次这样做,他会对Unix做些什么.他说,"我用'e'拼写'creat'."

  • 我想说"LOL",但是没有15个字符. (2认同)

Met*_*urf 7

Livelink(OpenText)API

  • 一切都以一些奇怪的锯齿状阵列形式回归
  • 该文档绝对没有提供任何示例
  • [您最喜欢的搜索引擎]通常不会返回给定API方法的结果
  • 支持论坛感到被遗弃
  • 理解结果数据的唯一可靠方法是在Livelink调试器中运行数据
  • 最后......系统花费数十(数百)美元

我办公桌旁边的墙上印有我的印记......

从API方法中获取值的一个非常简单的示例:

var workflow = new LAPI_Workflow(CurrentSession);

// every Livelink method uses an out variable
LLValue outValue;
// every method returns an integer that says if the call was
// a success or not, where 0 = success and any other integer
// is a failure... oh yeah, there is no reference to what any
// of the failure values mean, you have to create your own
// error dictionary.
int result = workflow.ListWorkTasks(workId, subWorkId, taskId, outValue);


if (result = 0)
{
  // and now let's traverse through at least 3 different arrays!
  string taskName = outValue.toValue(0).toValue("TASKS").toValue(0).toString("TaskName");
}
Run Code Online (Sandbox Code Playgroud)

Aaack!:d


Kal*_*see 5

我从未成为java.sql包的粉丝......

  1. 您必须捕获所有内容的已检查异常,并且只有一个例外,因此如果不检查SQL代码字符串,它实际上并未表明出现了什么问题.
  2. 除此之外,您必须使用java.sql.Date而不是java.util.Data,因此您始终必须为其中一个指定完整包.更不用说两者之间必须进行的转换.
  3. 然后是参数索引,它是1-base-indexed而不是Java的其余部分,它是0-base-indexed.

总而言之,这是一个非常讨厌的图书馆.值得庆幸的是,Spring库确实使它更容易使用.