如何區分能力和功能

640?wx_fmt=jpeg

在我們日常的研發流程中,需要定義接口提供給調用方,實際設計時,工程師們卻很容易把接口當作暴露功能的方式,而卻忽略接口應該是服務提供方能力的體現。


 換個說法,就是錯誤的理解了抽象這件事:僅僅把接口當成未來可以替換實現類的腳手架,而沒有把它作爲程序設計的基礎。


大家翻開JDK的源碼,看看jdk的api會發現大部分接口都是able結尾的,表示這是一種能力。比如駕駛汽車,只有人類具有,那麼可以抽象成接口,接口表述的是一種組合關係,具有更強的擴展性,接口是一種能力的描述,能做什麼,是一組功能或者方法的集合。


 舉個例子,差的工程師會設計一個帶有“開燈”,“關燈”功能的接口,期望調用方能根據這個接口實現出不同樣式的開關;而合格的工程師會設計出帶“開”,“關” 能力的接口:既不會過於抽象,也不會過於侷限。 好的設計應該由接口規劃骨架之後,依靠實現填充血肉。過於抽象或者過於具體的接口連“骨架”的效果都達不到,更別提實現的好壞了。


接口設計應該在考慮程序結構和組件間的交互的基礎上,描述組件的能力;而不是描述已經實現的某個組件的功能。如果兩者衝突,更好的解決方案是增加適配器,而不是依照實現定義接口。


正確的API 設計一定是爲調用方賦能,賦予調用方更大的能力,在已有的基礎上創造更多的應用及場景。



描二維碼或手動搜索微信公衆號【架構棧】:ForestNotes

歡迎轉載,帶上以下二維碼即可

              640?wx_fmt=jpeg


點擊閱讀原文”,所有【架構棧】近期的架構文章彙總

↓↓↓

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章