在系统之间(业务级别)讨论API时,我们团队中通常有两种不同的观点:有些人更喜欢(可以说)通用抽象方法,而另一些则是直截了当的“具体”方法。
示例:设计一个简单的“人员搜索” API。具体的版本是
searchPerson(String name, boolean soundEx,
String firstName, boolean soundEx,
String dateOfBirth)
支持具体版本的人说:
- API是自我记录的
- 很容易理解
- 易于验证(编译器或作为Web服务:模式验证)
- 吻
我们团队中的另一组人会说“那只是搜索条件列表”
searchPerson(List<SearchCriteria> criteria)
与
SearchCritera {
String parameter,
String value,
Map<String, String> options
}
可能使某些枚举类型的“参数”。
支持者说:
- 在不更改API(声明)的情况下,实现可以更改,例如添加更多条件或更多选项。即使在部署时也没有同步这样的更改。
- 即使使用具体的变体,也需要文档
- 模式验证被高估了,通常您需要进一步验证,模式无法处理所有情况
- 我们已经有一个与其他系统类似的API-重用
相反的论点是
- 有关有效参数和有效参数组合的大量文档
- 需要更多的沟通工作,因为其他团队更难以理解
有没有最佳做法?文献?