在定义客户可访问的 API 时,以下之间的首选行业实践是什么:
a)定义一组显式API 方法,每个方法都有一个非常狭窄和特定的目的,例如:
SetUserName <name>
SetUserAge <age>
SetUserAddress <address>
b)定义一组更通用的基于参数的 API 方法,例如:
SetUserAttribute <attribute>
enum attribute {
name,
age,
address
}
我的意见:
赞成(一)
对于基于布尔值的方法(例如 EnableFoo),我肯定会支持选项 (a),因为其意图更加清晰,将来需要扩展的可能性较小,并且它使代码更具可读性。
例如,一个名为 EnableDisableFoo 的方法接受一个布尔参数来指示是启用还是禁用,这将不是很清楚,也没有凝聚力的目的。
这是有多种选择的地方,问题变得更加复杂。
赞成(b)
选项 (b) 是在 API 中提供可扩展性的好方法,但会牺牲可用性。使用选项 (a),API 方法名称本身提供了足够的信息来指示它正在做什么。使用选项 (b),用户必须查找方法名称和要使用的适当枚举/参数。理论上,从可用性的角度来看,这会使选项 (b) 变得更糟——但也许使用较少的方法是一件好事,所以即使这也不完全正确。
其他想法
有必要在可用性和可扩展性之间取得良好的平衡,而且它们之间经常存在矛盾。但我想有一种更客观的方法来分析这一点,而不是依赖 API 设计者的意见。
有人对此有任何想法吗?