來自Quora: https://www.quora.com/Whats-the-difference-between-a-library-and-a-framework的置頂答案
這兩個(gè)概念在我學(xué)習(xí)編程的過程中困擾了很久敞斋,之前搜索到的很多答案匈辱,始終覺得離自己充分理解有點(diǎn)差距坑雅,無意中在查看Quora時(shí)搜索了這個(gè)結(jié)果运敢,發(fā)現(xiàn)解釋的比較清晰易懂萝喘,就翻譯過來,如果覺得翻譯的不好猿棉,可以移步去上方的鏈接银舱,通過自己消化是最好的
#庫(kù)
庫(kù)是指可重用的代碼片斷正如你一直在用的那種,換句話說判耕,它并不提供任何程序鉤子讓你對(duì)它進(jìn)行擴(kuò)展透绩。一個(gè)庫(kù)通常會(huì)專注于一個(gè)單一的功能,你可以通過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