Java的API设计实践(2)
在OSGi环境中,可以添加和删除模块,因此可以适应这种动态的API设计非常重要。该 OSGi Declarative Services specification 定义了OSGi的依赖注入模型,它支持这些动态,包括注入对象的撤销。 针对provider和consumer划分API如简介中所述,API包的客户端有两个角色:API consumer和API provider。 API consumer使用API,API provider实现API。对于API中的接口(和抽象类)类型,重要的是API设计清楚地记录哪些类型仅由API provider实现,而API consumer不可以实现。为了方便记忆,我们把API provider需要实现的部分记为P,把API consumer需要实现的部分记为C。例如,侦听器接口通常由API consumer实现,并且实例传递给API provider。 API provider对API 中P部分和C部分更改都很敏感。API provider必须实现API中P部分的类型的任何新更改,并且必须了解C部分的任何新更改。 API consumer通常可以忽略API中P部分的更改,除非它想要更改以调用新函数。但API consumer对API中C部分的更改很敏感,可能需要修改才能实现新功能。例如,在javax.servlet package, ServletContext由API provider(如servlet容器)实现。为ServletContext添加新方法将要求更新所有API provider以实现新方法,但API consumer不必更改,除非他们希望调用新方法。然而Servlet由API consumer实现,为Servlet添加新方法将要求修改所有API consumer以实现新方法,并且还需要修改所有API provider以使用新方法。就这样ServletContext类似于API的P部分,Servlet类似于API中C部分。 由于通常有许多API consumer和很少的API provider,因此在考虑更改API 中C部分时,API演变必须非常小心。这是因为,您需要更改少数API provider以支持更新的API,但您不希望在更新API时更改许多现有API consumer。 API consumer只需要在API consumer想要利用新API时进行更改。 Conclusion下次设计API时,请考虑这些API设计实践。然后,您的API将可用于模块化Java和非模块化Java环境。 英文原文: https://developer.ibm.com/articles/api-design-practices-for-java 【编辑推荐】
点赞 0 (编辑:ASP站长网) |