精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java的API設計實踐

新聞 前端
了解在設計Java API時應該應用的一些API設計實踐。通常,這些實踐很有用,并確保API可以在模塊化環境中正確使用,例如OSGi和Java平臺模塊系統(JPMS)。

 [[255993]]

Introduction

了解在設計Java API時應該應用的一些API設計實踐。通常,這些實踐很有用,并確保API可以在模塊化環境中正確使用,例如OSGi和Java平臺模塊系統(JPMS)。有些做法是規定性的,有些則是禁止性的。當然,其他良好的API設計實踐也適用。

OSGi環境使用Java類加載器概念提供模塊化運行時強制類型可見性( visibility )的封裝。每個模塊都有自己的類加載器,它會被連接到其他模塊的類加載器,以此來共享導出的包并使用導入的包。

Java 9引入了JPMS,它是一個模塊化平臺,使用了Java語言規范中的 access control 概念來強制執行類型的可達性( accessibility )的 封裝。每個模塊定義導出哪些包,因此可由其他模塊訪問。默認情況下,JMPS層中的模塊都駐留在同一個類加載器中。

包可以包含API。API包有兩種角色: API consumers and API providers 

在以下設計實踐中,我們將討論包的公共部分。程序包中非public或非protected的成員和類型,在程序包之外是不可訪問的,因此它們是程序包的實現細節。

Java包必須是一個內聚,穩定的單元

必須設計Java包以確保它是一個內聚、穩定的單元。在模塊化Java中,包是模塊之間的共享實體。一個模塊可以導出包,以便其他模塊可以使用該包。由于包是模塊之間共享的單元,因此包必須具有內聚性,因為包中的所有類型都必須與包的特定用途相關。像java.util這樣的包是不鼓勵的,因為這種包中的類型通常彼此沒有關系。這樣的非內聚的包可能導致許多依賴性問題,因為包的不相關部分引用其他不相關的包,并且修改包的一個部分會影響依賴這個包的所有模塊,即使模塊實際上可能不使用被修改的這部分。

由于包是單元共享,因此其內容必須是眾所周知的,并且包含的API僅在兼容方式中隨著包在未來版本的發展而變化。這意味著包不能支持API超集或子集;例如,javax.transaction就是一個內容不穩定的包。包的用戶必須能夠知道包中哪些類型是可用的。這也意味著包應該由單個實體(例如,jar文件)提供,而不是跨多個實體分開,因為包的用戶必須知道整個包的存在。

此外,包必須以一種兼容的方式發展。因此,應該對包進行版本控制,并且其版本號必須根據semantic versioning 規則進行演變。

但最近我意識到包的主要版本更改的語義版本控制建議是錯誤的。包演變必須是功能的增加。在語義版本控制中,這增加了次要版本。當您刪除功能時,即對包進行不兼容的更改,您必須移動到新的包名稱,使原始包仍然兼容。要了解為什么這很重要且必要,請參閱本文 Semantic Import Versioning for Go 。這兩種情況都適用于在對包進行不兼容的更改時轉移到新包名而不是更改主要版本的情況。

包間耦合最小化

包中的類型可以引用其他包中的類型。例如,方法的參數類型和返回類型以及字段的類型都可能引用其他包的類型。這種包間耦合創造了所謂的包與包之間的 uses關系 。這意味著API consumer必須使用與API provider相同的引用包,以便他們理解引用的類型。

通常,我們希望最小化包間耦合以最小化對包的使用約束。這簡化了OSGi環境中的布線分辨率,并***限度地減少了依賴扇出,簡化了部署(This simplifies wiring resolution in the OSGi environment and minimizes dependency fan-out simplifying deployment)。

接口比類更受歡迎

對于API,接口比類更受歡迎。這是一種相當常見的API設計實踐,對模塊化Java也很重要。對接口的實現很自由,一個接口可以有多個實現。接口對于將API consumer與API provider分離是很重要的。它使得一個包含API的包,既可以被API consumer使用,也可以被API provider使用。通過這種方式,API consumer與API provider沒有直接的依賴關系。它們都只依賴于API包。

抽象類有時是一種有效的設計選擇,但通常接口是***,特別是考慮到最近接口添加了default  methods這一改進.

***,API通常需要許多小的具體類,例如事件類型和異常類型。這很好,但類型通常應該是不可變的,不適合API使用者進行子類化。

避免 statics

應該在API中避免使用靜態。類型不應該有靜態成員。應避免使用靜態工廠。應該將實例創建與API分離。例如,API consumer應該通過依賴注入或對象注冊表(如OSGi服務注冊表或者JPMS的java.util.ServiceLoader)來接收API類型的對象實例.

避免靜態也是制作可測試API的好方法,因為靜態不容易被模擬。

Singletons

有時在API設計中有單例對象。但是,對單例對象的訪問不應該像靜態一樣通過靜態getInstance方法或靜態字段來訪問。當需要單個對象時,該對象應該由API定義為單例,并通過依賴注入或如上所述的對象注冊表提供給API consumer。

避免類加載器假設

API通常具有可擴展性機制,API consumer可以提供API provider必須加載的類的名稱。API provider然后必須使用Class.forName(可能使用的是線程上下文類加載器)來加載類。這種機制保證了從API provider(或線程上下文類加載器)到API consumer的類可見性。 API設計必須避免類加載器假設。模塊化的一個要點是類型封裝。一個模塊(例如,API provider)必須不具有對另一個模塊(例如,API consumer)的實現細節的可見性/可訪問性。

API設計必須避免在API consumer和API provider之間傳遞類名,并且必須避免關于類加載器層次結構和類型可見性/可訪問性的假設。為了提供可擴展性模型,API設計應該讓API consumer將類對象或更好的實例對象傳遞給API provider。這可以通過API中的方法或通過對象注冊表(例如OSGi服務注冊表)來完成。見 whiteboard pattern .

java.util.ServiceLoader類,當在JPMS模塊中沒有使用時,也會受到類加載器假設的影響,因為它假定所有提供者都可以從線程上下文類加載器或提供的類加載器中看到。雖然JPMS允許模塊聲明聲明模塊提供或使用ServiceLoader managed service,但在模塊化環境中通常不會出現這種假設 .

不要假設***性

許多API設計只假設一個構造階段,其中對象被實例化并添加到API中,但忽略了在動態系統中可能發生的破壞階段。 API設計應該考慮對象可以來,他們可以去。例如,大多數listener API允許添加和刪除listener。但是許多API設計只假設添加了對象并且從未刪除過。例如,許多依賴注入系統無法撤回注入的對象。

在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

責任編輯:張燕妮 來源: 銀河系技術博客
相關推薦

2016-12-27 08:49:55

API設計策略

2022-02-10 23:38:23

API架構設計

2013-06-13 09:21:31

RESTful APIRESTfulAPI

2021-08-09 11:35:40

設計實踐應用

2024-01-11 11:25:22

2024-08-26 15:35:40

2020-04-22 09:00:00

REST API參數化前端

2012-02-09 09:08:41

Java

2023-05-04 16:08:43

2017-06-19 14:21:01

JavaScriptAPI設計原則

2022-03-29 10:04:44

APIHarmony文件管理

2024-01-15 08:00:00

開發API文檔集成

2018-12-04 09:00:00

API安全性令牌

2025-02-28 10:10:48

2023-11-30 09:18:27

2016-12-30 14:47:21

設計RESTfulAPI

2025-03-12 10:29:16

2017-03-13 14:09:19

RESTful API實踐

2023-11-07 07:08:57

2023-04-14 12:23:15

點贊
收藏

51CTO技術棧公眾號

亚洲av色香蕉一区二区三区| 欧美成人午夜精品免费| 欧美videos另类精品| 国产伦理精品不卡| 1024成人网| 91久久国产精品| 久久久美女视频| 日本妇女一区| 亚洲人亚洲人成电影网站色| 成人欧美一区二区| 一级片中文字幕| 欧美日韩国产高清电影| 欧美日韩国产区一| 国产乱淫av片杨贵妃| 欧美美女色图| 国产乱子伦一区二区三区国色天香| 自拍视频国产精品| 一级全黄裸体片| 成人美女大片| 亚洲女女做受ⅹxx高潮| 92看片淫黄大片看国产片| 久久久久久国产精品免费播放| 国产毛片久久久| 欧美影院精品一区| 国产成人在线小视频| 国际av在线| 国产盗摄精品一区二区三区在线 | 欧美视频xxx| 美女尤物久久精品| 蜜臀久久99精品久久久久久宅男| 国产人妻精品午夜福利免费| 黑人巨大精品欧美一区二区桃花岛| 国产精品人妖ts系列视频| 成人91免费视频| 亚洲精品91天天久久人人| 91麻豆国产自产在线观看亚洲| 精品裸体舞一区二区三区| 激情 小说 亚洲 图片: 伦| 美女精品导航| xxxwww在线观看| 国产美女精品视频免费播放软件| 午夜精品免费在线观看| 色综合电影网| 亚洲日本在线播放| 国产一区二区三区精品欧美日韩一区二区三区 | 成人综合婷婷国产精品久久蜜臀| 国产成人精品在线观看| 久久精品国产亚洲av高清色欲| 欧美理论视频| 亚洲国产精品久久久久秋霞蜜臀 | 欧美国产高潮xxxx1819| 中文字幕不卡av| 最近中文字幕无免费| 免费观看在线一区二区三区| 在线看国产一区| 成年人视频网站免费观看| 污网站在线免费看| 亚洲色图欧洲色图婷婷| 色狠狠久久av五月综合|| 天堂在线中文字幕| 成人免费va视频| 亚洲一区二区三区xxx视频| 中文字幕一区二区三区人妻四季 | 999在线免费视频| 亚洲涩涩在线| 懂色aⅴ精品一区二区三区蜜月| 免费网站在线观看视频| 污影院在线观看| 一区二区三区色| 97在线免费视频观看| 在线三级电影| 亚洲国产婷婷综合在线精品| 日韩不卡视频一区二区| 人人澡人人添人人爽一区二区| 亚洲摸摸操操av| 五月天激情图片| 中文字幕中文字幕在线中高清免费版 | 欧美激情极品视频| 日韩黄色三级视频| silk一区二区三区精品视频| 91精品在线免费观看| 极品粉嫩美女露脸啪啪| 国产成人视屏| 日韩欧美国产综合在线一区二区三区| 亚洲一二三不卡| 麻豆精品久久| 亚洲第一视频网| 久久久久中文字幕亚洲精品| 国产成人在线中文字幕| 精品爽片免费看久久| 黄色aaa视频| 成人黄色小视频| 日韩视频一区在线| 久久久久无码精品国产| 亚洲人成毛片在线播放女女| 55夜色66夜色国产精品视频| 伊人成年综合网| 精品一区二区免费| 电影午夜精品一区二区三区| 黄色三级网站在线观看| 久久久久亚洲蜜桃| 日韩亚洲不卡在线| 国产激情在线视频| 欧美日韩国产中文字幕| 欧美黄色一级片视频| 四虎精品一区二区免费| 日韩小视频在线观看专区| 精品人妻在线视频| 欧美精品一二| 色中色综合影院手机版在线观看| 久久久久久久久久免费视频| 日韩高清在线一区| av蓝导航精品导航| www亚洲人| 性做久久久久久久免费看| 欧美视频免费播放| 欧美一区二区三区婷婷| 亚洲国产91精品在线观看| 免费看日本黄色片| 综合国产在线| 国产mv久久久| 亚洲黄色精品视频| 国产精品视频观看| 国产精品333| 亚洲一区二区电影| 国产亚洲福利一区| 精品一区免费观看| 久久超级碰视频| 欧美不卡1区2区3区| 日本大片在线播放| 欧美日韩mp4| 亚洲第一成人网站| 亚洲第一网站| 国产精品一区二区三区久久| 少妇荡乳情欲办公室456视频| 蜜桃av综合| 国产成人在线播放| 日本一级在线观看| 亚欧色一区w666天堂| 激情成人在线观看| 色一区二区三区四区| 欧美中文字幕在线| 天天综合网天天综合| 中文字幕一区二| www.com操| 激情五月色综合国产精品| 69精品小视频| 丰满肥臀噗嗤啊x99av| 亚洲欧美另类小说| 手机免费av片| 欧美高清在线| 国产精品国语对白| 黄色在线视频观看网站| 午夜国产不卡在线观看视频| 天堂网成人在线| 99久精品视频在线观看视频| 97香蕉超级碰碰久久免费的优势| a级片在线免费看| 国产精品美女久久久久av爽李琼 | 亚洲综合不卡| 国产精华一区| 草草影院在线| 欧美一级日韩不卡播放免费| 亚洲一级二级片| 精品一区二区三区不卡| 国产精品一区在线免费观看| 免费欧美网站| 日韩在线视频二区| 91 中文字幕| 综合中文字幕亚洲| 国产精品igao网网址不卡| 亚洲欧美综合久久久| 亚洲aⅴ日韩av电影在线观看 | 免费观看成人性生生活片| 国产性色av一区二区| 伊人手机在线视频| 久久色在线观看| 校园春色 亚洲色图| 成人亚洲一区| 91日韩在线视频| 亚洲精品白浆| 亚洲国产成人精品一区二区| 亚洲精品国产精品乱码| 91浏览器在线视频| 日本新janpanese乱熟| 色琪琪久久se色| 91亚洲精品久久久| 91福利区在线观看| 亚洲欧美精品一区二区| 在线观看国产一区二区三区| 亚洲三级电影网站| 年下总裁被打光屁股sp| 亚洲中字黄色| 亚洲一卡二卡三卡| 大伊香蕉精品在线品播放| 亚洲在线久久| 亚洲aⅴ日韩av电影在线观看| 日韩大片在线永久免费观看网站| 欧美日本韩国一区| 久青草免费视频| 国产人久久人人人人爽| 国产精品999.| 丝袜诱惑制服诱惑色一区在线观看| 香蕉久久夜色| 日韩高清在线观看一区二区| 97在线看福利| av在线麻豆| 伊人亚洲福利一区二区三区| 亚洲免费不卡视频| 欧美嫩在线观看| 在线精品免费视| 亚洲综合在线视频| 国产一级淫片久久久片a级| 99精品在线观看视频| 亚洲娇小娇小娇小| 噜噜噜久久亚洲精品国产品小说| 大桥未久一区二区三区| 伊人久久大香线蕉无限次| 操一操视频一区| 日日夜夜综合| 国产精品久久久久久久久久久久久| 精精国产xxxx视频在线中文版| 尤物yw午夜国产精品视频明星 | 国产精品免费人成网站| 中文文字幕文字幕高清| 黄色精品一二区| 国产精品视频分类| 美女国产精品| 亚洲熟妇av一区二区三区漫画| 国内精品久久久久久久97牛牛| 欧美日韩一级在线| 色小子综合网| 五月天色一区| 日本电影一区二区| 日韩欧美视频第二区| 伊人久久大香线蕉| 欧美大香线蕉线伊人久久| 欧美91在线| 精品乱子伦一区二区三区| 高清精品视频| 国产麻豆日韩| 久久精品论坛| 精品欧美国产| 自拍偷拍一区| 日本视频一区二区不卡| 国产永久精品大片wwwapp| 日韩电影免费观看高清完整| 久久综合影院| 色99中文字幕| 日韩在线高清| 国产又大又长又粗又黄| 国产精品国产一区| 亚洲AV无码成人精品一区| 亚洲精品a级片| 好吊色视频988gao在线观看| 你懂的一区二区| 欧美一二三不卡| 亚洲高清免费| 国内外成人免费激情视频| 久久久久久夜| 亚洲久久中文字幕| 国产在线播精品第三| 日本成人在线免费观看| 成人av免费在线播放| av无码av天天av天天爽| 久久久99精品免费观看| 日韩欧美黄色网址| 中文字幕中文乱码欧美一区二区 | 一区二区三区 欧美| 久久av资源站| 97中文字幕在线观看| 91欧美激情一区二区三区成人| 国产一二三四五区| 国产精品成人免费在线| 精品无码人妻一区二区三区| 日韩欧美国产视频| 一区二区视频免费观看| 日韩欧美的一区二区| 无码国产精品96久久久久| 亚洲视频在线免费观看| av中文字幕在线观看| 91禁外国网站| 亚洲我射av| 精品卡一卡二| 国产大片一区| 国产真人做爰毛片视频直播| 视频一区二区中文字幕| 涩多多在线观看| 97久久精品人人爽人人爽蜜臀 | 精品久久视频| 日韩一级免费看| 青青草国产成人av片免费| 成人做爰69片免费| 欧美激情在线一区二区| 国产一级在线免费观看| 欧美日本在线看| 午夜影院免费体验区| 久久夜色精品国产| 日韩性xxx| 国产精品裸体一区二区三区| 日本一区二区高清不卡| 人妻无码久久一区二区三区免费| 日韩不卡一二三区| 日韩www视频| 亚洲另类在线视频| 最近中文字幕在线观看视频| 亚洲精品国精品久久99热| 黄网址在线观看| 日本免费在线精品| 大型av综合网站| 佐佐木明希av| 蜜桃精品在线观看| 波多野结衣av在线免费观看| 一区二区视频免费在线观看| 最近国语视频在线观看免费播放| 亚洲精品aⅴ中文字幕乱码| 羞羞视频在线免费国产| 国产玖玖精品视频| 国产中文精品久高清在线不| 日本福利视频一区| 国产伦精品一区二区三区免费迷 | 手机av免费在线观看| 欧美精品中文字幕一区| 国产极品一区| 亚洲成人自拍视频| 日韩电影一区二区三区| 日本黄色特级片| 精品久久久久久久中文字幕| 亚洲成人77777| 欧美另类极品videosbest最新版本 | 日本成人中文字幕在线| 91视频91自| 日本在线视频免费| 亚洲国产精品一区二区三区| 牛牛精品在线| 亚洲一区美女视频在线观看免费| 97在线精品| 一级做a免费视频| 中文字幕视频一区| 夜夜躁狠狠躁日日躁av| 中文字幕亚洲在线| 欧美成人福利| 中国成人亚色综合网站| 精品亚洲成a人| 性欧美videos| 日韩欧美一级精品久久| 肉肉视频在线观看| 国产精品入口免费| 日韩午夜黄色| 91成年人网站| 欧美午夜精品一区二区三区| 五月婷婷在线视频| 成人性生交xxxxx网站| 欧美片第1页综合| 男人的天堂影院| 色综合一个色综合| 91se在线| 91中文字精品一区二区| 亚洲看片一区| 欧美人妻一区二区三区| 精品视频在线免费观看| 高清全集视频免费在线| 成人91免费视频| 免费日韩av| 最新av电影网站| 精品嫩草影院久久| 久九九久频精品短视频| 亚洲欧洲精品在线| 国产成人小视频| 4438国产精品一区二区| 日韩在线视频线视频免费网站| 国语精品视频| 黄色影院一级片| 国产精品伦一区| 国产77777| 国产精品国产亚洲伊人久久| 亚洲综合色站| 国产精品无码网站| 欧美乱熟臀69xxxxxx| segui88久久综合9999| 日韩国产在线一区| 国产成人免费xxxxxxxx| 99久久久久久久久| 久久久精品国产一区二区| 狠狠一区二区三区| 9久久婷婷国产综合精品性色| 亚洲精品水蜜桃| 久草福利在线视频| 亚洲综合第一页| 米奇777在线欧美播放| 欧美日韩在线观看成人| 亚洲图中文字幕| 澳门成人av| 日本高清久久久| 疯狂蹂躏欧美一区二区精品| 免费黄网站在线播放| 久久精品国产综合精品| 国产乱人伦偷精品视频不卡 | 黄污视频在线观看| 亚洲永久激情精品|