什么是好的API设计?
有人言,API設(shè)計(jì)是編程工作中最難的事情。甚至有人認(rèn)為至少要有10年的工作經(jīng)驗(yàn)才能接觸它。其實(shí)通過好的培訓(xùn)或?qū)煂W(xué)習(xí)這個進(jìn)度可以縮短很多,也有這樣或那樣的時候,一些沒有經(jīng)驗(yàn)的程序員卻設(shè)計(jì)出好的API。不過這里引發(fā)出一個問題:“究竟是構(gòu)建什么樣的庫需要花費(fèi)10年的學(xué)習(xí)時間?”
在走出校門后,我很幸運(yùn)地加入到Atalasoft公司,這是一家生產(chǎn)設(shè)計(jì)API的公司。在這里我受到了嚴(yán)格的訓(xùn)練。我的導(dǎo)師Steve Hawley是一個喜歡把大部分時間都花費(fèi)在研究各種困難問題上的人,并且他會把這些問題壓縮到一個非常精美的包里。Steve沒有太多的耐心教他的下屬,他愛好刻錄光碟,在這樣的環(huán)境下,雖沒達(dá)到青出于藍(lán)而勝于藍(lán)的地步,但卻讓我學(xué)到很多。
在他的價值觀里是沒有清晰明確的聲明或者條條框框的東西,我稱為90-9-0.9。他希望90%的人僅通過剪切和粘貼幾行代碼就可以解決常規(guī)問題。下面9%的目標(biāo)是用來進(jìn)行簡單地配置,通過查看文檔以及技術(shù)支持來解決問題,甚至有些問題在幾分鐘內(nèi)就可以解決。0.9%的人會用各種亂七八糟的方式來扭曲你開發(fā)的庫,有時是因?yàn)樾阅茉?#xff0c;有時卻是利用其他一些你意想不到的古怪(但可執(zhí)行)手段。為客戶的需求犧牲0.9%是完全正常的,只要保證客戶需求可以實(shí)現(xiàn)且文檔按照要求顯示出來。
最后,還有1%的人會誤解你的產(chǎn)品能力,這些人會讓你非常不高興。忽視還是重視?最好做個市場調(diào)查,看看他們的是否值得你去擴(kuò)展庫且讓他們成為其中的一員。
Atalasoft的條形碼產(chǎn)品是一個很好的例子,在產(chǎn)品上花很多精力去仔細(xì)調(diào)優(yōu)和預(yù)處理,掃描許多文檔且沒有發(fā)現(xiàn)問題。預(yù)處理后,在許可證允許的前提下默認(rèn)會全力嘗試各種類型的條形碼。這已經(jīng)相當(dāng)快了,在這么短的時間里可以給任何人進(jìn)行掃描操作。盡管有時候會借助一些昂貴的設(shè)備給用戶進(jìn)行大規(guī)模批量化掃描,但速度還是不夠理想,所以掃描者可以修改一個簡單的枚舉屬性進(jìn)行配置。偶爾有些掃描的確很困難,比如掃描一個帶有條形碼的香蕉。對于這樣的事情,可能會讓你中斷乃至更換條形碼引擎。但是誰會拿著這樣的產(chǎn)品去讀狗身上剃出來的條形碼呢?如果你是這樣的人,建議你去尋找其他產(chǎn)品用吧!
第一次看到這種情況的時候,我認(rèn)為這樣的設(shè)計(jì)真糟糕。整個組件就像一個非常不統(tǒng)一且基于DIY(do-it-yourself)事件的插件系統(tǒng)。雖然如你所見,Atalasoft不會為一名架構(gòu)宇航員的美感進(jìn)行優(yōu)化,他們會為減輕客戶支持負(fù)擔(dān)而進(jìn)行不斷調(diào)優(yōu)。正如我不喜歡用面向?qū)ο蟮乃枷雭砭帉憙?nèi)部庫一樣,在開放一個所有級別都能操作的簡單接口上,我認(rèn)為沒有比這更好的范式。
在過去的兩年里,我一直在Bayard Rock公司負(fù)責(zé)API方面的工作,我們一直在研發(fā)一些反洗錢方面的項(xiàng)目。這意味著會做許多小型或中型實(shí)驗(yàn)項(xiàng)目并且在以后會被整合到同行大的平臺上。在大多數(shù)情況下,Atalasoft風(fēng)格的黑色裝箱(black-boxing)是起不到任何作用的。我們只有一個客戶并且我們會根據(jù)他們的需求調(diào)整我們的外部API。
然而,在一個細(xì)粒度級別中代碼重用是非常重要的,在這種情況下,最重要的是構(gòu)建大型庫,即把許多分類函數(shù)快速的組合在一起(通過簡單的組合和沒有全面的單元測試),目前,我們正在進(jìn)行優(yōu)化實(shí)驗(yàn)并且快速發(fā)展我們的組件。
那么,什么是好的API設(shè)計(jì)?其實(shí),正如Steve所言,沒有什么清晰明確的框架可套,也更沒有什么捷徑可走。我們既需要按照常規(guī)來進(jìn)行設(shè)計(jì),還需要綜合客戶要求將我們的設(shè)計(jì)理念融入進(jìn)去,當(dāng)然,得預(yù)防那些像掃描香蕉那樣稀奇古怪的事情的發(fā)生。或許這就是為什么它會如此困難?我們也曾發(fā)表過《設(shè)計(jì)公共API的六個注意事項(xiàng)》文中作者根據(jù)自己的親身經(jīng)驗(yàn)總結(jié)了幾條API設(shè)計(jì)注意事項(xiàng),大家不妨一起品嘗下!
總結(jié)
以上是生活随笔為你收集整理的什么是好的API设计?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: System.Windows.Forms
- 下一篇: 面向对象和基于对象