來(lái)自Quora: https://www.quora.com/Whats-the-difference-between-a-library-and-a-framework的置頂答案
這兩個(gè)概念在我學(xué)習(xí)編程的過(guò)程中困擾了很久,之前搜索到的很多答案,始終覺得離自己充分理解有點(diǎn)差距,無(wú)意中在查看Quora時(shí)搜索了這個(gè)結(jié)果,發(fā)現(xiàn)解釋的比較清晰易懂,就翻譯過(guò)來(lái),如果覺得翻譯的不好,可以移步去上方的鏈接,通過(guò)自己消化是最好的
#庫(kù)
庫(kù)是指可重用的代碼片斷正如你一直在用的那種,換句話說(shuō),它并不提供任何程序鉤子讓你對(duì)它進(jìn)行擴(kuò)展。一個(gè)庫(kù)通常會(huì)專注于一個(gè)單一的功能,你可以通過(guò)API去獲取它。當(dāng)你調(diào)用一個(gè)庫(kù)函數(shù),它會(huì)執(zhí)行相關(guān)的代碼并控制返回到你自己的代碼。這個(gè)例子是關(guān)于一個(gè)優(yōu)秀的java庫(kù)(或好幾個(gè)庫(kù))叫Apache Commons的:
#框架
框架是一段指定你的程序必須要遵守它結(jié)構(gòu)的代碼。一旦你選擇用某個(gè)框架開始工作,你就必須遵守框架的代碼規(guī)范和設(shè)計(jì)理念??蚣軙?huì)提供你代碼鉤子和回調(diào)函數(shù)以便你可以在上面構(gòu)建自己的程序-相反的,它也會(huì)在需要的時(shí)候調(diào)用你插入的代碼,這我們也稱之為**控制反轉(zhuǎn)**
一個(gè)框架為方便你的工作通常也會(huì)包括好幾個(gè)庫(kù)。下面就是些web框架的例子:
- Ruby on Rails:?http://rubyonrails.org/
- Tornado Web:http://www.tornadoweb.org/
- CakePHP:http://cakephp.org/
感謝閱讀,如有翻譯錯(cuò)誤,歡迎隨時(shí)指正
Ivan